152
144

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTMLにimg要素で画像を表示する 2020年版

Last updated at Posted at 2020-06-08
1 / 14

基本形

```html 画像 ``` 基本形は非常にシンプルですね。

レスポンシブ画像1: srcset属性

```html 画像 ``` `srcset`属性を使うとRetinaディスプレイ/高解像度ディスプレイに対応した画像を置くことができる。

参考


レスポンシブ画像2: sizes属性

```html 画像 ```

sizes属性を使うとさまざまなディスプレイサイズに対応できる。

参考


レスポンシブ画像3: アートディレクション(画像の切り替え)

<picture>
  <source media="(max-width: 799px)"
          srcset="sample-480w-sp.jpg">
  <source media="(min-width: 800px)"
          srcset="sample-800w.jpg">
  <img src="sample-800w.jpg"
       alt="画像">
</picture>

picture要素とsource要素を組み合わせるとディスプレイサイズなど条件別にまったく別な画像を出し分けることもできる。

参考


レスポンシブ画像4: webpを使う

```html 画像 ``` webpはGoogleが開発した画像形式で、jpegなど従来型画像形式よりも軽量であるためwebパフォーマンス面で有利になる。
前述のアートディレクションと同様の方法で表示切り替え可能。
IEとSafariは現在のところwebp非対応。

参考


レスポンシブ画像5: 画面サイズおよび解像度ごとの出し分けとwebp/pngの出し分けを律儀に行ってみる

```html 画像 ``` 画像一枚を表示するためにHTML記述量がびっくりするほど増えます:sweat_smile:

サーバー側でwebp出し分け設定を行う方法

前項のようにHTMLの記述量が増えることを防止するために、サーバー側の設定変更で対応する方法があります。Apache/.htaccessを使う方法とNginxを使う方法に付いては、下記が大変参考になりました。

参考


decoding属性

```html 画像 ``` `decoding="async"` 指定で、画像は非同期で復号化される。HTML Living Standard標準化仕様で、IE以外の主要ブラウザで使用可能。

画像のデコーディング(復号)を非同期にすることで、表示時間が短縮される。

参考


loading属性

```html 画像 ``` - `loading="lazy"`指定で画像の遅延読み込みができる。 - HTML Living Standard標準化仕様ですが、IEとSafariは現在のところ非対応。 - 仕様上`width` / `height` 属性を書いてあげないと動作しない。

参考


decoding="async"とloading="lazy"を両方書くとどうなるか

```html 画像 ```
  • decoding="async"loading="lazy"は、併記しても両立しない。両方書くとloading="lazy"が優先される。

  • loading="lazy"が指定されていてもページ読み込み時にビューポート内の画像は遅延せず読み込まれる。

  • ということは大量の画像がありスクロールするページではloading="lazy"、そうでなければdecoding="async"といった具合にケースによって使い分けるのが良いのではないか(自信なし):rolling_eyes:

参考


【重要】width / height属性の仕様変更

```html 画像 ``` 2019年10月にWHATWGが標準化。
`width` / `height` 属性を記述することで**layout Shift**(画像ロード時の表示のガタつき)が起きなくなる。
従来`width` / `height` 属性はピクセル単位のサイズのことだったが、仕様変更により同時に**アスペクト比**を表すことができるようになった。

layout Shift(画像ロード時の表示のガタつき)

実際の動きはこちらを参照。

Layout ShiftはLighthouse v6より新指標CLSとしてパフォーマンス計測対象となっている。
参考


全部のせで最適化してみる

**レスポンシブ画像 + webp対応 + 非同期復号 + Layout Shift対策** 全部のせで画像を最適化したコードは次のようになりました。
<picture>
  <source type="image/webp"
          srcset="full_optimized.webp 1x, full_optimized@2x.webp 2x, full_optimized@3x.webp 3x">
  <img src="full_optimized.png"
       srcset="full_optimized@2x.png 2x, full_optimized@3x.png 3x"
       decoding="async"
       width="640"
       height="360"
       alt="画像">
</picture>
152
144
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
152
144

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?