CSS幅、高さ、オーバーフロー
幅と高さ
寸法プロパティ早見表
| プロパティ | よく使う値 | 用途 |
|---|---|---|
width |
300px、50%、50vw、auto |
要素のコンテンツ幅 |
height |
200px、50%、50vh、auto |
要素のコンテンツ高さ |
min-width |
320px、50% |
最小幅(小さすぎるのを防止) |
max-width |
1200px、80% |
最大幅(レスポンシブでよく使う) |
min-height |
200px、100vh |
最小高さ |
max-height |
400px |
最大高さ(超えるとオーバーフロー) |
overflow |
visible、hidden、scroll、auto |
オーバーフローしたコンテンツの処理方法 |
overflow-x |
visible、hidden、scroll、auto |
水平方向のオーバーフロー制御 |
overflow-y |
visible、hidden、scroll、auto |
垂直方向のオーバーフロー制御 |
widthとheight
widthとheightは要素のコンテンツエリアの寸法を設定します:
サンプル
HTML
<style>
.box {
width: 300px;
height: 200px;
background: #f0f0f0;
}
</style>
<div class="box">寸法範囲を示すボックス要素</div>
よく使う単位
サンプル
HTML
<style>
.pixel {
width: 300px;
background: #e3f2fd;
}
.percent {
width: 50%;
background: #fce4ec;
}
.vw-vh {
width: 50vw;
height: 100vh;
background: #e8f5e9;
}
.auto-width {
width: auto;
background: #fff3e0;
}
</style>
<div class="pixel">ピクセル単位:固定幅300px</div>
<div class="percent">パーセント単位:幅50%</div>
<div class="vw-vh">ビューポート単位:幅50vw</div>
<div class="auto-width">自動幅:コンテンツで決定</div>
min-width / max-width
要素の最小/最大幅を制限し、レスポンシブデザインでよく使用します:
サンプル
HTML
<style>
.container {
width: 80%;
max-width: 1200px;
min-width: 320px;
margin: 0 auto;
background: #e8eaf6;
padding: 10px;
}
</style>
<div class="container">レスポンシブ幅の制約を持つコンテナ</div>
min-height / max-height
サンプル
HTML
<style>
.card {
min-height: 200px;
max-height: 400px;
background: #fff3e0;
border: 1px solid #ccc;
}
</style>
<div class="card">最小/最大高さを持つカードコンポーネント。最大高さを超えるコンテンツはオーバーフローし、overflowプロパティで処理する必要があります。</div>
calc()関数
calc()は、プロパティ値で数学的計算(加算、減算、乗算、除算)を可能にするCSS関数です。最大の利点は異なる単位を混在できることです。
📌 calc()ルール:
+と-は両側にスペースが必要(calc(100% - 20px) ✅、calc(100%-20px) ❌)、*と/のスペースは任意です。
サンプル
HTML
<style>
.layout {
width: calc(100% - 300px);
background: #e3f2fd;
padding: 16px;
}
.sidebar {
width: 300px;
float: left;
background: #fce4ec;
padding: 16px;
box-sizing: border-box;
}
</style>
<div class="layout">メインコンテンツ:幅 = 100% - 300px</div>
よく使うケース
- サイドバー + メインコンテンツ:
.main { width: calc(100% - 300px); }残りのスペースに適応 - 等間隔カード:
.card { width: calc((100% - 40px) / 3); }3カラムで20pxのギャップ - レスポンシブフォント:
font-size: calc(14px + 0.5vw);ベースサイズ + ビューポート増分 - 精密な中央揃え:
left: calc(50% - 100px);transformの代替となる既知のオフセット
calc()の互換性
calc()はIE11+、Chrome 26+、Firefox 16+、Safari 7+でサポートされており、モダンプロジェクトで安全に使用できます。calc()で文字列の連結を避けるだけです。
オーバーフロー制御
💡 overflow-xとoverflow-y: 水平方向と垂直方向のオーバーフローに異なる値を設定すると、一方が
autoに強制される場合があります。ベストプラクティスはoverflowの省略形を使用することです。
要素のコンテンツが設定された幅/高さを超えると、「オーバーフロー」が発生します。overflowプロパティは、オーバーフローしたコンテンツの処理方法を制御します。
overflowの値
サンプル
HTML
<style>
.visible {
overflow: visible;
background: #fce4ec;
height: 50px;
}
.hidden {
overflow: hidden;
background: #e8f5e9;
height: 50px;
}
.scroll {
overflow: scroll;
background: #fff3e0;
height: 50px;
}
.auto {
overflow: auto;
background: #e3f2fd;
height: 50px;
}
</style>
<div class="visible">表示エリア(オーバーフローはボックスの外側に表示)</div>
<div class="hidden">超過時にコンテンツがクリップされる(オーバーフロー非表示)</div>
<div class="scroll">コンテンツが収まってもスクロールバーが常に表示</div>
<div class="auto">コンテンツがオーバーフローした場合のみスクロールバーが表示</div>
各方向の制御
サンプル
HTML
<style>
.box {
overflow-x: hidden;
overflow-y: auto;
width: 200px;
height: 80px;
background: #f5f5f5;
border: 1px solid #ddd;
}
</style>
<div class="box">水平方向のオーバーフローは非表示、垂直方向は自動スクロールで全コンテンツを表示するボックス要素</div>
よく使うケース
1. テキストの省略
text-overflowと組み合わせて単一行テキストの切り捨て:
サンプル
HTML
<style>
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 200px;
border: 1px solid #ccc;
padding: 8px;
background: #f9f9f9;
}
</style>
<div class="ellipsis">これは長いテキストで、コンテナの幅を超えると省略記号で切り捨てられます</div>
2. 画像のクロップ
固定サイズのコンテナでオーバーフローを非表示にして画像を処理:
サンプル
HTML
<style>
.avatar {
width: 100px;
height: 100px;
overflow: hidden;
border-radius: 50%;
background: #e0e0e0;
}
.avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<div class="avatar">アバターコンテナ(円形クロップ)</div>
3. スクロールコンテナ
固定高さのスクロール可能エリアを作成:
サンプル
HTML
<style>
.scroll-box {
height: 300px;
overflow-y: auto;
border: 1px solid #ddd;
padding: 10px;
background: #fafafa;
}
</style>
<div class="scroll-box">
<p>行1:スクロールコンテナは大きなコンテンツを表示できます</p>
<p>行2:コンテンツが高さを超えるとスクロールバーが表示されます</p>
<p>行3:スクロールして非表示のコンテンツを表示</p>
<p>行4:overflow-y: autoで実装</p>
<p>行5:コンテンツが多いほどスクロールも多くなります</p>
<p>行6:コメントセクション、お知らせなどに適しています</p>
</div>
4. フロートのクリア
親にoverflow: hiddenまたはoverflow: autoを設定すると、子のフロート効果をクリア:
サンプル
HTML
<style>
.clearfix {
overflow: hidden;
background: #e8eaf6;
padding: 10px;
}
</style>
<div class="clearfix">フロートクリアコンテナ(overflow: hiddenがBFCをトリガー)</div>
object-fit(画像/動画の適応)
object-fitは、<img>や<video>の置換要素がコンテナサイズに適応する方法を制御します:
サンプル
HTML
<style>
.image-container {
width: 300px;
height: 200px;
background: #f5f5f5;
border: 2px dashed #aaa;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10px;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<div class="image-container">画像コンテナ(実際の画像に置き換え)</div>
- cover: 比率を維持し、コンテナを埋め、余分をクロップ(最も一般的)
- contain: 比率を維持し、完全な画像を表示し、余白が残る可能性
- fill: 比率を維持せずにストレッチして埋める(歪む可能性)
- none: 元のサイズを維持
- scale-down: noneとcontainの小さい方を採用
CSSの寸法関数
calc()
calc()は、CSSで動的な寸法計算を可能にし、異なる単位を混在できます:
サンプル
HTML
<style>
.calc-demo {
width: calc(100% - 40px);
height: calc(50vh - 60px);
background: #e3f2fd;
border: 1px solid #90caf9;
display: flex;
align-items: center;
justify-content: center;
}
</style>
<div class="calc-demo">幅は自動的に40pxを引き算、高さはビューポートの半分から60pxを引いた値</div>
注意: 演算子の両側にはスペースが必要です。さもないと認識されません。
❓ よくある質問
Q height: 100%が効かないのはなぜですか?
A パーセントの高さは親の高さに相対的です。親の高さがauto(コンテンツで決定)の場合、子のheight: 100%は計算できません——親がまだ自身の高さを決定していないからです。パーセントの高さを機能させるには、親に明示的な高さの値が必要です。
Q max-width: 100%とwidth: 100%の違いは何ですか?
A width: 100%は要素を強制的に親の幅と等しくします。max-width: 100%は「親の幅を超えない」ことを意味します——要素が自然に小さければ、小さいままです。レスポンシブ画像にmax-width: 100%を使用するのがベストプラクティスです。
Q overflow: hiddenはオーバーフローしたコンテンツをすべて非表示にしますか?
A はい。overflow: hiddenは要素の寸法を超えるすべてのコンテンツをクリップします。オーバーフローしたコンテンツをスクロールする必要がある場合は、overflow: auto(必要時にスクロールバーが表示)またはoverflow: scroll(スクロールバーを常に表示)を使用してください。overflow: hiddenはフロートの問題を解決するためにBFC(ブロック整形コンテキスト)をトリガーするためにもよく使用されます。
📖 まとめ
- 要素の寸法とオーバーフロー動作を制御することは、レイアウトの基本です
width/heightは寸法を設定し、min-width/max-widthは範囲を制約し、overflowはオーバーフローしたコンテンツを処理しますobject-fit: coverは画像処理の強力なツールであり、calc()は柔軟な動的計算を提供します- これらのプロパティをマスターすると、あらゆる状況で要素の動作をより良く制御できます
📝 演習
- 「レスポンシブコンテナ」を作成してください——幅80%、最大幅1200px、最小幅320px、水平方向に中央揃え。
- 固定サイズの画像コンテナ(300×200)を作成し、大きな画像を
object-fit: coverで歪みなく埋めてください。 - 「単一行テキストの省略」と「複数行テキストのオーバーフロー」エフェクトを実装してください(ヒント:複数行は
-webkit-line-clampを使用)。 calc()を使用して「フル画面からナビゲーションバーの高さを引いた」レイアウトを実装してください。



