mk-webwork codenote

レスポンシブデザインのWebサイトでは、モバイルサイズ時とPCサイズ時で、別々の画像を表示したいときがあります。pictureタグを使えば、CSSやJavaScriptを使わずに画面幅に応じて画像を切り替えられます。

そのほかにもpictureタグを使うことで、ブラウザごとに拡張子を変更することもできます。webp拡張子に対応しているブラウザならWebP画像を、そうでないブラウザならpng, jpg, svgなどの画像を表示する、というように切り替えることで、ユーザビリティの向上が図れます。また、画像の切り替えにJavaScriptやCSSが不要なため表示スピード向上にもつながります。

<picture>
  <source srcset="画像のパス">
  <img src="画像のパス" alt=”代替テキスト”>
</picture>

sourceタグには下記の属性を記述できます。

  • srcset:条件に一致したときに表示する画像のパス(URL)
  • media:ブラウザ幅(min-width, max-width)に応じて表示するものを切り替える
  • type:jpg, png, svg, webpなど画像形式を記述
  • width:画像の横幅を記述
  • height:画像の高さを記述
<div class="imgbox">
  <picture>
    <source srcset="images/sample.png"><!-- 優先度1-->
    <source srcset="images/sample3.jpg"><!-- 優先度2-->
    <img src="images/sample2.png" alt=”代替テキスト” >
  </picture>
</div>
<div class="imgbox">
  <picture>
    <source srcset="images/sample3.webp" media="(min-width: 1024px)" type="image/webp">
    <source srcset="images/sample.png" media="(min-width: 768px)" type="image/png">
    <img src="images/sample2.png" alt=”代替テキスト”>
   </picture>
</div>

sourceタグはimgタグに対してパスを置換させるためのコードを保持するためのタグです。そのため、CSSはimgタグに対して記述します。

<div class="imgbox">
  <picture>
    <!-- sourceに画像のパスを記述 画面に表示されるのはsrcsetの画像-->
    <source srcset="images/sample.png">
    <!-- imgに画像のパスを記述 -->
    <img src="images/sample2.png" alt="代替テキスト">
  </picture>
</div>
.imgbox {
  position: relative;
  width: 100%;
  max-width: 300px;
}


.imgbox::before {
  padding-top: 56.25%;
  display: block;
  content: '';
}


.imgbox img {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  object-fit: cover;
  width: 100%;
  height: 100%;
  object-position: center;
}
← もどる