Open14

imgタグの勉強

hashrockhashrock

preflightでは下記のCSSが適用される。

img, video {
  max-width: 100%;
  height: auto;
}

これはコンテンツ幅(多くは端末のビューポート幅)を超える大きさの画像をリサイズし、heightがautoになっていることでintrinsicRatioから計算されるようになっているということかな。

hashrockhashrock
<!DOCTYPE html>
<html>

<head>
    <style>
        img {
            max-width: 100%;
            height: auto;
        }
    </style>
</head>

<body>
    <img align="center" src="https://github.com/crayon-js/crayon/raw/main/docs/logo.svg" height="256px" width="100%">
</body>

</html>

確かに再現はするんだが、これはwidth=100%にしていたらそうなるのでは?

hashrockhashrock

このケースはちょっと特殊かもしれない。SVG芸で作られているので、width: 100%にしても破綻せずに画像幅だけを伸ばせるのである。

hashrockhashrock

いや違うか。CSSの指定がattributeのheightに勝っちゃうのか。勝つんだ…

hashrockhashrock

GitHubのレンダリングの場合はautoを指定していない。height: autoってなんで必要なんだっけ?

hashrockhashrock

なったわ。

なるほど…!imgにheight属性を指定してしまうと、デフォルトのheight: autoを上書きしてしまうのか!

レイアウトシフト対策でimgにはheight, widthを指定することが多いので、そもそもautoであることを期待できないのか。となるとmax-widthが効くようなケースでは、アスペクト比が崩れてしまうのでheight: autoを再指定しないといけない。

え~…

hashrockhashrock

まだ理解しきれてないけど、自分がコントロールできるコンテンツであればpreflightを一括適用でも問題ないのでは。おそらくUGCがありユーザ自身がプロパティか属性経由で置換要素の幅と高さを指定できてしまうと刺さるのかなあ。