Webサイトのアイドル「画像」もレスポンシブに!
Webサイトに写真やイラストなどの「画像」は欠かせないよね! だけど、ただ画像をポンと置いただけだと、画面の大きさが変わったときに困ったことが起きるんだ。
- パソコン用の大きな画像が、スマホの小さな画面からはみ出しちゃう!
- 逆に、スマホ用に作った小さな画像が、パソコンで見るとぼやけてしまったり、小さすぎて見えなかったり…。
そう、画像だってレスポンシブデザインの仲間入りが必要なんだ! このページでは、画像を画面サイズに合わせて賢く表示するためのテクニックを学んでいこう。
技その1:基本中の基本!CSSの「画像の暴走ストッパー」
まず紹介するのは、一番シンプルで、どんなWebサイトでもまずやっておくべき基本の技だよ。CSSたった2行で、画像が親要素からはみ出すのを防ぐことができるんだ。まるで「画像の暴走ストッパー」だね!
img {
max-width: 100%;
height: auto;
}
max-width: 100%;: 画像の最大の幅を「親要素の幅の100%まで」と指定するんだ。これで、画像が親要素よりも大きくなるのを防げるよ。もし画像が親要素より元々小さい場合は、そのままのサイズで表示される。height: auto;: 画像の幅が変わったときに、高さも自動的に調整して、元の画像の縦横の比率を保ってくれるんだ。これがないと、画像が変に伸びたり縮んだりしちゃうからね。
デモ:max-width: 100% の効果を見てみよう!
下のスライダーを動かして、ピンクの枠(コンテナ)の幅を変えてみて。中の画像が枠の幅に合わせて縮小されるけど、枠からはみ出さないのが分かるかな?画像は元のサイズより大きくはならないよ。
コンテナの幅: 80% (ウィンドウ幅の80%)
この方法はとっても簡単で効果的なんだけど、一つだけ注意点があるんだ。それは、「常に一番大きな画像(例えばパソコン用の高解像度な画像)を読み込んでしまう」ということ。 スマホで見る人にとっては、そんなに大きな画像は必要ないのに、たくさんのデータを使ってしまうことになって、表示が遅くなる原因にもなっちゃうんだ。
この問題を解決してくれるのが、次からのテクニックだよ!
技その2:画質もデータ量も最適化!HTMLの「画像の変身クローゼット」 – <picture>要素
次に紹介するのは、HTMLの<picture> (ピクチャー) 要素! これはまるで「画像の変身クローゼット」みたいに、見る人の画面サイズや条件に合わせて、クローゼットの中から一番ピッタリな服(画像)を選んで着せてくれるんだ。
<picture>要素を使うと、例えば「広い画面ではこの大きな画像を、中くらいの画面ではこの中くらいの画像を、狭い画面ではこの小さな画像を」というように、複数の画像候補を用意しておいて、ブラウザに最適なものを選ばせることができるんだ。
これなら、スマホユーザーに不要な大きな画像を送りつけなくて済むし、画面サイズによって全く違う構図の画像を見せる「アートディレクション」も可能になるよ!
<picture>要素の基本的な使い方
<picture>
<!-- 画面幅が900px以上なら、この画像を使う -->
<source media="(min-width: 900px)" srcset="image-large.jpg">
<!-- 画面幅が600px以上 (で900px未満) なら、この画像を使う -->
<source media="(min-width: 600px)" srcset="image-medium.jpg">
<!-- 上のどの条件にも合わなかった場合や、古いブラウザ用の画像 -->
<img src="image-small.jpg" alt="説明文はここに書くよ">
</picture>
<source>(ソース) 要素:media属性にメディアクエリの条件を、srcset(ソースセット) 属性に表示する画像のURLを指定するよ。ブラウザは上から順番に条件をチェックして、最初に一致した<source>の画像を使うんだ。<img>要素: これは必ず最後に書くこと! どの<source>の条件にも合わなかった場合や、<picture>要素に対応していない古いブラウザで表示される「最後の砦」の画像だよ。alt属性(画像の説明文)も、この<img>タグに書くのがルールだ。
デモ:<picture>要素で画像が切り替わる!
ウィンドウの幅を変えてみて!表示される画像(の色やテキスト)が変わるのが分かるかな?これはブラウザが最適な画像を選んでくれている証拠だよ。
実際のWebサイトでは、ここに見た目が違う画像や、サイズが違う画像を指定するんだ。
技その3:解像度にも対応!「ブラウザにおまかせ!賢い画像セレクター」 – srcsetとsizes属性
<picture>要素は主に「アートディレクション(見た目が違う画像を見せる)」や「特定のブレークポイントで画像を切り替える」のに向いているんだけど、同じ画像でも画面の解像度(Retinaディスプレイみたいに高精細かどうか)や、その画像が実際に表示される大きさに合わせて、もっと賢く画像を選んでほしい!ってこともあるよね。
そんなときに使うのが、<img>タグ自身に付けることができるsrcset (ソースセット) 属性と sizes (サイズズ) 属性なんだ。これらは「ブラウザにおまかせ!賢い画像セレクター」みたいに機能するよ。
-
srcset属性 (幅記述子wと一緒に使う): ブラウザに「こんな画像候補があるよ。それぞれの画像の実際の幅はこれくらいだよ」と伝える。 例:srcset="photo-small.jpg 480w, photo-medium.jpg 800w, photo-large.jpg 1200w"(480wは「この画像の幅は480ピクセルですよ」という意味の「幅記述子」。) -
sizes属性: ブラウザに「この画像は、画面の状況によってこれくらいの幅で表示される予定だよ」と伝える。メディアクエリを使って、条件ごとに表示幅を指定できる。 例:sizes="(max-width: 600px) 100vw, (max-width: 900px) 50vw, 33vw"(これは「画面幅600px以下なら画面幅いっぱい(100vw)で表示、900px以下なら画面幅の半分(50vw)で表示、それより大きい画面なら画面幅の33%で表示する予定だよ」という意味。)
この2つの情報と、見ている人のデバイスの画面密度(Retinaかどうかなど)を総合的に判断して、ブラウザが「よし、この状況ならこの画像が一番ムダなくキレイに見えるな!」という一枚を選んで表示してくれるんだ。すごいよね!
<img
srcset="image-480w.jpg 480w,
image-800w.jpg 800w,
image-1200w.jpg 1200w"
sizes="(max-width: 500px) 100vw,
(max-width: 900px) 70vw,
calc(33vw - 100px)"
src="fallback-image.jpg"
alt="賢く選ばれる画像">
このテクニックは、ブラウザが裏で賢くやってくれるので、見た目のデモは難しいけど、開発者ツール(ブラウザの機能)で見ると、どの画像が選ばれたか確認できるよ。
<picture>要素が「この条件ならこの画像!」と明確に指示するのに対して、こちらはブラウザに判断材料を渡して「よしなに頼む!」という感じだね。
技その4:いつでもシャープ!「魔法のペンで描いた絵」 – SVG画像
最後に紹介するのは、ちょっと種類の違う画像形式「SVG (スケーラブル・ベクター・グラフィックス)」だよ。これは、写真みたいなピクセルの集まりじゃなくて、点や線、形といった情報を数値データで記録する「ベクター形式」の画像なんだ。まるで「魔法のペンで描いた絵」みたいだね!
SVGのすごいところは…
- どれだけ拡大・縮小しても絶対に画質が劣化しない! いつでもくっきりシャープ!
- シンプルな図形なら、ファイルサイズがとても小さくなることが多い。
- CSSやJavaScriptで色や形を後から変えたりできる。
ロゴ、アイコン、簡単なイラストや図形なんかにはSVGがピッタリだよ。写真みたいな複雑な表現には向いていないけどね。
SVGファイルは、普通の画像みたいに<img>タグで読み込めるし、HTMLの中に直接SVGのコードを書き込むこともできるんだ。
デモ:SVG画像を見てみよう!
下の2つの図形はSVGだよ。左はimgタグで、右はHTMLに直接SVGコードを埋め込んでいる。ウィンドウサイズを変えても、くっきり表示されるはず!
SVGを使えば、ロゴやアイコンがどんな画面でもキレイに表示されるよ!
まとめ:画像も賢くレスポンシブ!
これで、画像もレスポンシブデザインの仲間入りさせるための色々な技を学んだね!
- CSSの
max-width: 100%; height: auto;は、まず最初にやっておくべき「画像の暴走ストッパー」。 <picture>要素は、画面サイズや条件に合わせて最適な画像を選んでくれる「画像の変身クローゼット」。アートディレクションにも使える。<img>タグのsrcsetとsizes属性は、ブラウザに賢く画像を選んでもらうための「おまかせセレクター」。表示パフォーマンス向上に役立つ。- SVG画像は、ロゴやアイコンに最適な「いつでもシャープな魔法のペン」。
どのテクニックを使うかは、画像の役割やWebサイトの目的によって使い分けていこう。 これで、写真やイラストも、どんな画面で見ても美しく、そして効率的に表示できるようになったはずだ!
次は、Webサイトの読みやすさを左右する「文字(タイポグラフィ)」をレスポンシブに対応させる方法について学んでいくよ。文字だって、画面に合わせて読みやすく変身させよう!