HTML: <picture> generates empty space

While layouting a HTML page I discovered a weird issue with the HTML <picture> tag that created empty space below the actual image.

Consider the following code:

<div>
  <picture><img src="red.png"/></picture><picture><img src="green.png"/></picture>
</div>
<div>
  <picture><img src="green.png"/></picture><picture><img src="red.png"/></picture>
</div>

There is some space between the two <div> tags:

Picture'd images with white space

Looking at that space with the dev inspector, we see that the space is coming from the picture tag:

Dev inspector

The picture tag is seemingly unrelated to the <img> tag, and has a height of 17px (but the same width as the image).

If we remove the <picture> tag and only keep div and img, we have the same issue - only that this time div is providing the empty space below the images.

Specifications

HTML 5.2: 4.7.3. The picture element says:

[...] the picture element itself does not display anything; it merely provides a context for its contained img element [...]

It is also defined to be a part of the Phrasing content category, which means it is like a letter in a text.

In CSS2, letters are 10.6.1 Inline, non-replaced elements for which the rule is:

The height of the content area should be based on the font [...]

So when the height of picture is based on the font size, we can change the line height of the surrounding div container:

div {
    line-height: 0;
}

And now, voila:

Fixed picture'd images without white space


via: Why does my HTML5 <picture> have a height outside of its <img> and why does it not contain the <img>?

Written by Christian Weiske.

Comments? Please send an e-mail.