サイズ指定の使い分け|px・%・auto・flex・vw/vh
CHAPTER 2
サイズ指定の使い分け|px・%・auto・flex・vw/vh
LESSON 2-3 ボックスレイアウトの基本 ⏱ 所要時間:約9分
レッスン解説動画
GOAL
このレッスンのゴール
  • ✓
    px・%・auto・flex・vw・vh・dvhの7種の性質を説明できる
  • ✓
    「親の高さは基本auto」「横幅の比率はflex」「伸びすぎ防止はmax-width」という判断ができる

STUDIOでボックスの幅や高さを決めるとき、数値の単位はpxだけではありません。px・%・auto・flex・vw・vh・dvhの7種類があり、それぞれサイズを決めるときの基準が違います。どの単位を選ぶかを誤ると、画面幅を変えたときにレイアウトが崩れたり、意図せず横スクロールが出たりします。このレッスンでは、7種類それぞれの性質と、実務でどの場面にどれを選ぶかの判断軸を確認します。

px|固定値だが完全固定ではない

pxはピクセル単位で、画面幅に関わらず同じ大きさを保つ固定値です。ボタンの高さやアイコンのサイズなど、画面幅が変わっても大きさを変えたくない箇所に向いています。

操作動画

ただし、pxは完全に固定されるわけではありません。ボックスの幅に600pxを指定した状態で、画面幅そのものが600pxより狭くなると、ボックスは画面からはみ出さないように縮みます。pxは値そのものは固定されていますが、ボックスが収まる領域(親や画面)がそれより狭くなれば、その領域に押し込まれる形で縮むという性質を持っています。

✓ Point !
pxは絶対に動かない値ではない

pxを指定したからといって、その数値がどんな画面幅でも保証されるわけではありません。スマホ幅で見たときに縮んで小さくなりすぎていないか、あとのレッスンで扱うブレイクポイントごとに確認する習慣が必要です。

%|親を基準にする

%(パーセント)は、そのボックス自身のサイズではなく、直近の親ボックスのサイズを基準にした割合でサイズが決まる単位です。幅を50%に指定すれば、親の横幅の半分の大きさになります。

操作動画

%の性質で重要なのは、親のサイズが変われば子のサイズも自動で追従する点です。親ボックスの横幅を広げると、50%を指定した子ボックスも一緒に広がります。子ボックスを2つとも50%にすれば、2つのボックスを横並びにできます。この、親が変われば子も変わるという連動が、%を使う一番の理由です。

2-1で確認した入れ子の考え方がここで生きてきます。%を指定するときは、常に「このボックスの直近の親は何か」を意識しないと、意図しない基準でサイズが決まってしまいます。

auto|中身に合わせる

autoは、ボックスの高さや幅を数値で固定せず、中に入っている要素の分量に合わせて自動的に決める単位です。特に高さの指定でよく使います。

操作動画

高さをautoにしておくと、中のテキストが増えたときにボックス自身の高さも一緒に伸びます。逆に高さを200pxのように数値で固定してしまうと、テキストが増えたときにボックスの中に収まりきらず、はみ出してしまいます。この、中身がはみ出すトラブルは、STUDIO公式の制作チェックリストでも代表的なつまずきとして挙げられている症状で、多くの場合は原因が親ボックスの高さの固定にあります。

! 注意
親ボックスの高さは基本auto

中に子ボックスを入れる親ボックスの高さは、基本的にautoにしておきましょう。高さを数値で固定してしまうと、あとから中身の量が変わったときに、内容がはみ出したり空白ができたりする原因になります。

flex|横並びの比率を作る

flexは、横並び(または縦並び)になった兄弟ボックスどうしの比率を指定する単位です。3つの兄弟ボックスにそれぞれflex 1・flex 2・flex 1を指定すると、全体の幅を1:2:1の比率で分け合います。

操作動画

%との違いは基準にあります。%は親のサイズに対する割合であるのに対し、flexは兄弟どうしで余った幅をどう分け合うかという比率です。3カラムのカード列のように、画面幅が変わっても常に同じ比率を保ちたいレイアウトでは、flexのほうが扱いやすくなります。画面幅を変えても、指定した比率そのものは変わりません。

flex 1
残りの幅を1の割合で受け取る
flex 2
残りの幅を2の割合で受け取る(隣の2倍の幅になる)
flex 1
残りの幅を1の割合で受け取る
flex 1・flex 2・flex 1の3つを並べると、全体の幅が1:2:1の比率で分けられる。
Q
確認クイズ
画面幅が変わっても、3つのカードの横幅の比率を常に1:1:1で保ちたいとき、どの単位が最も向いているでしょうか。
✓
正解です!
兄弟どうしの比率を保ちたいときはflexが向いています。3つすべてにflex 1を指定すれば、画面幅が変わっても1:1:1の比率が保たれます。
✕
惜しい!
正解はBのflexです。flexは兄弟どうしの比率を指定する単位で、画面幅が変わっても比率が保たれます。

max-widthで伸びすぎを防ぐ

幅を100%にしたボックスは、画面幅いっぱいまで広がります。これは狭い画面では都合がよい一方、大きなディスプレイで見たときには、1行の文字数が長くなりすぎて読みにくくなるなどの問題が起こります。

操作動画

この、広い画面で伸びすぎる問題を防ぐのがmax-widthです。幅は100%のままにしておき、max-widthに1000pxのような上限値を指定すると、画面が広いときはその上限で止まり、画面が狭いときは100%のまま縮む、という2つの性質を両立できます。本文エリアやセクションの中央寄せコンテンツで、max-widthはよく使う設定です。

vw・vh・dvh|画面を基準にする

vw・vh・dvhは、親ボックスではなくブラウザの画面(ビューポート)そのものを基準にする単位です。100vwは画面の横幅いっぱい、100vhは画面の縦幅いっぱいを意味します。ファーストビューを画面いっぱいの高さにしたいときなど、画面基準でサイズを決めたい場面で使います。

操作動画

vhとdvhの違いは、スマホのブラウザでアドレスバーが表示・非表示で高さが変わる場合の挙動です。dvh(dynamic viewport height)は、その時点で実際に表示されている画面の高さに追従するため、スマホでの表示崩れが起きにくくなります。ファーストビューの高さ指定では、vhよりdvhのほうが安定した見え方になります。

! 注意
vwは横スクロールの原因になりやすい

幅に100vwを指定すると、ブラウザの縦スクロールバーの分だけ画面の実際の表示領域からはみ出し、横スクロールが出てしまうことがあります。横幅を画面いっぱいにしたいときは、vwではなく100%を使うのが安全です。

✓
サイズ指定を選ぶときの基本ルール
親の高さは基本auto
数値で固定すると、中身の量が変わったときにはみ出したり空白ができたりするためです。
横幅の比率はflex
画面幅が変わっても、兄弟どうしの比率をそのまま保てるためです。
伸びすぎ防止はmax-width
幅を100%にしたまま上限を設けられるので、狭い画面と広い画面の両方に対応できるためです。
単位基準向いている場面
px固定値(収まる領域が狭ければ縮む)ボタンの高さ・アイコンサイズなど、大きさを変えたくない要素
%直近の親のサイズ親のサイズに追従させたい要素
auto中身の分量親ボックスの高さなど、内容量が変わる要素
flex兄弟どうしの比率横並びのカード列など、比率を保ちたいレイアウト
vw画面の横幅画面いっぱいに広げたい要素(横スクロールに注意)
vh画面の縦幅画面いっぱいの高さにしたい要素
dvh実際に表示されている画面の高さスマホのファーストビューなど、安定した高さが必要な要素
Q
確認クイズ
本文エリアの幅を、狭い画面では100%のまま、広い画面では1000pxで止めたいとき、追加すべき設定はどれでしょうか。
✓
正解です!
幅は100%のままにして、max-widthで上限を設けると、狭い画面では100%・広い画面では上限値で止まる、という2つの性質を両立できます。
✕
惜しい!
正解はCです。幅を100%のままmax-widthで上限を設けるのが、狭い画面・広い画面の両方に対応する方法です。
SUMMARY
  1. pxは固定値だが、収まる領域が狭くなれば縮む
  2. %は直近の親のサイズを基準にする
  3. autoは中身の分量に合わせる。親ボックスの高さは基本auto
  4. flexは兄弟どうしの比率を指定する
  5. max-widthで、幅100%のまま伸びすぎを防げる
  6. vw・vh・dvhは画面を基準にする。vwは横スクロールの原因になりやすい
チェック
理解度チェック
px・%・auto・flex・vw・vh・dvhの7種の性質を説明できる
pxは固定値、%は親基準、autoは中身基準、flexは兄弟比率、vw・vh・dvhは画面基準という、それぞれが何を基準にサイズを決めるかを説明できる状態です。
「親の高さは基本auto」という判断ができる
高さを数値で固定すると中身の量が変わったときにはみ出す問題を理解し、親ボックスの高さは基本autoにするという判断ができます。
「横幅の比率はflex」「伸びすぎ防止はmax-width」という判断ができる
兄弟どうしの比率を保ちたいときはflex、幅100%のまま上限を設けたいときはmax-widthを選ぶという判断ができます。
よくあるつまずき Q&A
幅にpxを指定したのに、スマホ幅で見たら勝手に縮んでいました
pxは値そのものは固定ですが、収まる領域がその値より狭ければ縮む性質があります。あとのレッスンで扱うブレイクポイントごとの表示も合わせて確認しましょう。
%とflex、どちらを使えばいいか迷います
親のサイズに対する割合で決めたいなら%、兄弟どうしの比率を保ちたいならflexを選びます。横並びのカード列のように、比率そのものを維持したいレイアウトではflexが扱いやすくなります。
サイトの右側に余白ができて、左に寄って見えます
多くの場合、横幅がビューポートを超えていることが原因です。vwの指定や固定pxの幅、はみ出し設定などを見直すと直ることがあります。詳しい対処は3-1以降で扱います。
vhとdvh、普段はどちらを使えばいいですか?
ファーストビューのようにスマホでも表示する箇所では、アドレスバーの表示・非表示による誤差が出にくいdvhを基本にすると安定します。