7.

HTML 画像系要素まとめ(img / picture / srcset / WebP / lazy loading)

編集
この記事の要点
  • 基本: ...alt 属性必須
  • Responsive Images: srcset / sizes でデバイスごとに最適サイズ配信
  • + : WebP / AVIF などフォーマット切替
  • パフォーマンス: loading="lazy" / decoding="async" / fetchpriority
  • 装飾用は CSS background-imageコンテンツ と使い分け

基本: img 要素


会社ロゴ


商品


鎌倉の海辺に建つ古民家カフェ

主要属性

属性意味推奨
src画像 URL必須
alt代替テキスト必須。装飾なら alt=""
width / height表示サイズCLS 防止に推奨
loadinglazy / eager初期画面外は lazy
decodingasync / sync / auto通常 async
fetchpriorityhigh / low / autoLCP 画像は high
srcset複数解像度の候補Retina 対応
sizes表示サイズの宣言srcset と併用
crossoriginCORSCanvas 描画時
referrerpolicyReferer 制御必要時

alt 属性のベストプラクティス


窓辺で日向ぼっこする三毛猫





会社情報


商品一覧



可愛い猫
可愛い猫

srcset / sizes: レスポンシブ画像

デバイスの画面密度表示幅に応じて最適な画像を配信:


商品


商品

picture 要素: フォーマット切替

WebP / AVIF のような新世代フォーマットを、対応ブラウザにだけ配信:


  
  
  

  
  商品




  
  
  トップビジュアル




  
  
  商品

画像フォーマットの比較

形式用途圧縮透過アニメ対応
JPEG写真非可逆××全ブラウザ
PNG図・透過可逆×全ブラウザ
GIF古い画像・アニメ可逆 (8bit)全ブラウザ
WebP万能(JPEG/PNG 代替)非可逆/可逆○ (IE 除く)
AVIF最高効率非可逆/可逆○ (Chrome/Firefox/Safari)
SVGアイコン・図ベクター全ブラウザ

2026 年現在の推奨: AVIF → WebP → JPEG/PNG のフォールバック。SVG はアイコン・ロゴに。

パフォーマンス: lazy loading


...


メインビジュアル


...

figure と figcaption

2025 年売上推移グラフ
図 1: 2025 年の月次売上推移(出典: 自社集計)
商品 A の正面・側面ビュー

背景画像 vs img タグの使い分け

用途推奨理由
商品写真・記事内画像意味あるコンテンツ → alt が必要
ヒーローセクションの背景CSS background装飾、テキストが上に乗る
装飾的アイコンCSS background / SVG意味なし → alt 不要
ボタンの中のアイコンSVG inline色変更・アニメ容易
ロゴ + alt会社情報を SR にも
UI 装飾(罫線・パターン)CSS background装飾

画像最適化のチェックリスト

  • 表示サイズの 1〜2 倍の解像度で書き出す(過剰な大解像度は無駄)
  • JPEG 品質は 80% 程度で十分(ファイルサイズと品質のバランス)
  • WebP / AVIF への変換を CI / CDN で自動化(Cloudinary, Imgix, Cloudflare Images)
  • width / height 属性で CLS 防止
  • 初期画面外は loading="lazy"
  • LCP 画像(最大コンテンツ)は fetchpriority="high"
  • SVG は svgo 等で minify
  • PNG は pngquant / oxipng で圧縮

JavaScript で動的に画像

// 画像のプリロード
const img = new Image();
img.src = '/big-image.jpg';
img.onload = () => console.log('読込完了');

// IntersectionObserver で独自 lazy loading
const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            const img = entry.target;
            img.src = img.dataset.src;
            observer.unobserve(img);
        }
    });
});
document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

// Canvas で画像加工
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const image = new Image();
image.crossOrigin = 'anonymous';   // CORS 注意
image.onload = () => {
    canvas.width = image.width;
    canvas.height = image.height;
    ctx.drawImage(image, 0, 0);
    const dataURL = canvas.toDataURL('image/jpeg', 0.8);
    // → 圧縮済の base64
};
image.src = 'photo.jpg';

SEO とアクセシビリティ

  • alt 属性は SEO 上もスクリーンリーダー上も最重要
  • ファイル名も意味のあるものに(IMG_1234.jpg ではなく kamakura-cafe.jpg
  • 構造化データImageObject)でリッチリザルト化
  • sitemap.xml を含めて Google 画像検索に
  • 遅延読込は SEO 影響なし(Googlebot は lazy 対応)

FAQ

Q: width / height を指定しなくても CSS で何とかなる?
A: 見た目は OK でも、HTML パース時点で画像領域が確保されずCLS(Cumulative Layout Shift)が発生します。Core Web Vitals に悪影響です。

Q: WebP をサポートしないブラウザは?
A: 2026 年現在ほぼ無い(旧 IE くらい)。それでも でフォールバックすれば安全です。

Q: alt の文章は長くてもいい?
A: 必要な情報を伝えるのが最優先。複雑な図なら 100 文字超でも OK。あまりに長いなら aria-describedby で別 div に詳細を書きます。

編集
Post Share
子ページ
  1. img要素
  2. map要素
  3. area要素
同階層のページ
  1. 構造
  2. セクション
  3. テキスト・フォント
  4. リスト
  5. リンク・ボタン
  6. ルビ
  7. 画像
  8. オブジェクト
  9. 動画・音声
  10. フォーム
  11. その他

最近更新/作成されたページ