レッスン 3

vw、vh、パーセント単位

ビューポート相対サイズとパーセントベースレイアウトを、親文脈を壊さずに扱います。

ビューポート単位とパーセントはどちらも「相対」に見えますが、異なる質問に答えます。

vw と vh

  • 1vw = ビューポート幅の 1%
  • 1vh = ビューポート高さの 1%

1440px 幅のビューポートでは:

.hero {
  padding-inline: 5vw; /* 72px */
}

ビューポート単位は次に有用です。

  • fluid な水平 padding と gap
  • 画面幅でスケールするフルブリードセクション
  • clamp() と組み合わせたヒーロータイポグラフィ

注意点:

  • モバイルブラウザ UI が実効ビューポート高さを変える
  • 単独使用で非常に小さいビューポートで極端に小/大きな値
  • アクセシビリティ:vw のみのテキストは狭い画面で小さくなりすぎる

パーセント単位

50%包含ブロックに相対で、常にビューポートではありません。

.sidebar {
  width: 30%;
}

.card-title {
  font-size: 120%; /* 親 font-size に相対 */
}

パーセントは次に有用です。

  • 既知のコンテナ内の列レイアウト
  • 親幅を埋める画像とメディア
  • ネストタイポグラフィのスケーリング

同じ % でも、プロパティ次第で親ボックスの幅か親テキストの font-size を意味します。

vw vs %

質問より良い単位
画面幅全体でスケールvw
親コンテナを埋める%
最小/最大境界付きタイポグラフィrem + vw の clamp()
カード内グリッド列% または fr 単位

ビューポート単位を境界と組み合わせる

一般的なレスポンシブパターン:

.section-title {
  font-size: clamp(1.25rem, 0.9rem + 1.5vw, 2rem);
}

本文テキストに生の vw だけはしばしば攻撃的すぎます。clamp() が最小と最大のガードレールを追加します。

要点

vw/vh はビューポートが参照のとき。% は親ボックスまたは親 font-size が参照のとき。タイポグラフィには clamp() で vw を rem と組み合わせます。

異なるビューポート幅で px 値が vw にどうマップするか CSS Unit Converter / Clamp Generator でプレビューしてください。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る