Image Components

Jake G May 19, 2021 #Features #Components #Images

This post covers the imgswap and img components. Images can also be embedded directly using Markdown ![Ferris](ferris.svg), but using a component lets you explicitly set the width and height. This helps prevent cumulative layout shift (CLS), improving page stability and potentially improving Lighthouse performance scores.

img Component

Optional Classes:

Google Lighthouse recommends setting alt, w, and h attributes. If alt is omitted then the filename is used. If w or h are omitted then get_image_metadata() fills these values.

Usage (same path)

{{<img src="ferris-happy.svg" class="ci b1" alt="Ferris is Happy" caption="Ferris" link="https://www.rust-lang.org/" />}}

Output

 <figure class="fi ci b1"><a href="https://www.rust-lang.org/"><img src="ferris-happy.svg" class="ci b1" alt="Ferris is Happy" width="600" height="400" loading="lazy" /></a><figcaption>Ferris</figcaption></figure>

Ferris is Happy
Ferris

Usage (relative path ./)

{{<img src="./img/ferris-gesture.svg" alt="Ferris says Hello" caption="Ferris" link="https://www.rust-lang.org/" />}}

Output

 <figure class="fi"><a href="https://www.rust-lang.org/"><img src="img/ferris-gesture.svg" alt="Ferris says Hello" width="600" height="400" loading="lazy" /></a><figcaption>Ferris</figcaption></figure>

Ferris says Hello
Ferris

Usage (root path /)

{{<img src="/images/ferris.svg" alt="Ferris the Rustacean" />}}

Output

 <img src="https://troytop.net/images/ferris.svg" alt="Ferris the Rustacean" width="600" height="400" loading="lazy" />

Ferris the Rustacean

imgrow Component

The imgrow component places multiple img or imgswap components side by side. On small screens the images automatically stack vertically.

An optional class can be added to the row container.

Usage

{% <imgrow> %}
{{<img src="ferris-happy.svg" alt="Ferris is Happy" />}}
{{<img src="ferris-gesture.svg" alt="Ferris Gesturing" />}}
{% </imgrow> %}

Output

Ferris is Happy Ferris Gesturing

Stacked Images

Images can also be stacked vertically by placing multiple img or imgswap components one after another.

Ferris is Happy Ferris Gesturing

SVG image directly in code

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 489" width="600" height="489"><g fill="#8f1f1d"><path d="M70 324c1 3 3 4 6 4l24 4 2 5-10 20v5l7 4 24-1 4 4-7 21c0 2 0 4 3 6 1 2 4 2 7 2l24-5 4 4-1 22c-1 2 0 4 3 5h6l23-8 6 3 4 22c0 2 1 3 3 4h7l21-13 6 2 8 20 5 5c3 0 5 0 7-2l18-15h5l13 18c1 2 3 4 6 4l5-3 14-18h6l17 16c1 1 4 2 6 1 3 0 5-1 6-3l9-21 6-1 19 14h7c3 0 5-3 5-5l4-21 6-2 22 9 7-1c2-1 3-2 3-5v-21l5-4 24 6c3 0 5 0 6-2 2-2 3-4 2-6l-4-21 3-5 24 2c4 0 6 0 7-3v-5l-9-21 3-5 25-2 5-5-1-5-14-18c0-1-1-19-12-33v-1c-26-36-106-64-201-65-100-2-184 26-206 64-10 10-12 26-11 26l-15 17c-1 3-2 5-1 7z"/><path d="M565 247c-1-3-12-2-14-3l-38 1-4-7 26-38c1-2 7-7 6-9-3-3-12 1-14 1l-39 7-4-6 22-49c0-3 7-15 5-18-2-2-11 6-13 6l-43 28-4-5 11-43c0-3 7-18 5-19-2-2-9 5-12 6l-38 30-5-4 9-51c0-3 3-18 1-19s-15 13-17 14l-30 38-6-3-3-56c0-3 0-14-3-14-3-1-5 8-8 11l-25 50-7-1-13-57c-1-3-2-12-4-12-4 0-5 10-7 13l-15 56-7 1-22-52c-1-2-4-12-7-12-3 1-2 9-3 12l-7 61-6 3-19-27c-3-1-15-19-18-18-2 1 0 21-1 23l1 40-6 4-36-35c-3-1-7-7-10-5-2 2 0 10 0 13l13 53-4 5-41-26c-2-1-10-7-12-4-2 2 3 4 3 7l22 56-5 6-65-22c-3-1-10-5-12-1-1 2 5 6 6 9l49 53-3 7-47-6c-3 0-9-1-11 1-1 4 6 7 7 9l36 40a116 116 0 0 0 14 46c27 50 110 87 209 87 105 0 193-41 214-95 11-15 13-37 12-38l29-31c2-4 9-9 8-11z"/><path d="m99 289-67 10c-13 3-5 5 0 6 14 2 84 3 85 4zm402 3 67 10c13 4 5 6 0 6-14 2-84 5-86 5z"/></g><path d="M227 293s-24-26-47 0c0 0-18 35 0 52 0 0 30 24 47 0 0 0 21-20 0-52z"/><path fill="#fff" d="M200 302c0 11 6 19 14 19 7 0 12-8 12-19 0-10-5-18-12-18-8 0-14 8-14 18z"/><path d="M360 283s-40-17-52 22c0 0-11 47 33 49 0 0 58-10 19-71z"/><path fill="#fff" d="M339 299c0 10 7 20 14 20 8 0 14-10 14-20s-6-18-14-18c-7 0-14 8-14 18z"/></svg>

imgswap Component

By default main_src is the image displayed, swap_src is displayed on mouse hover.

When you hover your mouse over the image it will display the image to compare.

Google Lighthouse recommends setting alt, w, and h attributes. If alt is omitted then the filename is used. If w or h are omitted then get_image_metadata() fills these values.

Usage (same path)

{{<imgswap main_src="ferris.svg" swap_src="ferris-happy.svg" />}}

Output


<div class="img-swap-div"> <img src="ferris.svg" class="img-main" alt="ferris" width="600" height="400" loading="lazy" /> <img src="ferris-happy.svg" class="img-swap" alt="ferris" width="600" height="400" loading="lazy" />
</div>

ferris ferris

Usage (relative path ./)

{{<imgswap main_src="./img/ferris.svg" swap_src="./img/ferris-gesture.svg" />}}

Output


<div class="img-swap-div"> <img src="img/ferris.svg" class="img-main" alt="ferris" width="600" height="400" loading="lazy" /> <img src="img/ferris-gesture.svg" class="img-swap" alt="ferris" width="600" height="400" loading="lazy" />
</div>

ferris ferris

Usage (root path /)

{{<imgswap main_src="/images/ferris.svg" swap_src="/images/ferris-gesture.svg" />}}

Output


<div class="img-swap-div"> <img src="https://troytop.net/images/ferris.svg" class="img-main" alt="ferris" width="600" height="400" loading="lazy" /> <img src="https://troytop.net/images/ferris-gesture.svg" class="img-swap" alt="ferris" width="600" height="400" loading="lazy" />
</div>

ferris ferris