PR

【徹底解説】imgタグのwidth/height属性は絶対に指定した方が良い

HTML/CSSを学ぶ

こんにちは。今回はimgタグのwidth/height属性の適切な指定方法とその効果について解説していきます。

概要

width/height属性は、画像サイズを定義するものです。書き方は次の通り。

例

<img
  width="800" 
  height="450"
/>

ただし、詳しくは後述しますが実際に表示される時のサイズはCSSに記述があればそちらが優先されます。

参考:https://developer.mozilla.org/ja/docs/Web/HTML/Element/img

役割と効果

width/height属性指定すると、ブラウザは画像がロードされる前に適切なスペースを確保しレイアウトのシフト(詳細は後述)を防ぐことができます。

改めて記述方法から確認していきます。

width属性は画像の幅を、height属性は画像の高さを指定します。実際の画像あるいはデザインファイル上の画像の横幅と縦幅の値、もしくはその比率を指定します。

例:画像が800x450の場合
以下のどの指定でも良い。

<img
  width="800" 
  height="450"
/>

<img
  width="80" 
  height="45"
/>

<img
  width="16" 
  height="9"
/>

この属性の値はピクセルで指定することができます。値は単位のない整数でなければなりません。

例えば、width="500"は画像の幅を500ピクセルに設定します。heightも同様です。

では「レイアウトシフト」について解説します。まずは次のgifを見てみましょう。デモページ(https://itokoba.com/demos/image-attribute-sample/)で実際に試していただくこともできます。

ページ読み込みにおける、width属性とheight属性を指定した場合とそうでない場合の比較例

左がwidth/height属性を指定した場合、右が指定しない場合です。このように、右はページ読み込み時に文字の部分が一瞬動いてしまっています。これが「レイアウトシフト」と呼ばれる現象で、Webページがロードされる間に視覚的な要素が予期せずに動く現象を指します。

ユーザーがページを読んでいる時やボタンをクリックしようとしている時に、突然ページ上の要素が移動したりサイズが変わったりするとユーザーにとっては迷惑ですよね。皆さんもページを読み込んで2秒後くらいに広告が読み込まれて文章やボタンがボコッと動いてイライラした経験があるのではないでしょうか。

widthとheight属性を指定すると、画像が読み込まれる前段階で画像のサイズ分のエリアを確保するようになります。先ほどのgifの左の例のように、すでにスペースが確保されていてそこに画像が収まるような挙動になります。

細かい話ですが、これでUXを大きく改善できますね。特に画像がたくさん使われているページでは、これを指定しないと読み込み直後に要素があちらこちらへガチャガチャ動いてしまいます。

さてこのレイアウトシフトですが、Googleが定義した「Core Web Vitals」というウェブパフォーマンスの指標群の一部として提唱されたものです。

Cumulative Layout Shift (CLS)  |  Articles  |  web.dev
This post introduces the Cumulative Layout Shift (CLS) metric and explains how to measure it.

これを改善することでPageSpeedInsights(https://pagespeed.web.dev/?hl=ja)やLighthouseの点数も上がりますから、ぜひ意識しましょう。

レスポンシブはどうするの

「属性指定の場合は固定値を指定するのがほとんどと言うけど、それではレスポンシブ対応できないでは?」と思うかもしれませんが、ご安心ください。最終的な見た目はCSSで定義されたものが優先されますから、今まで通りサイズ指定を行っていれば問題ありません。

仮に属性でwidth=”800″が指定されていても、CSSでwidth: 100%;が指定されていればちゃんと親要素の幅と同じになります。

まとめ

というわけでimgタグのwidth/height属性についてでした。全ての画像にこれを指定するのは地味ながら大変な作業ですが、その一手間がページのクオリティをグッと上げます。

width/height属性以外にもimgタグに必要な属性はいくつかあります。それらについては次の記事をご覧ください。

また、こういった細かいテクニックをもっと知ってレベルアップしたい方はぜひこちらの本で勉強してみてください!

【脱・初心者】教材だけでは分からない、案件でよく要求される細かいコーディングのテクニック30選 + α - セカヤサBooks
フリーランスのフロントエンドエンジニアとして7年間、サイト制作やWebアプリケーション開発の案件に携わってきた中で「これは伝えたい」と思ったコーディングのテクニックをまとめました! 正直言うと、これができているかどうかが「プロかプロでないか...

コメント

タイトルとURLをコピーしました