CSS

The CSS height property sets an element’s height, but percentage heights work only when the containing block’s height is specified, so it’s often used with min-height, vh, and overflow for reliable layouts.

height

height は、要素の「高さ」を指定し、%vh の基準と overflow まで含めてレイアウトの破綻を防ぐために使います。

このページでできるようになること

まずは直感:height って何?

ざっくり言うと、height は「箱の高さを決める」指定で、auto(中身に合わせる)と違って中身が増えても箱は伸びないのが事故ポイントです。

正確な定義(仕様に沿った説明)

何のために存在するか

height は要素の高さ(縦方向サイズ)を指定し、レイアウト計算に使われます。コンテンツ量に任せるか、一定の高さに制御するかを選ぶためのプロパティです。

何に適用されるか(対象)

height は多くの要素に適用されますが、通常の inline 要素には効きません(高さは行のレイアウトに吸収されやすい)。高さを効かせたいなら display: inline-block / block / flex / grid などにします。

できること / できないこと(制約)

できること
  • 要素の縦サイズを px/rem/%/vh などで指定できる
  • max-height と併用して「これ以上は伸ばさない」を作れる
  • overflow と併用して「溢れたときの見せ方」を決められる
できないこと(重要)
  • 通常の inline 要素の見かけの高さを直接増やすこと(line-heightdisplay 側の話になる)
  • % を「親の高さが未確定」な状態で期待どおりに効かせること
  • 高さを固定してもコンテンツ量が自動で収まるようにすること(溢れたら overflow で制御が必要)

影響範囲(レイアウト/描画/ユーザー操作/アクセシビリティ)

レイアウト
height はボックスの縦サイズを決め、周囲の配置や折り返し、スクロール発生に影響します。高さを固定すると、内容が増えてもボックスが伸びず、溢れが発生しやすくなります。
描画
高さを小さくすると内容が見切れたり、overflow の設定次第でスクロールや切り抜きが発生します。背景や枠線は指定した高さに合わせて描画されます。
ユーザー操作
スクロール領域(overflow: auto など)を作ると、ユーザーは「ページ」ではなく「箱」の中をスクロールする状態になります。モバイルでは操作感が変わるので、必要な箇所に限定します。
アクセシビリティ
高さ固定でテキストが隠れると、拡大表示(ズーム)や文字サイズ変更で読めなくなります。固定が必要なら min-heightclamp()、または溢れを避ける設計を優先します。

基本の書き方(最短の型)

最小サンプル(コピペ用)

CSS

.box {
    height: 200px;
}

まずは「高さを数値で固定する」を起点に、溢れるなら overflow、固定したくないなら min-height に寄せる、で覚えると迷いにくいです。

よく使う値/典型パターン

固定(見た目を揃える)
height: 240px;
最低限だけ確保(中身が増えたら伸びる)
min-height: 240px;
画面基準で確保(ヒーロー等)
height: 60vh;(表示領域の高さ基準)
%(親の高さが決まっているときだけ)
height: 50%;(親の高さが未確定だと期待どおりになりにくい)
溢れ対策
height: 240px; overflow: auto;
レスポンシブで極端を避ける
min-height: clamp(180px, 30vh, 420px);

どこに書くか(外部CSS/ページ内style/インライン)

基本:外部CSS(推奨)
実務では .card.hero など、役割を持ったクラスに高さルールをまとめて管理します。
ページ内 <style>
学習用デモや単体検証では便利です(このページのデモはページ内にあります)。
インライン(例外)
style="height: 200px" は検証には使えますが、運用では追跡しづらいので基本は避けます。

最小デモ(px と % の違い)

1) height を px で固定(溢れは overflow

この箱は高さが固定です。

中身が増えると溢れます。overflow: auto ならスクロールで読めます。

文章が増える想定(翻訳/端末差/文字サイズ変更)を考えると、固定は必要な場面だけにします。

height: 120px / overflow: auto

2) height を % で指定(親の高さが必要)

この箱は親の高さに対する %です。

親の高さが決まっているので、% が素直に効きます。

親:height 220px / 子:height 50%






HTML

<div class="demo-box">...</div>

<div class="demo-parent">
    <div class="demo-box">...</div>
</div>

CSS

.demo-parent {
    height: 220px; /* %デモ用の親の高さ */
}

.demo-box {
    height: 120px; /* pxデモの初期値 / %デモではJSで上書き */
    overflow: auto; /* 溢れたらスクロール */
}

JavaScript

percentBox.style.height = pc + "%";

仕様として押さえるポイント(初心者が事故りやすい所)

継承する?(inheritance)
height継承しません。親に書いた高さが子へ自動で伝わるわけではありません。
初期値は?(initial)
初期値は auto(中身に合わせる)として扱われます。
適用対象は?(applies to)
多くの要素に適用されますが、通常の inline 要素では高さ指定が効きません。高さを持たせたい場合は display を変えます(例:inline-block)。
% の基準は?(percentages)
height: 50%;親(包含ブロック)の高さが確定しているときに、親の高さを基準に計算されます。親の高さが auto のままだと、% が期待どおりに効かない/計算できない状況が起きます。
vh の基準は?
vh は表示領域(ビューポート)の高さ基準です。ページ全体ではなく「画面」を基準にするので、ヒーローやモーダルで便利ですが、固定しすぎると小さい画面で溢れやすくなります。
算出値/使用値の考え方(computed/used value)
DevTools の Computed で最終的な height(px換算など)を確認します。% を指定しているのに計算されていない場合は「親の高さが未確定」を疑います。
省略時の扱い
height を書かなければ auto となり、コンテンツに合わせて伸びます。固定したい理由がないなら省略が安全です。
無効値の扱い
無効な値(例:height: big;)は無視され、その宣言は効きません。DevTools の Styles で無効化(取り消し線など)を確認します。
アニメーション可能?(animatable)
長さとして指定した height はアニメーション可能です。ただしレイアウトが毎フレーム変わり重くなりやすいので、必要最小限にし prefers-reduced-motion を尊重します。

よくある勘違い・混同ポイント

height を指定すれば中身に合わせて伸びる
伸びません。height を固定すると箱は伸びず、増えた中身は溢れます。伸ばしたいなら height を外して auto にするか、最低限だけなら min-height を使います。
height: 100% はいつでも親と同じ高さになる
なりません。親の高さが確定しているときにだけ、% は素直に計算されます。親が auto のままだと 100% が期待どおりにならない状況が起きます。
heightline-height を混同する

似ていますが役割が違います。

  • height:要素(箱)の高さ
  • line-height:テキストの行の高さ(読みやすさ・縦のリズム)
inline 要素に height を書いて効かない
span など通常の inline は高さ指定が効きません。display: inline-block にすると箱として高さを持てます。

実務でよくある使用例(制作会社の現場を想定)

ヒーローの見た目を画面基準で確保する

ファーストビューで一定の存在感が必要なら height: 60vh; のように画面基準で確保します。ただし小さい画面で溢れないよう、min-heightclamp() で極端を避けます。

モーダル/サイドバーの「中だけスクロール」を作る

ページ全体ではなく、特定の箱の中だけスクロールさせたい場合は max-heightoverflow: auto を組み合わせます。スクロール領域が増えると操作感が変わるので、必要箇所に限定します。

カードの最低高さだけを揃えて見栄えを整える

文章量が変わるカードは固定 height だと溢れやすいので、まず min-height で最低限を揃え、内容が多いカードだけ自然に伸びるようにします。

実務で起きがちな事故と回避策

height: 100% が効かない」

原因候補:親の高さが未確定(auto
親の高さが決まっていないと、子の % 高さは計算できない/期待どおりになりにくいです。親に height(または設計として min-height)を与えるか、% をやめて vh など別基準を検討します。
最短の確認(DevTools)
DevTools の Computed で子の height がどう計算されているか、親の heightauto のままかを見ます。

「固定したらテキストが切れる/はみ出す」

回避:固定が必要なら overflow まで決める
height を固定するなら、溢れたときの挙動を overflowhidden/auto 等)で決めます。テキストが重要なら隠すよりスクロールやレイアウト再設計を優先します。
回避:まずは min-height を検討する
見た目を揃えたいだけなら min-height のほうが破綻しにくいです。

height を書いたのに効かない」

原因候補:inline 要素に指定している
span などに height を書いても効きません。display: inline-block にして箱として扱います。
原因候補:上書きされている(優先順位/読み込み順)
別のルールが勝っている可能性があります。DevTools の Styles でどの宣言が最終的に適用されているか確認します。

「狭い画面で見切れる」

回避:固定値を clamp() やメディアクエリで調整する
min-height: clamp(180px, 30vh, 420px); のように極端を避けます。文字サイズ変更でも読める余裕を確保します。

アクセシビリティ/UX観点での注意(必要な範囲で)

関連プロパティ・関連セレクタとの組み合わせ・相互作用

min-height / max-height
固定より安全に「下限/上限」を作る。実務では height 単体よりセットで考える場面が多い。
overflow
固定高さで溢れるときの挙動を決める。overflow: auto で箱内スクロールにできる。
box-sizing
heightpadding/border の関係(見かけのサイズ感)に影響する。思ったより大きい/小さいと感じたら疑う。
display
inline では高さが効きにくい。高さ指定が必要なら inline-block やブロック化を検討する。
line-height
テキストの行の高さ。ボタン等で縦中央に見せたい場面で混同しやすいので役割分担を意識する。
aspect-ratio
画像/動画/カードなどで縦横比を守りたいときに便利。高さ固定より破綻しにくい場面がある。

補足ミニデモ:inline だと高さが効かない

Bad / Good

inline は高さ指定が効きにくいので、箱にしたいなら inline-block にします。

inline(height指定しても効きにくい)

inline-block(heightが箱として効く)

CSS

.bad {
    display: inline;
    height: 120px;
}

.good {
    display: inline-block;
    height: 120px;
}

試験(Webクリエイター能力認定試験)で得点できる整理

用語

ひっかけポイント

ミニ確認

Q1. height: 100% が効かないとき、最初に疑うべき条件は? A. 親(包含ブロック)の高さが確定しているかです。親が auto のままだと % を計算できず、期待どおりになりにくいです。
Q2. spanheight を指定しても高さが変わらないのはなぜ? A. 通常の inline 要素は高さ指定が効きにくいからです。箱として扱うなら display: inline-block などにします。
Q3. 高さ固定で文章が見切れる。まず何を追加する? A. 溢れ方を決める overflow(例:overflow: auto)を追加します。ただし、そもそも固定が必要か(min-heightで足りないか)も再検討します。
Q4. 「見た目の高さを揃えたい」が、文章量は変わる。どれが安全? A. 固定 height より min-height が安全です。最低限だけ揃え、内容が多いものは自然に伸びます。
Q5. DevTools で高さトラブルを追うとき、どこを見る? A. Styles でどの height が勝っているか、Computed で最終的な height(%がどう計算されたか)を見ます。

よくある質問(FAQ)

height: 100% が効かないのはなぜ?
親(包含ブロック)の高さが確定していない可能性が高いです。親が height: auto のままだと、子の % 高さは期待どおりに計算できません。DevTools の Computed で親子の height を確認します。
高さを揃えたいが、文章が長いときに切れる
固定 height は切れやすいので、まず min-height を検討します。どうしても固定するなら、溢れ方(overflow)をセットで決めます。
heightmin-height はどう使い分ける?
「必ず同じ高さに固定したい」なら height、「最低限の高さだけ確保して内容に応じて伸びたい」なら min-height が向きます。実務では後者のほうが破綻しにくいです。
箱の中だけスクロールさせたい
max-heightoverflow: auto を組み合わせます。スクロール領域が増えると操作感が変わるので、必要箇所に限定します。

よくあるエラー/症状 早見表

症状:height: 100% が効かない
原因候補:親の高さが未確定(auto)。確認:DevTools の Computed で親子の height。解決:親に高さ/下限を与える、または % をやめて vh 等へ。
症状:テキストが切れる/はみ出す
原因候補:固定 height に対して内容が多い。確認:Box Model と overflow の設定。解決:min-height に寄せる、または overflow で溢れ方を制御。
症状:height を書いたのに効かない
原因候補:対象が inline、上書きされている。確認:DevTools の Styles(勝っている宣言)と Computed。解決:display を変更、または詳細度/読み込み順を整理。
症状:狭い画面で見切れる
原因候補:固定値が大きすぎる、vh の固定が強すぎる。確認:Computed の高さと内容量。解決:clamp()、メディアクエリ、固定の撤廃。

まとめ:迷ったときの判断軸(短いチェックリスト)