【HTML+CSS初心者講座03】widthとheightで幅・高さを指定

この記事は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>
「pの親要素=div」「divの子要素=p」

コードで見ると
<div>           <!-- 親要素 -->
  <p>テキスト</p>  <!-- 子要素 -->
</div>

2. widthとheightとは?

プロパティ 意味 初期値
width 要素の横幅を決める auto
height 要素の高さを決める auto

2-1. 基本的な書き方

HTMLコード
<p>これは例文です</p>

CSSコード
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 になります。

HTMLコード
<div class="parent">
  <p>これは要素です。</p>
</div>

CSSコード
.parent {
  /* 親要素の幅を150pxに */
  width: 150px;
}
p {
  /* width: auto(初期値)*/
  background: orange;
}

表示結果

これは要素です。

pにwidthは指定していないが、
親要素(div)と同じ幅150pxになる

3-2. width: ◯◯px(固定幅)

px(ピクセル)で指定すると、親要素に関わらず常にその幅になります。

画像の幅をpxで指定する例
/* 画像の幅を80pxに固定 */
.example img {
  width: 80px;
}

表示結果
80px × 80px
(画像)

width: 80px を指定すると、この大きさで固定される。高さは縦横比を保って自動調整(height: auto)。

⚠️ 子要素の幅を親要素より大きくしてはいけません。端末によってはレイアウトが崩れる原因になります。常に「親要素の幅 ≥ 子要素の幅」を守りましょう。

3-3. width: ◯◯%(相対幅)

%で指定すると、親要素の幅に対する比率で幅が決まります。親要素の幅が変わると、子要素の幅も連動して変わります。

HTMLコード
<div class="grandpa">
  <div class="parent">
    <p>これは要素です</p>
  </div>
</div>

CSSコード
.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% の要素に paddingborder を指定すると、親要素からはみ出てしまうことがあります。これを防ぐには box-sizing: border-box; を指定します。

3-4. widthを指定しないとブラウザの幅になる

親要素のすべてにpxでの幅が指定されていない場合、最終的に body の幅はブラウザの幅と一致します。つまり、見る端末やウィンドウサイズによって幅が変わります。

💡 レスポンシブデザイン(PC・スマホ両対応)を作るときは、この性質を活かして %指定 を活用します。

3-5. %指定で要素を均等に横並びにする

横に並ぶ要素を均等に分けたいとき、%指定が便利です。

分割数 widthの値
2等分 width: 50%
3等分 width: 33.333%
4等分 width: 25%
2等分の表示イメージ
width: 50%
width: 50%

33%
33%
33%

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 のように横いっぱいには広がりません。

HTMLコード
<div id="test">
  <p>子要素です。</p>
  <p>子要素2です。</p>
</div>

CSSコード
#test {
  background: orange;
  /* height: auto が初期値 */
}

表示結果

子要素です。

子要素2です。

中身の分だけの高さになる(横いっぱいには広がらない)

width: auto height: auto
広がり方 横いっぱいに広がる(blockの場合) 中身の分だけの高さになる

4-2. height: ◯◯px(固定の高さ)

高さをpxで固定指定した例を2つ見てみましょう。

height: 120px の場合
#test {
  background: orange;
  height: 120px;
}

表示結果(余裕あり)

子要素です。

height: 30px の場合(小さすぎる)
#test {
  background: orange;
  height: 30px;
}

表示結果(中身がはみ出る)

子要素です。

子要素2です。(はみ出る)

⚠️ heightをpxで指定するときは、中身がはみ出ないように値を慎重に決めましょう。テキストが増えた場合などにはみ出す可能性があります。

4-3. height: ◯◯%(親要素の高さに対する比率)

widthの%とは違い、heightの%指定は少し扱いが難しいです。

📌 heightを%で指定するには、親要素のheightが数値(pxなど)で指定されている必要があります。

なぜかというと、親要素のheightが auto(未指定)の場合、「何に対しての50%なのか」が決まらないからです。

HTMLコード
<p>↓ 親のheightが未指定</p>
<div id="test1">
  <p>要素</p>
</div>

<p>↓ 親のheightが指定あり</p>
<div id="test2">
  <p>要素</p>
</div>

CSSコード
#test1 {
  background: #e2e8f0;
  /* heightは未指定(auto)*/
}
#test2 {
  background: #e2e8f0;
  height: 100px; /* 高さを指定 */
}
p {
  height: 50%;
  background: orange;
}

表示結果

↓ 親のheightが未指定

要素(50%が効かない)

↓ 親のheightが100pxで指定

要素(50% = 50px になる)

4-4. 画面の半分の高さにしたいときは?

ブラウザの画面の半分の高さにしたい場合は、htmlbody にも height: 100% を指定してから、目的の要素に height: 50% を指定します。

CSSコード
html, body {
  height: 100%; /* ブラウザの高さをベースに */
}
#headline {
  height: 50%;  /* 画面の半分の高さ */
  background: orange;
}

💡 これで、ブラウザのウィンドウサイズを変えても、常に画面の半分の高さに自動調整されます。

📝 まとめ

  • display: inline の要素では幅・高さの指定ができない(inline-blockblock に変える)
  • まず覚えるべき値は ① 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 でレスポンシブ対応 する方法を学びましょう。