Retina 対応のために img 要素の width, height 属性を再び付けるようにした
みなさんは img 要素に width, height 属性を付けていますか?
私は、ダイヤルアップ接続で画像を1枚1枚ゆっくり表示していた悠遠の時代は書いていましたが、ここしばらくはよほど重い画像をたくさん表示するページでもない限り、付けることはしていませんでした。
ところで、昨今は高解像度ディスプレイの普及に伴い、ウェブページに埋め込む画像も srcset 属性で高解像度版を用意したり、アイコン類は SVG にするなどの対応が求められるようになってきています。
その際、 Firefox において srcset 属性が設定された高解像度画像を横並びにすると、画像の右側におかしな空白が生じてしまいます。具体的にはこんなコード。
<style>
ul {
margin: 0;
padding: 0;
display: flex;
}
li {
display: block;
}
</style>
<ul>
<li><img src="160x120.png" srcset="320x240.png 2x" alt=""/></li>
<li><img src="160x120.png" srcset="320x240.png 2x" alt=""/></li>
</ul>
これは Flexbox で横並びにした例ですが、 display: inline-block や display: table-cell でも同様です。 Chrome や Edge では発生しないので Firefox のバグでしょう。
解決方法は簡単で、 img 要素に width, height 属性でサイズを指定すれば直ります。特定のブラウザのバグのために HTML に手を加えるという対応はあまり好きではありませんが、現状は仕方ありません。