こんな方に読んでほしい
[記事の内容]
以前は、PCを基準にデザインを考えるのが一般的でした。現在は、スマートフォンを基準にデザインを考える「モバイルファースト」の時代になっています。

当ブログでは、スマートフォンが73.6%、PCが26.4%と、約7割の方がスマートフォンで閲覧してくれています。ありがとうございます!
PC向けの横長画像をそのままスマホで表示すると、文字が小さくて読めなくなることがあります。そこで、端末ごとに画像を出し分ける方法が必要になります。
今回は、次の3つの方法を紹介します。

pc_img.jpg
sp_img.jpgPC用とスマートフォン用の画像を、それぞれ別のクラス名を付けて並べて記述します。
<img src="../pc_img.jpg" alt="PC画像" class="pc_img">
<img src="../sp_img.jpg" alt="スマートフォン画像" class="sp_img">class="pc_img"を付けた画像です。PC表示のときだけ見せる画像になります。class="sp_img"を付けた画像です。スマホ表示のときだけ見せる画像になります。altは、SEOやアクセシビリティの面でも大切です。両方の画像にしっかり記述しましょう。PCはpc_img、スマートフォンはsp_imgというクラス名を付けています。このクラス名を使って、次のCSSで表示と非表示を切り替えます。
ベースのスタイルでPC画像を表示し、メディアクエリでスマホ幅になったら表示を入れ替えます。
/* PCではPC画像を表示する */
.pc_img {
display: block;
}
/* PCではスマートフォン画像を非表示にする */
.sp_img {
display: none;
}
@media screen and (max-width: 767px) {
/* スマートフォンではPC画像を非表示にする */
.pc_img {
display: none;
}
/* スマートフォンではスマートフォン画像を表示する */
.sp_img {
display: block;
}
}.pc_imgをdisplay: block;、.sp_imgをdisplay: none;にして、PCではPC画像だけが見える状態にします。@media screen and (max-width: 767px)は「画面幅が767px以下のとき」に適用される指定です。スマホやタブレット縦向きの幅が対象になります。display: none;、スマホ画像をdisplay: block;に切り替えています。display: none;で非表示にしても、ブラウザによっては両方の画像を読み込むため、表示速度の面で不利になることがあります。jQueryの場合は、画像のファイル名の末尾に_pcと_spを付けて区別します。
pc_img_pc.jpg
sp_img_sp.jpgHTMLには画像を1つだけ記述し、切り替え対象のクラス名switchを付けます。
<img src="../pc_img_pc.jpg" alt="PC画像" class="switch">_pcを付けます。jQueryがこの部分を_spに書き換えて、画像を切り替えます。switchを付けます。jQueryはこのクラスを目印に対象を探します。CSSを使う場合と違い、HTMLに記述する画像は1つだけです。スマートフォン用の画像はHTMLに書かず、jQueryが自動で差し替えます。
ウィンドウ幅を取得し、768px以上なら_spを_pcに、768px未満なら_pcを_spに置換します。なお、jQuery本体の読み込みも忘れずに行ってください。
$(function() {
// 切り替える対象のclass属性
var $elem = $('.switch');
// 切り替え対象のsrc属性の末尾の文字列
var sp = '_sp.';
var pc = '_pc.';
// 画像を切り替えるウィンドウサイズ
var replaceWidth = 768;
function imageSwitch() {
// ウィンドウサイズを取得する
var windowWidth = parseInt($(window).width());
// ページ内のすべての.switchに適用する
$elem.each(function() {
var $this = $(this);
// 768px以上なら_spを_pcに置換する
if (windowWidth >= replaceWidth) {
$this.attr('src', $this.attr('src').replace(sp, pc));
// 768px未満なら_pcを_spに置換する
} else {
$this.attr('src', $this.attr('src').replace(pc, sp));
}
});
}
imageSwitch();
// リサイズ操作の0.2秒後に処理を実行する
var resizeTimer;
$(window).on('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
imageSwitch();
}, 200);
});
});$elemに切り替え対象(.switch)、spとpcに置換する文字列、replaceWidthに切り替える幅を入れています。$(window).width()で現在のウィンドウ幅を取得します。each()で対象の画像を順に処理し、replace()で_pcと_spを入れ替えて画像を切り替えます。imageSwitch()を実行します。リサイズ時はsetTimeoutで0.2秒待ってから実行し、処理の連続実行を防いでいます。現在は、HTML標準の<picture>タグで画像を出し分ける方法が主流です。CSSもjQueryも不要で、ブラウザが画面幅に合った画像だけを読み込みます。主要なブラウザは対応済みなので、新しく実装するならこの方法をおすすめします。
<picture>
<source media="(min-width: 768px)" srcset="../pc_img.jpg">
<img src="../sp_img.jpg" alt="商品イメージ" width="600" height="400">
</picture><picture>は、複数の画像候補をまとめて囲むタグです。media="(min-width: 768px)"の条件に合う場合(画面幅768px以上)は、srcsetのPC画像を表示します。<source>の条件に合わない場合は、<img>のスマホ画像を表示します。altやwidth・heightは<img>に記述します。<picture>と<source>を記述する必要があります。background-imageで指定した背景画像には使えません(背景画像はメディアクエリで切り替えます)。今回は、PC画像とスマートフォン画像を切り替える方法を、CSS・jQuery・pictureタグの3パターンで紹介しました。手軽に実装したいならCSS、HTMLをすっきりさせたいならjQuery、表示速度と保守性を重視するならpictureタグが向いています。サイトの環境に合わせて選んでください。
pc_imgとsp_imgのクラス名の付け忘れに注意します。display: none;でも画像を読み込む場合があるため、表示速度に注意します。_pc・_spとクラス名switchを正しく記述します。<picture>タグが推奨です。新規実装ではまず検討します。2026.10.21
2026.10.20
2026.10.19
2026.10.15
2026.10.14
2026.10.13
2026.10.10
2026.08.14
2026.08.12
2026.04.05

© 2026 shu-naka-blog