この記事はCSS入門の続きです。今回はCSSの width(幅) と height(高さ) のさまざまな指定方法を、初心者でもわかるようにイチから解説します。
1. 前提知識
widthとheightを学ぶ前に、以下の2つの用語を押さえておきましょう。解説中に何度も出てきます。
1-1. 要素とは?
要素とは、<タグ>〜</タグ> のかたまり全体のことです。
<p>これは例文です</p> ← これが1つの「要素」
1-2. 親要素と子要素
要素Aの中に要素Bが入っているとき、「Bの親要素=A」「Aの子要素=B」 と呼びます。
<div> <!-- 親要素 -->
<p>テキスト</p> <!-- 子要素 -->
</div>
2. widthとheightとは?
| プロパティ | 意味 | 初期値 |
|---|---|---|
width |
要素の横幅を決める | auto |
height |
要素の高さを決める | auto |
2-1. 基本的な書き方
<p>これは例文です</p>
p {
width: 100px;
height: 100px;
background: orange;
}
これは例文です
widthとheightをそれぞれ100pxに指定すると、要素の幅・高さがぴったり100pxになります。
2-2. display:inline の要素では幅・高さの指定ができない
初心者がつまずきやすいポイントです。display: inline の要素には width / height を指定しても効きません。
| displayの値 | 幅・高さの指定 | 代表的なタグ |
|---|---|---|
block |
✅ できる | div / p / h1〜h6 |
inline-block |
✅ できる | (CSSで指定した要素) |
inline |
❌ できない | a / span |
⚠️ a タグや span タグの幅・高さを指定したい場合は、先に display: inline-block; または display: block; を指定しましょう。
3. widthの指定方法まとめ
まずはよく使う width から見ていきましょう。覚えるべき値は3つです。
| # | 値 | 意味 |
|---|---|---|
| ① | auto |
自動(初期値) |
| ② | ◯◯px |
ピクセル数で固定 |
| ③ | ◯◯% |
親要素に対する比率 |
3-1. width: auto(初期値)
CSSで何も指定しない限り width: auto が適用されます。表示の仕方は要素の種類によって異なります。
| displayの値 | auto のときの幅 |
|---|---|
block(div・p など) |
基本的に横いっぱい(親要素の幅)に広がる |
inline / inline-block |
中身(テキスト)の長さ分だけの幅になる |
💡 ただし、親要素の幅以上には広がりません。親要素が 600px なら、子要素も最大 600px になります。
<div class="parent">
<p>これは要素です。</p>
</div>
.parent {
/* 親要素の幅を150pxに */
width: 150px;
}
p {
/* width: auto(初期値)*/
background: orange;
}
これは要素です。
pにwidthは指定していないが、
親要素(div)と同じ幅150pxになる
3-2. width: ◯◯px(固定幅)
px(ピクセル)で指定すると、親要素に関わらず常にその幅になります。
/* 画像の幅を80pxに固定 */
.example img {
width: 80px;
}
(画像)
width: 80px を指定すると、この大きさで固定される。高さは縦横比を保って自動調整(height: auto)。
⚠️ 子要素の幅を親要素より大きくしてはいけません。端末によってはレイアウトが崩れる原因になります。常に「親要素の幅 ≥ 子要素の幅」を守りましょう。
3-3. width: ◯◯%(相対幅)
%で指定すると、親要素の幅に対する比率で幅が決まります。親要素の幅が変わると、子要素の幅も連動して変わります。
<div class="grandpa">
<div class="parent">
<p>これは要素です</p>
</div>
</div>
.grandpa {
width: 200px;
background: silver;
}
.parent {
/* 200pxの50% → 100px */
width: 50%;
background: yellow;
}
.parent p {
/* 100pxの50% → 50px */
width: 50%;
background: orange;
}
これは要素です
silver=200px / yellow=100px / orange=50px
💡 width: 100% にすると、親要素と同じ幅になります。
【補足】width: 100% と auto の違い
| width: auto | width: 100% | |
|---|---|---|
| paddingやborderの扱い | 幅の内側に含まれる | 幅の外側に加算される |
| paddingやborderがあると… | 親要素からはみ出ない | その分だけ親要素からはみ出る |
⚠️ width: 100% の要素に padding や border を指定すると、親要素からはみ出てしまうことがあります。これを防ぐには box-sizing: border-box; を指定します。
3-4. widthを指定しないとブラウザの幅になる
親要素のすべてにpxでの幅が指定されていない場合、最終的に body の幅はブラウザの幅と一致します。つまり、見る端末やウィンドウサイズによって幅が変わります。
💡 レスポンシブデザイン(PC・スマホ両対応)を作るときは、この性質を活かして %指定 を活用します。
3-5. %指定で要素を均等に横並びにする
横に並ぶ要素を均等に分けたいとき、%指定が便利です。
| 分割数 | widthの値 |
|---|---|
| 2等分 | width: 50% |
| 3等分 | width: 33.333% |
| 4等分 | width: 25% |
3-6. min-width と max-width
widthに「最小幅」「最大幅」の制限をかけることもできます。
| プロパティ | 意味 | 使いどころ |
|---|---|---|
min-width |
◯◯px より小さくしない | スマホで潰れすぎるのを防ぐ |
max-width |
◯◯px より大きくしない | 大画面で広がりすぎるのを防ぐ |
.container {
width: 90%; /* 基本は画面の90% */
max-width: 960px; /* ただし960px以上には広がらない */
}
4. heightの指定方法まとめ
次は height(高さ)の解説です。値の種類は width と同じ3つですが、それぞれの動作が少し異なります。
| # | 値 | 意味 |
|---|---|---|
| ① | auto |
自動(初期値) |
| ② | ◯◯px |
ピクセル数で固定 |
| ③ | ◯◯% |
親要素の高さに対する比率 |
4-1. height: auto(初期値)
height: auto では、高さは中身(テキスト・画像・子要素)の分だけになります。width: auto のように横いっぱいには広がりません。
<div id="test">
<p>子要素です。</p>
<p>子要素2です。</p>
</div>
#test {
background: orange;
/* height: auto が初期値 */
}
子要素です。
子要素2です。
中身の分だけの高さになる(横いっぱいには広がらない)
| width: auto | height: auto | |
|---|---|---|
| 広がり方 | 横いっぱいに広がる(blockの場合) | 中身の分だけの高さになる |
4-2. height: ◯◯px(固定の高さ)
高さをpxで固定指定した例を2つ見てみましょう。
#test {
background: orange;
height: 120px;
}
子要素です。
#test {
background: orange;
height: 30px;
}
子要素です。
子要素2です。(はみ出る)
⚠️ heightをpxで指定するときは、中身がはみ出ないように値を慎重に決めましょう。テキストが増えた場合などにはみ出す可能性があります。
4-3. height: ◯◯%(親要素の高さに対する比率)
widthの%とは違い、heightの%指定は少し扱いが難しいです。
📌 heightを%で指定するには、親要素のheightが数値(pxなど)で指定されている必要があります。
なぜかというと、親要素のheightが auto(未指定)の場合、「何に対しての50%なのか」が決まらないからです。
<p>↓ 親のheightが未指定</p>
<div id="test1">
<p>要素</p>
</div>
<p>↓ 親のheightが指定あり</p>
<div id="test2">
<p>要素</p>
</div>
#test1 {
background: #e2e8f0;
/* heightは未指定(auto)*/
}
#test2 {
background: #e2e8f0;
height: 100px; /* 高さを指定 */
}
p {
height: 50%;
background: orange;
}
↓ 親のheightが未指定
要素(50%が効かない)
↓ 親のheightが100pxで指定
要素(50% = 50px になる)
4-4. 画面の半分の高さにしたいときは?
ブラウザの画面の半分の高さにしたい場合は、html と body にも height: 100% を指定してから、目的の要素に height: 50% を指定します。
html, body {
height: 100%; /* ブラウザの高さをベースに */
}
#headline {
height: 50%; /* 画面の半分の高さ */
background: orange;
}
💡 これで、ブラウザのウィンドウサイズを変えても、常に画面の半分の高さに自動調整されます。
📝 まとめ
display: inlineの要素では幅・高さの指定ができない(inline-blockかblockに変える)- まず覚えるべき値は ① auto ② ◯◯px ③ ◯◯% の3つ
- width: auto → blockなら横いっぱい、inline / inline-blockなら中身の幅
- height: auto → 中身(テキスト・画像・子要素)の分だけの高さ
- px指定 → 親要素に関係なく固定の幅・高さ
- %指定 → 親要素に対する相対的な幅・高さ
- heightを%で指定するには親要素のheightが数値で指定されている必要がある
- bodyのwidthが未指定の場合、width = ブラウザの幅 になる
- 子要素の幅が親要素を超えないように注意する
min-width/max-widthで最小・最大幅の制限ができる
次のステップ
width / height をマスターしたら、次は min-width・max-width でレスポンシブ対応 する方法を学びましょう。

