この記事では、heightについて紹介します。
特にheightを指定しない場合、どうやって要素の高さが決まるのか。
※要素 … <div>や<p>のこと
ここに注目してご覧ください。
height
height
の値には、
- auto(初期値)
- px
- %
- vh
- vw
などがあります。
heightが未指定の場合の要素の高さ
ここが1番たいせつです。
まずheight
を指定しない時の、要素の高さをご覧ください。
<p>に背景色をつけてます。
<p>ホホホホ</p>
p {
background-color: aliceblue; /* うすい青色 */
}
ホホホホ
上記の結果になりました。
<p>は文字ぶんの高さになりましたね。
<p>の高さ = 文字の高さ
これがheight
を指定していない時の高さです。
heightの初期値
「height
を指定してない = 初期値」になります。
※初期値…プロパティが指定されていない時、はじめから与えられている値
height
の初期値はauto
です。
auto
だと、文字の大きさぶんの高さになります。
heightを指定した場合
今度はheigth
をpxで指定します。
<p>ホホホホ</p>
p {
background-color: aliceblue; /* うすい青色 */
height: 100px;
}
ホホホホ
<p>の高さが100pxとなりました。
「ホホホホ」は上にあります。
上から下に文字が置かれるのがポイントです。
「1番下に置くにはどうすればいいんだろう?」
と思った方は、こちらの記事をご覧ください。
「高さのある、要素の中の文字を下に置く」|もしかしたら役立つかもなのcss指定
※クリックすると該当箇所にジャンプします。
親要素に子要素が1つの場合の高さ
今度は親に子要素1つが囲まれている場合を考えてみます。
まずはheight
が未指定の場合。
heightが未指定の場合
先ほどの<p>を<div>で囲いましょう。
- 親:<div>
- 子:<p>
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
}
p {
background-color: aliceblue; /* うすい青色 */
}
<div>には枠線を付けています。
height
を指定しないと、「親要素の高さ=子要素の高さ」です。
heightをpx指定した場合
今度は親と子、それぞれに高さを指定したケースを見てみましょう。
まずは親にheight
を指定した場合。
親にheightを指定
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
height: 100px;
}
p {
background-color: aliceblue; /* うすい青色 */
}
<p>は<div>の最上段にあります。
こうなると、「<div>の高さ ≠ <p>の高さ」になります。
親にheightを指定
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
}
p {
background-color: aliceblue; /* うすい青色 */
height: 100px;
}
子の<p>に高さを指定しました。
「<div>の高さ = <p>の高さ」となりました。
heightを%指定
ここでは、親である<div>にheight: 100px
。
子である<p>にはheight: 50%
と指定します。
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
height: 100px;
}
p {
background-color: aliceblue; /* うすい青色 */
height: 50%;
}
<p>は<div>の半分の高さになっているのが分かりますね。
それでは、<div>にheight: 100px
を指定しないとどうなるでしょう。
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
height: 100px; /* heightの値はautoになる */
}
p {
background-color: aliceblue; /* うすい青色 */
height: 50%;
}
「<div>の高さ = <p>の高さ」となりました。
※height
は未指定のためauto
になる
height
の場合、親にpx値で指定しないと上記のような結果になるんですね。
width
の場合だと、わざわざ親要素にpx値を指定しないのとは対照的です。
以下は、<p>にwidth: 50%
と指定。
親の<div>には幅を指定していません。
<div>
<p>ホホホホ</p>
</div>
div {
border: solid 1px #000000;
}
p {
background-color: aliceblue; /* うすい青色 */
width: 50%;
}
幅と高さでの%の違い
幅と高さで%での結果が異なる理由。
それは、width
とheight
の初期値であるauto
に違いがあるからです。
width: auto
は親要素いっぱいに広がります。
先ほどの<div>と<p>のコード。
その1番外は<body>です。
<body>
<div>
<p>ホホホホ</p>
</div>
</body>
div {
border: solid 1px #000000;
width: auto;
}
p {
background-color: aliceblue; /* うすい青色 */
width: 50%;
}
仮に<div>にwidth: atuo
が指定されていると、<body>いっぱいに広がります。
<body>とは何かというと、画面幅のことです。
とすれば、画面幅は決まってますよね。
スマホなら400pxなら、<body>も<div>も幅は400px。
そして、<div>の子である<p>はwidth: 50%
なら幅200pxになります。
一方、親がheight: auto
だと上で見たとおり、子の中身の高さにしかならないわけですね。
「親要素の高さ = 子要素の高さ」です。
なので、子要素にwidth: 50%
と指定しても、効かないわけです。
すみません、ちょっと分かりにくいですよね…
いずれ、もう少し分かりやすいように書き直します。
親要素の中に子要素を2つの場合の高さ
こういう場合はどうでしょう?
<div>
<h2>ホホホホ</h2>
<p>もうもう</p>
</div>
div {
border: solid 1px #000000;
}
この場合、「<div>の高さ = <h2> + <p>」となります。
<div>の高さを指定していないと、こうなるのが普通なんですね。
子にposition: absoluteを指定すると…
ここで、position: absolute
を<p>に指定します。
親要素<div>にはposition: relative
を。
<div>
<h2>ホホホホ</h2>
<p>もうもう</p>
</div>
div {
border: solid 1px #000000;
position: relative;
}
p {
position: absolute;
}
<p>の「もうもう」が<div>の枠線の外に出されてしまいました。
この時、「<div>の高さ = <h2>」となっています。
つまり<p>にabsolute
と指定すれば、<div>の高さから除外されるんですね。
ちなみに、position: fixed
も同じです。
高さの決まり方が分かれば、このposition
の話も理解しやすくなると思います。
今述べた話はこちらに書いてるので、ご覧ください。
【参考記事】positionの使い方|absoluteなどを紹介
指定した高さを越えるテキスト量がある場合
次の指定をご覧ください。
<p>ホホホホ<br>ホホホホ<br>ホホホホ</p>
p {
background-color: aliceblue; /* うすい青色 */
}
ホホホホ
ホホホホ
ホホホホ
<p>にheight
は指定してません。
「ホホホホ」が3段になってますが、<p>は文字ぶんの高さとなっています。
今度は、<p>にheight: 40px
と指定しました。
<p>ホホホホ<br>ホホホホ<br>ホホホホ</p>
p {
background-color: aliceblue; /* うすい青色 */
height: 40px;
}
ホホホホ
ホホホホ
ホホホホ
文字がはみ出ましたね。
3行ぶんある文字の高さを無視して、<p>は高さを40pxにしています。
そのはみ出た<p>にoverflow: hidden
と指定。
<p>ホホホホ<br>ホホホホ<br>ホホホホ</p>
p {
background-color: aliceblue; /* うすい青色 */
height: 40px;
overflow: hidden;
}
ホホホホ
ホホホホ
ホホホホ
すると、はみ出たぶんの文字が隠れます。
【参考記事】overflowの使い方
参考サイト
この記事は、CSS3をもとに紹介しました。
CSS3とはcssのルールブックみたいなもので、最新バージョンです。
専門家向けに書かれてるので、ややむずかしめです。
お時間ある人は、ご覧ください。
まとめ
heightについて解説しました。
指定方法もそうですが、それよりもどうやって要素の高さが決まるのか。
ここが分かると、理解が深まります。
要素の高さにパディングを含めて計算するかどうかは、box-sizingをご覧ください。
heightとline-heigtの関係は、こちらをどうぞ。