Skip to content

Pictures and captions

A useful picture shows something the prose cannot show as quickly. Give it a caption that directs attention, useful alternative text and enough space to inspect the detail. Keep the source image proportional when the column narrows.

The examples use the shared theme and setup. Keep the .fltheme-components wrapper around Basecoat and du- component markup.

Images · MaterialX

MaterialX renders this pattern from Markdown. The source panel contains the actual authoring syntax, including attribute lists where they apply. Keep the renderer extensions enabled on the destination.

Vexy Lines workspace with a line-art portrait

The workspace places the source and its line treatment beside the controls.
HTML · compiled output
<figure>
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://i.vexy.art/vl/landing/home-vexy-lines.jpg"><img alt="Vexy Lines workspace with a line-art portrait" loading="lazy" src="https://i.vexy.art/vl/landing/home-vexy-lines.jpg" width="960"></a></p>
<figcaption>The workspace places the source and its line treatment beside the controls.</figcaption>
</figure>
Markdown · authored source
<figure markdown="1">

![Vexy Lines workspace with a line-art portrait](https://i.vexy.art/vl/landing/home-vexy-lines.jpg){ loading="lazy" width="960" }

<figcaption>The workspace places the source and its line treatment beside the controls.</figcaption>
</figure>

Syntax and variants in MaterialX

Images: authoring details

Lightbox

The image plugin wraps ordinary Markdown images with a lightbox link. Select this specimen to inspect detail, then close it with the close control or Esc. The inline image remains useful when scripting is unavailable.

Parallel blue and green strokes demonstrating a Vexy Lines fill

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_960/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img alt="Parallel blue and green strokes demonstrating a Vexy Lines fill" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_960/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"></a></p>
Markdown · authored source
![Parallel blue and green strokes demonstrating a Vexy Lines fill](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_960/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ loading=lazy }

Image alignment

Alignment is for a small image with a short explanatory passage, not a way to force long prose into a narrow channel. The image returns to the available width when there is no room beside it.

A compact blue and green line sample aligned beside this note

The aligned specimen lets a short note refer to an adjacent detail. End the relationship promptly; for a sustained margin composition, use the FontLab aside image pattern.

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_fill,w_360,h_240/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img align="right" alt="A compact blue and green line sample aligned beside this note" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_fill,w_360,h_240/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png" width="240"></a></p>
<p>The aligned specimen lets a short note refer to an adjacent detail. End the
relationship promptly; for a sustained margin composition, use the FontLab
<a href="../../design/fontlab-patterns/#fl-aside">aside image pattern</a>.</p>
Markdown · authored source
![A compact blue and green line sample aligned beside this note](https://res.cloudinary.com/fontlab/image/upload/c_fill,w_360,h_240/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ align=right loading=lazy width=240 }

The aligned specimen lets a short note refer to an adjacent detail. End the
relationship promptly; for a sustained margin composition, use the FontLab
[aside image pattern](../design/fontlab-patterns.md#fl-aside).

Image captions

A caption says what the reader should notice or why the image matters. It adds context; it does not replace alternative text.

Parallel strokes showing how the fill keeps an even visual rhythm

The line spacing stays legible at the baseline content width.

HTML · compiled output
<figure>
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img alt="Parallel strokes showing how the fill keeps an even visual rhythm" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"></a></p>
<figcaption>
<p>The line spacing stays legible at the baseline content width.</p>
</figcaption>
</figure>
Markdown · authored source
![Parallel strokes showing how the fill keeps an even visual rhythm](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ loading=lazy }
/// caption
The line spacing stays legible at the baseline content width.
///

Image lazy-loading

Use loading=lazy for non-critical images below the opening view. The browser may delay the request, but the dimensions, alternative text, and surrounding layout remain stable.

A lazily loaded Vexy Lines detail

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img alt="A lazily loaded Vexy Lines detail" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png" width="480"></a></p>
Markdown · authored source
![A lazily loaded Vexy Lines detail](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ loading=lazy width=480 }

Light and dark mode

Theme-specific sources are appropriate when one asset cannot remain legible on both surfaces. Both images need equivalent alternative text because only one is visible at a time. FontLab’s theme switcher updates the MaterialX colour scheme, so the matching fragment is selected without page-level JavaScript.

A Vexy Lines sample prepared for a light reading surface The same Vexy Lines sample prepared for a dark reading surface

When an illustration remains clear in all five identities, prefer one source. Theme-specific files double the maintenance and accessibility checks, so they should solve a real contrast problem rather than decorate the theme switch.

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:10/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-light"><img alt="A Vexy Lines sample prepared for a light reading surface" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:10/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-light"></a>
<a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:-20/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-dark"><img alt="The same Vexy Lines sample prepared for a dark reading surface" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:-20/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-dark"></a></p>
<p>When an illustration remains clear in all five identities, prefer one source.
Theme-specific files double the maintenance and accessibility checks, so they
should solve a real contrast problem rather than decorate the theme switch.</p>
Markdown · authored source
![A Vexy Lines sample prepared for a light reading surface](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:10/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-light){ loading=lazy }
![The same Vexy Lines sample prepared for a dark reading surface](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_720/e_brightness:-20/f_auto,q_auto/vw/68daa71678eede3413b20f4e_fill-linear.png#only-dark){ loading=lazy }

When an illustration remains clear in all five identities, prefer one source.
Theme-specific files double the maintenance and accessibility checks, so they
should solve a real contrast problem rather than decorate the theme switch.

A wider picture

Use the editorial .fl-wide class when the image needs more room than the prose. It retains the image proportions and shrinks with the viewport.

This pattern uses the shared FontLab editorial styles described in Theme and setup.

Linear fill showing parallel strokes and tone

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img alt="Linear fill showing parallel strokes and tone" class="fl-wide" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"></a></p>
Markdown · authored source
![Linear fill showing parallel strokes and tone](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ .fl-wide loading="lazy" }

A picture beside the text

Use .fl-aside for supporting media in the desktop margin. Keep the image in a logical source position; on narrow screens it returns to the reading column.

This pattern uses the shared FontLab editorial styles described in Theme and setup.

Linear fill with parallel strokes

Line direction and density affect the appearance of the source image. The picture supports this explanation; no instruction depends on its position.

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"><img alt="Linear fill with parallel strokes" class="fl-aside" loading="lazy" src="https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png"></a></p>
<p>Line direction and density affect the appearance of the source image. The picture supports this explanation; no instruction depends on its position.</p>
Markdown · authored source
![Linear fill with parallel strokes](https://res.cloudinary.com/fontlab/image/upload/c_limit,w_auto/f_auto,q_auto,dpr_auto/vw/68daa71678eede3413b20f4e_fill-linear.png){ .fl-aside loading="lazy" }

Line direction and density affect the appearance of the source image. The picture supports this explanation; no instruction depends on its position.

An image beyond the text column

The editorial .fl-bleed class extends a substantial picture towards the viewport edge. It requires the shared editorial layout CSS and JavaScript, which measure the available width. Test it in the actual destination shell.

This pattern uses the shared FontLab editorial styles described in Theme and setup.

Vexy Lines workspace and portrait

HTML · compiled output
<p><a class="glightbox" data-desc-position="bottom" data-height="auto" data-type="image" data-width="auto" href="https://i.vexy.art/vl/landing/home-vexy-lines.jpg"><img alt="Vexy Lines workspace and portrait" class="fl-bleed" loading="lazy" src="https://i.vexy.art/vl/landing/home-vexy-lines.jpg"></a></p>
Markdown · authored source
![Vexy Lines workspace and portrait](https://i.vexy.art/vl/landing/home-vexy-lines.jpg){ .fl-bleed loading="lazy" }