viewportとは何か
viewport は、ブラウザがページを表示するときの「見える範囲」や「表示の基準になる幅」のことです。スマホでもPCでも同じHTMLを開けますが、ブラウザはまず「このページをどの幅として扱うか」を決めます。
スマホ向けのページで viewport の設定が適切でないと、ブラウザがPC向けページのように縮小して表示してしまい、文字が小さく見えることがあります。
よく使うviewport設定
<meta name="viewport" content="width=device-width, initial-scale=1.0"> この設定の意味は次の通りです。
- width=device-width
- 端末の実際の画面幅を基準に表示します
- initial-scale=1.0
- 最初の拡大率を100%にします
viewport を適切に設定すると、スマホでも「スマホの幅らしい見え方」でCSSが効きやすくなります。media query もこの前提があると、狙ったとおりに切り替わりやすくなります。
viewport を忘れるとどう見えるか
viewport を入れ忘れると、CSS がまったく効かないわけではありません。ただし、ブラウザが「PC向けの広いページを縮小して見せよう」とするので、次のような違和感が出やすくなります。
- 文字だけ妙に小さい
- フォントサイズ指定は同じでも、全体が縮んで見えます
- 横並びのまま詰まって見える
- 本来スマホ向けにしたい並びが、縮小表示でごまかされやすいです
- media query の効き方が読みにくい
- CSS自体は当たっていても、見た目の基準がずれて判断しづらくなります
- 検証時に原因を見失いやすい
- CSSが壊れたのではなく、表示の土台がずれている場合があります
まずは meta name="viewport" を確認してから media query を調整する、という順番で見ると切り分けしやすくなります。
media queryでCSSを切り替える
media query は、「もし画面幅がこの条件なら、このCSSを使う」という書き方です。レスポンシブ対応で最もよく使うのは、画面幅による条件分岐です。
基本構文
@media (max-width: 768px) {
.box {
padding: 16px;
}
} この例では、画面幅が768px以下のときだけ .box に padding: 16px; が適用されます。
よく使う考え方
- max-width
- 指定した幅以下のときに効くので、PCからスマホへ狭くなる場面で使いやすいです
- min-width
- 指定した幅以上のときに効くので、広い画面で追加の調整を入れたいときに便利です
- 条件を増やせる
- 幅だけでなく、向きや印刷用なども条件にできます
- 通常のCSSが先
- まず基本の見た目を書き、必要な部分だけ media query で上書きします
画面幅で切り替える実例
ここでは、PCでは横並び、スマホでは縦並びに変える例を見ます。レスポンシブ対応ではとてもよく出てくるパターンです。
<section class="news-list">
<article class="news-card">新着記事</article>
<article class="news-card">人気記事</article>
<article class="news-card">おすすめ記事</article>
</section> .news-list {
display: flex;
gap: 16px;
}
.news-card {
flex: 1;
padding: 20px;
border-radius: 12px;
background: #ecfeff;
}
@media (max-width: 700px) {
.news-list {
flex-direction: column;
}
} ※プレビューの右下にあるアイコンをドラッグして、実際の画面幅を動かして切り替えを確認できます。
PCサイズでは .news-list が横並びになり、狭い画面では flex-direction: column; に切り替わって縦積みになります。こうした「並び方の切り替え」は、レスポンシブ対応の定番です。
media query が効かないときの見方
レスポンシブ実装では、「書いたのに切り替わらない」と感じることがあります。そのときは次の順で確認すると原因を見つけやすいです。
- 条件の向きを確認する
max-widthとmin-widthを逆にしていないか確かめます
- 基本CSSが先にあるかを見る
- 先に通常時の見た目を書き、あとで上書きする形になっているか確認します
- 切り替えたいプロパティを確認する
displayやflex-directionなど、見た目に直結する指定を変えているか見ます
- 実際に苦しくなる幅を縮めて探す
- DevTools やプレビューで幅を動かし、どこで読みにくくなるかを観察します
どの幅で切り替えるか
ここで大事なのは、決め打ちの数字を暗記することではなく、レイアウトが苦しくなる幅を見つけることです。
- 文字が読みにくくなったら
- その少し手前で切り替えを考えます
- カードが押しつぶされたら
- 列数や並び方向を変えます
- ナビゲーションが窮屈なら
- 横並びから縦並びや折り返しに切り替えます
- 端末名より表示を基準にする
- iPhone用のような端末名より、このレイアウトが崩れる幅で判断します
min-widthとmax-widthの考え方
media query では max-width と min-width のどちらもよく使います。
max-width
「この幅以下なら切り替える」という書き方です。広い画面向けの見た目を基本にして、狭い画面で調整を加えるときに分かりやすいです。
min-width
「この幅以上なら切り替える」という書き方です。スマホ向けのシンプルな見た目を先に作って、広い画面で機能や列数を増やすときに向いています。
/* 基本の見た目 */
.container {
padding: 16px;
}
/* 768px以下で調整 */
@media (max-width: 768px) {
.container {
padding: 12px;
}
}
/* 900px以上で調整 */
@media (min-width: 900px) {
.container {
padding: 32px;
}
} この段階では、max-width は「狭くなったときの調整」、min-width は「広くなったときの追加調整」と読み分けられれば十分です。モバイルファーストという設計の考え方は、次の実践記事でまとめて扱います。
(max-width: 700px)
理解度チェッククイズ
viewportとmedia query基礎クイズ
まとめ
- viewport
- ブラウザがどの幅を基準にページを表示するかを決める設定です
- media query
- 画面幅などの条件に応じて CSS を切り替える仕組みです
- 基本を先に書く
- 通常の CSS を作り、必要な部分だけ条件付きで上書きします
- 数値より観察
- ブレークポイントは端末名より、レイアウトが苦しくなる幅で決めます
次回は、相対単位・max-width・レスポンシブ画像を使って、崩れにくいサイズ指定を学びます。