CSSでは、HTML文書内の全ての要素が生成するボックス(四角形の領域)という概念があり、各ボックスには4つの領域があると「ボックスモデル」で学びました。
その章では、4つの領域の大きさを「width・height・padding・border・margin」といった対応するプロパティで指定できることも学びましたね。
次に、4つの領域の表示形式を指定できるdisplay
プロパティについて学びます。
displayプロパティとは
display
プロパティとは「content・padding・border・margin」の4つの領域に対して、「どのように表示するか」を決めることができるプロパティです。
表示形式は、指定するプロパティ値によって異なります。例えば、要素のdisplay
プロパティの値をnone
にした場合、ボックスが生成されず全ての領域が非表示になります。
次の例では、hidden
クラスを持つp
要素が非表示になります。
1
2
<p>この段落は、「表示」にします。</p>
<p class='hidden'>この段落は、「非表示」にします。</p>
1
2
3
.hidden {
display: none; /* 要素を非表示にする */
}
上記の表示結果は、以下の通りです。
See the Pen display:none by miyajima yuya (@pikawaka) on CodePen.
displayに対する値は色々ありますが、本章では、代表的な「block/inline/inline-block」の値を説明します。
代表的なdisplayプロパティの値
代表的なdisplayの値には、block
・inline
・inline-block
があります。
各値の大きな特徴として、要素(ボックス)の並びが挙げられます。
displyプロパティは、ボックスモデルの各領域の表示形式も設定します。そのため、「並び」以外にも「余白」や「幅・高さ」などの動作は、各値によって異なります。
プロパティ値 | 要素の並び | 余白 | 幅・高さ | 改行 |
---|---|---|---|---|
block | 縦に並ぶ | ○ 指定できる | ○ 指定できる | ○ 生成する |
inline | 横に並ぶ | △ 上下のmarginのみ指定できない | X 指定できない | X 生成しない |
inline-block | 横に並ぶ | ○ 指定できる | ○ 指定できる | X 生成しない |
displayのデフォルト値(何も指定しない場合そのまま使われる値)は、WebブラウザによってHTML要素の種類ごとに決められています。
各要素のデフォルト値は、block
かinline
のどちらかの値が設定されます。
それでは、各プロパティ値の特徴を確認してみましょう。
block
要素のdisplayプロパティの値をblock
にした場合、次のように動作します。
- 要素(ボックス)は、上から下へと縦に並ぶ・・・(❶)
- 要素(ボックス)の前後に改行が生成される・・・(❷)
- 幅・高さの指定ができる(width・heightプロパティが適用される)・・・(❸)
- 余白が指定できる(padding・marginプロパティが適用される)・・・(❹)
displayのデフォルト値がblockのHTML要素
displayのデフォルト値は、WebブラウザによってHTML要素の種類ごとに決められていると説明しましたね。
デフォルト値がblock
である主な要素は、以下の通りです。
- div要素
- p要素
- h1〜h6要素
- ul要素
- ol要素
- li要素
- form要素
上記の要素は、displayプロパティ値に何も指定しない場合に「block」が設定されます。block
の動作をさせたい場合、デフォルト値がblockの要素にはdisplay: block
の指定が要りません。
次のdiv要素は、CSSでdisplay: block
を指定しなくてもblock
の動作をします。
1
2
3
<div></div>
<div></div>
<div></div>
1
2
3
4
5
6
7
8
div {
background: palegreen;
border: 3px solid;
height: 20px; /*高さを指定できる(❸) */
margin: 20px; /* 要素の外側の余白が指定できる(❹) */
padding: 10px; /* 要素の外側の内側の余白が指定できる(❹) */
width: 200px; /* 幅を指定できる(❸) */
}
上記のコードの表示結果は、以下の通りです。
See the Pen display: block by miyajima yuya (@pikawaka) on CodePen.
div要素のように、displayのデフォルト値がblockの要素は❶~❹の動作をします。
- 要素(ボックス)は、上から下へと縦に並ぶ・・・(❶)
- 要素(ボックス)の前後に改行が生成される・・・(❷)
- 幅・高さの指定ができる(width・heightプロパティが適用される)・・・(❸)
- 余白が指定できる(padding・marginプロパティが適用される)・・・(❹)
少しわかりづらいので、ディベロッパーツールで調査すると、次のように幅や高さ、余白も指定したサイズで表示されていますね。
親要素の幅全体に広がる
要素のdisplayプロパティの値がblock
で幅を指定していない場合は、親要素の幅全体に広がります。
次の例では、子要素であるp要素は親要素で指定するwidth: 800px;
まで広がります。
1
2
3
<div class='parent'>
<p class='child'>sample text</p>
</div>
1
2
3
4
5
6
7
8
9
.parent {
background-color: yellow;
height: 500px;
width: 800px;
}
.child {
background-color: green;
}
上記のコードの表示結果は、以下の通りです。
See the Pen display: block2 by miyajima yuya (@pikawaka) on CodePen.
div
要素とp
要素のdisplayのデフォルト値がblock
です。
p要素の方には幅が指定されていないので、親要素であるdiv
の幅まで広がります。
inline
要素のdisplayプロパティの値をinline
にした場合、次のように動作します。
- 要素(ボックス)は、横に並ぶ(空間があれば同じ行になる)・・・(❶)
- 要素(ボックス)の前後に改行が生成されない・・・(❷)
- 幅・高さの指定ができない(width・heightプロパティが適用されない)・・・(❸)
- 余白が一部指定できない(上下のmargin領域のサイズ指定ができない)・・・(❹)
block
の場合は「余白」と「幅・高さ」を指定できましたが、inline
の場合は「margin領域の上下の余白」と「幅・高さ」を指定できないので注意しましょう。
displayのデフォルト値がinlineのHTML要素
デフォルト値がinline
の主な要素は、以下の通りです。
一般に、文中の一部として使われる要素がinline
に設定されています。
- a要素
- span要素
- img要素
- em要素
上記の要素は、displayプロパティ値に何も指定しない場合「inline」に設定されます。inline
の動作をさせたい場合、デフォルト値がinlineの要素にはdisplay: inline
の指定が要りません。
次のspan要素は、display: inline
を指定しなくてもinline
の動作をします。
1
2
3
<p>displyプロパティは、<span>「並び」</span>以外にも<span>「余白」</span>や<span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
<p>p要素のdisplayデフォルト値はblock、span要素のdisplayデフォルト値はinlineです。</p>
1
2
3
span {
background-color: #fff093;
}
上記のコードの表示結果は、以下の通りです。
See the Pen display: inline by miyajima yuya (@pikawaka) on CodePen.
少しわかりづらいので広い画面で確認すると、次のようにデフォルト値がblock
の要素とinline
の要素の並びが違うことがわかりますね。
他にも「幅」と「高さ」を指定することができないんだよね
そうだね。デフォルト値がinline、もしくはinlineに設定される要素には、width・heightプロパティは適用されないよ
試しにデフォルト値がinline
のspan
要素に対して、幅・高さをそれぞれ500px
に指定してみます。
1
2
3
4
5
span {
background-color: #fff093;
height: 500px;
width: 500px;
}
次の表示結果のようにwidth
・height
プロパティが適用されず、幅・高さに変化はありません。
See the Pen display: inline3 by miyajima yuya (@pikawaka) on CodePen.
幅に関しては、content領域(要素の内容)のサイズになります。上記では、span
要素の内容(テキスト)が増えれば、その分幅が広がります。
inlineでは、他にも余白を指定できない箇所があったような。。。
よく覚えていたね。inlineでは、上下のmarginが適用されないよ。
試しにデフォルト値がinline
の最初のspan
要素だけにoutsideクラスをつけて、要素の外側の余白を30px
に指定してみます。
1
<p>displyプロパティは、<span class='outside'>「並び」</span>以外にも<span>「余白」</span>や<span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
1
2
3
4
5
6
7
span {
background-color: #fff093;
}
.outside {
margin: 30px; /* 要素の外側の余白を30pxにする */
}
次の表示結果のように「左右のmargin」は適用されますが、「上下のmargin」は適用されません。
See the Pen display: inline4 by miyajima yuya (@pikawaka) on CodePen.
paddingで要素の内側の余白は指定できるんだっけ
marginは、「左右のmargin」だけ適用されるけど、paddingは4辺全て適用されるよ
試しにデフォルト値がinline
の最初のspan
要素だけにinsideクラスをつけて、要素の内側の余白を30px
に指定してみます。
1
<p>displyプロパティは、<span class='inside'>「並び」</span>以外にも<span>「余白」</span>や<span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
1
2
3
4
5
6
7
span {
background-color: #fff093;
}
.inside {
padding: 30px; /* 要素の内側の余白を30pxにする */
}
次の表示結果のようにデザインは崩れますが、4辺全てにpaddingが適用されます。
See the Pen display: inline5 by miyajima yuya (@pikawaka) on CodePen.
デフォルト値がinlineの要素にblockを指定する
デフォルト値がinlineの要素にdisplay: block;
を指定することで、その要素はblockの動作をします。
試しにデフォルト値がinline
の最初のspan
要素だけにblockクラスをつけてみます。
1
<p>displyプロパティは、<span class='block'>「並び」</span>以外にも<span>「余白」</span>や<span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
1
2
3
4
5
6
7
span {
background-color: #fff093
}
.block {
display: block;
}
次の表示結果のようにblockクラスを指定した最初のspan要素は、要素の前後に改行が生成されて縦に並ぶというblock
の動作をします。
See the Pen display: inline2 by miyajima yuya (@pikawaka) on CodePen.
inline-block
要素のdisplayプロパティの値をinline-block
にした場合、次のように動作します。
- 要素(ボックス)は、横に並ぶ(空間があれば同じ行になる)・・・(❶)
- 要素(ボックス)の前後に改行が生成されない・・・(❷)
- 幅・高さの指定ができる(width・heightプロパティが適用される)・・・(❸)
- 余白が指定できる(padding・marginプロパティが適用される)・・・(❹)
inline-block
は、inline
のように改行を生成することなく横に並び、block
のように余白や幅・高さを自由に指定することができます。
inline
とblock
のどちらの特性も併せもつ存在なんだね!
inline-blockの用途
inline-block
は、要素を「横並び」に配置して「幅・高さ」「余白」を自由に指定したいときに使われます。
例えば、Pikawakaサイトのトップページにあるカテゴリのメニューバーが挙げられます。
簡易的なグローバルナビゲーション作成
簡易的なグローバルナビゲーションを作成して、inline-block
の使い方を確認します。
グローバルナビゲーションとは、全てのページに共通して表示するWebサイト内の案内メニューです。ナビゲーションであることを意味するnav
要素で作成します。
1
2
3
4
5
6
7
<nav class='global-nav'>
<ul>
<li class='item'>HOME</li>
<li class='item'>NEWS</li>
<li class='item'>TOPICS</li>
</ul>
</nav>
グローバルナビゲーションの中身は「リンクのリスト」になるので、nav
要素内には順序なしリストを意味するul要素を配置します。今回は、シンプルな構造になるようにあえてリストを意味するa
要素を外します。
横並びにするli
要素には、item
クラスを付けます。
1
2
3
4
5
6
7
<nav class='global-nav'>
<ul>
<li class='item'>HOME</li>
<li class='item'>NEWS</li>
<li class='item'>TOPICS</li>
</ul>
</nav>
CSSでは.global-nav .item
のように、子孫セレクタで絞り込み指定されているので、global-navクラス内のitemクラスにだけスタイルが適用されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
.global-nav {
text-align: center; /* 子のul要素に引き継がれて、中の.itemを中央寄せにする */
}
/* global-navクラス内のitemクラスにだけスタイルを適用 */
.global-nav .item {
display: inline-block;
width: 80px; /* 幅 */
padding: 10px; /* 要素の内側の余白 */
margin: 10px 0; /* 要素の外側の余白 */
background: #C7C0F4;
color: white;
}
displayプロパティ値はinline-block
なので、幅や余白が指定できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
.global-nav {
text-align: center; /* 子のul要素に引き継がれて、中の.itemを中央寄せにする */
}
/* global-navクラス内のitemクラスにだけスタイルを適用 */
.global-nav .item {
display: inline-block;
width: 80px; /* 幅 */
padding: 10px; /* 要素の内側の余白 */
margin: 10px 0; /* 要素の外側の余白 */
background: #C7C0F4;
color: white;
}
表示結果は、以下の通りです。
inline-block
は簡単に要素を横に並べて、幅や余白も適用することができますね。
See the Pen inline-blockの用途 by miyajima yuya (@pikawaka) on CodePen.
この章のまとめ
重要なポイントをおさえよう!
- displayプロパティとは、各ボックスが持つ4つの領域に対して、「どのように表示するか」を決めることができるプロパティ
- 代表的なプロパティ値には、「block・inline・inline-block」がある
- 各要素でdisplayのデフォルト値が「block」か「inline」に設定される
この記事で学んだことをTwitterに投稿して、アウトプットしよう!
Twitterの投稿画面に遷移します