【色々試してみよう!】PCとスマホで画像を切り替えたい時の3つの方法

今回はメインビジュアルなど、PCとスマホで表示する画像を切り替えたい方法を3パターン紹介します。

方法によって、ページ読み込みの際に読み込まれる画像の数が違います。

pictureタグとJavaScriptを使う方法では、ページ読み込みの際にPCかスマホどちらか一方しか読み込まれないので、表示スピードが速くなります。

※CodePenでPC表示を見たいときには「0.5x」を選ぶと見やすいです。SP切り替えは検証ツールで行ってください。

目次

pictureタグによる画像の出し分け

現在のメジャーな方法です。

以前はIE非対応だったためあまり浸透していなかったようですが、現在は全ての主要ブラウザで対応しています。

See the Pen 画像切り替え(picture) by ゆき | Web制作 (@yukimum22) on CodePen.

HTML

 <picture class="mv">
    <source srcset="画像パス" media="(min-width:769px)"><!--切り替え位置を調整(例)768以下なら(max-witdh:768px)-->
    <img src="画像パス" alt="">
  </picture>
  • sourceタグの中身によっては、WebPが反映しなければpngを表示する、といった画像の種類による出し分けも可能です。
  • sorceタグは上から順に優先順位が高くなります(1番目が適用されたら2番目は反映しない)。
<picture>
  <source .../><!-- 優先順位1 -->
  <source .../><!-- 優先順位2 -->
  <source ... /><!-- 優先順位3 -->
  <img ... /><!-- どれも当てはまらない場合 -->
</picture>

CSS

.mv img{
  width:100vw;
  height:auto;
}
  • puctureタグ自体はCSSの調整ができないので、divタグで囲うか、中身のimgタグを調整します。

JavaScriptによる画像の出し分け

レスポンシブの切り替え位置が統一されており、他の箇所も含めて一気に指定したい、というときにオススメです。

See the Pen 画像切り替え(JavaScript) by ゆき | Web制作 (@yukimum22) on CodePen.

HTML

<div class="mv">
    <img src="画像パス/aaa_sp.jpg" alt="" class="change-image">
</div>

imgタグは画像1つ分を用意します。ブレイクポイントで切り替えたい画像には、共通のクラス名を当てます。今回の場合は.change-imageを当てています。

CSS

.mv{
  width:100vw;
}
.mv img{
  width:100%;
  height:auto;
}
@media(min-width:769px){
  .mv{
  width:90vw;
}
}

CSSを調整します。

JavaScript

var changeImages = $('.change-image');
var changeImage = function () {
  changeImages.each(function (index, el) {
    var src = $(el).attr("src");

    if ($(window).width() >= 769) {
      src = src.replace(/_sp/, "_pc");
    } else {
      src = src.replace(/_pc/, "_sp");
    }
    $(el).attr("src", src);
  });
};

$(window).on({
  load: function () {
    changeImage();
  },
  resize: function () {
    changeImage();
  }
});

.change-imageのクラス名を持つ要素を集めて、画像のファイル名の末尾_pc、_spを切り替えます。

クラス名で切り替える

See the Pen 画像の切り替え(クラス名) by ゆき | Web制作 (@yukimum22) on CodePen.

HTML

<div class="mv">
  <img src="SPの画像パス" alt="" class="sp">
  <img src="PCの画像パス" alt="" class="pc">
</div>

スマホで表示したい画像にはsp、PCで表示したい画像にはpcというクラス名を付けます。

CSS

.pc{
  display:none;
}
.mv{
 width:100vw;
}
.mv img{
  width:100%;
  height:auto;
}
@media(min-width:769px){
.sp{
  display:none;
}
.pc{
  display:block ;
 }
.mv{
  width:90vw;
}
}

.pcというクラス名を持つ要素はSPで非表示に、.spというクラス名を持つ要素はPCで非表示に、というCSSを書きます。さらに、画像の大きさを調整します。

従来はこの方法で切り替えていましたが、HTMLの読み込みでスマホとPCの画像両方を読み込む必要があり、表示スピードが落ちます。
また、CSSの記述も多いため、現在はあまり推奨しません。

以上になります。

\Web制作コーダーの営業にオススメ!/

こんな不安を解決します!

  • Web制作の面談ってどんなこと聞かれるの?
  • どんな風に答えればいいの?
  • オンラインの面談って何を準備したらいいの?

"少しでも面談の不安を減らしたい"という方はぜひお手に取ってみてください!

ゆき
体育会系2児ママ
Web制作コーダー(元理学療法士)。子供の出産を機に働き方を考え直しWeb制作の学習を始める。現在はフリーランスとして在宅ワークで活動中。
よかったらシェアしてね!
  • URLをコピーしました!
目次