すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

CSSのdisplayの使い方や特徴を理解しよう

この記事で出来るようになること

CSSでは、HTML文書内の全ての要素が生成するボックス(四角形の領域)という概念があり、各ボックスには4つの領域があると「ボックスモデル」で学びました。

その章では、4つの領域の大きさを「width・height・padding・border・margin」といった対応するプロパティで指定できることも学びましたね。

ボックスモデル

次に、4つの領域の表示形式を指定できるdisplayプロパティについて学びます。

displayプロパティとは

displayプロパティとは「content・padding・border・margin」の4つの領域に対して、「どのように表示するか」を決めることができるプロパティです。

表示形式は、指定するプロパティ値によって異なります。例えば、要素のdisplayプロパティの値をnoneにした場合、ボックスが生成されず全ての領域が非表示になります。

要素が非表示になる場合

次の例では、hiddenクラスを持つp要素が非表示になります。

HTML
1
2
<p>この段落は、「表示」にします。</p>
<p class='hidden'>この段落は、「非表示」にします。</p>
CSS
1
2
3
.hidden {
display: none; /* 要素を非表示にする */
}

上記の表示結果は、以下の通りです。

See the Pen display:none by miyajima yuya (@pikawaka) on CodePen.

displayに対する値は色々ありますが、本章では、代表的な「block/inline/inline-block」の値を説明します。

ぴかわかさん
ポイント

displayプロパティとは、各ボックスの4つの領域の表示形式を決めることができるプロパティのこと

代表的なdisplayプロパティの値

代表的なdisplayの値には、blockinlineinline-blockがあります。

各値の大きな特徴として、要素(ボックス)の並びが挙げられます。

代表的なdisplayプロパティの値

displyプロパティは、ボックスモデルの各領域の表示形式も設定します。そのため、「並び」以外にも「余白」や「幅・高さ」などの動作は、各値によって異なります。

プロパティ値 要素の並び 余白 幅・高さ 改行
block 縦に並ぶ ○ 指定できる ○ 指定できる ○ 生成する
inline 横に並ぶ △ 上下のmarginのみ指定できない X 指定できない X 生成しない
inline-block 横に並ぶ ○ 指定できる ○ 指定できる X 生成しない

displayのデフォルト値(何も指定しない場合そのまま使われる値)は、WebブラウザによってHTML要素の種類ごとに決められています。

各要素のデフォルト値は、blockinlineのどちらかの値が設定されます。

それでは、各プロパティ値の特徴を確認してみましょう。

ぴかわかさん

block

要素のdisplayプロパティの値をblockにした場合、次のように動作します。

  • 要素(ボックス)は、上から下へと縦に並ぶ・・・(❶)
  • 要素(ボックス)の前後に改行が生成される・・・(❷)
  • 幅・高さの指定ができる(width・heightプロパティが適用される)・・・(❸)
  • 余白が指定できる(padding・marginプロパティが適用される)・・・(❹)

blockの特徴1

blockの特徴2

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の動作をします。

HTML
1
2
3
<div></div>
<div></div>
<div></div>
CSS | display:blockを指定する必要はない
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;まで広がります。

HTML| どちらの要素もdisplayのデフォルト値はblock
1
2
3
<div class='parent'>
  <p class='child'>sample text</p>
</div>
CSS | 親要素だけ幅を指定する
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の幅まで広がります。

blockのポイント
  1. padding・marginで余白、width・heightで幅と高さを自由に指定できる
  2. デフォルト値がblockの要素には、display: blockを指定するが必要ない
  3. 幅を指定していない場合は、親要素の幅全体に広がる

inline

要素のdisplayプロパティの値をinlineにした場合、次のように動作します。

  • 要素(ボックス)は、横に並ぶ(空間があれば同じ行になる)・・・(❶)
  • 要素(ボックス)の前後に改行が生成されない・・・(❷)
  • 幅・高さの指定ができない(width・heightプロパティが適用されない)・・・(❸)
  • 余白が一部指定できない(上下のmargin領域のサイズ指定ができない)・・・(❹)

inlineの動作1

inlineの動作2

blockの場合は「余白」と「幅・高さ」を指定できましたが、inlineの場合は「margin領域の上下の余白」と「幅・高さ」を指定できないので注意しましょう。

displayのデフォルト値がinlineのHTML要素

デフォルト値がinlineの主な要素は、以下の通りです。
一般に、文中の一部として使われる要素がinlineに設定されています。

  • a要素
  • span要素
  • img要素
  • em要素

上記の要素は、displayプロパティ値に何も指定しない場合「inline」に設定されます。inlineの動作をさせたい場合、デフォルト値がinlineの要素にはdisplay: inlineの指定が要りません。

次のspan要素は、display: inlineを指定しなくてもinlineの動作をします。

HTML
1
2
3
<p>displyプロパティは、<span>「並び」</span>以外にも<span>「余白」</span><span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>

<p>p要素のdisplayデフォルト値はblock、span要素のdisplayデフォルト値はinlineです。</p>
CSS
1
2
3
span {
  background-color: #fff093;
}

上記のコードの表示結果は、以下の通りです。

See the Pen display: inline by miyajima yuya (@pikawaka) on CodePen.

少しわかりづらいので広い画面で確認すると、次のようにデフォルト値がblockの要素とinlineの要素の並びが違うことがわかりますね。

blockとinlineの違い

ぴっかちゃん

他にも「幅」と「高さ」を指定することができないんだよね

そうだね。デフォルト値がinline、もしくはinlineに設定される要素には、width・heightプロパティは適用されないよ

ぴかわかさん

試しにデフォルト値がinlinespan要素に対して、幅・高さをそれぞれ500pxに指定してみます。

CSS | span要素に対して、幅・高さを指定する
1
2
3
4
5
span {
  background-color: #fff093;
height: 500px;
width: 500px;
}

次の表示結果のようにwidthheightプロパティが適用されず、幅・高さに変化はありません。

See the Pen display: inline3 by miyajima yuya (@pikawaka) on CodePen.

幅に関しては、content領域(要素の内容)のサイズになります。上記では、span要素の内容(テキスト)が増えれば、その分幅が広がります。

ぴっかちゃん

inlineでは、他にも余白を指定できない箇所があったような。。。

よく覚えていたね。inlineでは、上下のmarginが適用されないよ。

ぴかわかさん

試しにデフォルト値がinlineの最初のspan要素だけにoutsideクラスをつけて、要素の外側の余白を30pxに指定してみます。

HTML | 最初のspan要素にだけoutsideクラスを付ける
1
<p>displyプロパティは、<span class='outside'>「並び」</span>以外にも<span>「余白」</span><span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
CSS | outsideクラスでmarginを指定する
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に指定してみます。

HTML | 最初のspan要素にだけoutsideクラスを付ける
1
<p>displyプロパティは、<span class='inside'>「並び」</span>以外にも<span>「余白」</span><span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
CSS | outsideクラスでpaddingを指定する
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クラスをつけてみます。

HTML| 最初のspan要素にblockクラスを付ける
1
<p>displyプロパティは、<span class='block'>「並び」</span>以外にも<span>「余白」</span><span>「幅・高さ」</span>の指定がプロパティ値ごとに異なります。</p>
CSS
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のポイント
  1. width・heightで幅と高さを指定することができない
  2. 余白部分は、上下のmarginのみ指定することができない
  3. デフォルト値がinlineの要素には、display: inlineを指定するが必要ない

inline-block

要素のdisplayプロパティの値をinline-blockにした場合、次のように動作します。

  • 要素(ボックス)は、横に並ぶ(空間があれば同じ行になる)・・・(❶)
  • 要素(ボックス)の前後に改行が生成されない・・・(❷)
  • 幅・高さの指定ができる(width・heightプロパティが適用される)・・・(❸)
  • 余白が指定できる(padding・marginプロパティが適用される)・・・(❹)

inline-blockの特性1

inline-blockの特性2

inline-blockは、inlineのように改行を生成することなく横に並び、blockのように余白や幅・高さを自由に指定することができます。

ぴっかちゃん

inlineblockのどちらの特性も併せもつ存在なんだね!

inline-blockの用途

inline-blockは、要素を「横並び」に配置して「幅・高さ」「余白」を自由に指定したいときに使われます。

例えば、Pikawakaサイトのトップページにあるカテゴリのメニューバーが挙げられます。

pikawakaカテゴリメニューバー

簡易的なグローバルナビゲーション作成

簡易的なグローバルナビゲーションを作成して、inline-blockの使い方を確認します。

グローバルナビゲーションとは、全てのページに共通して表示するWebサイト内の案内メニューです。ナビゲーションであることを意味するnav要素で作成します。

HTML | 簡易的なグローバルナビゲーション
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クラスを付けます。

HTML | inline-blockで横並びにしたい要素
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クラスにだけスタイルが適用されます。

CSS | 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なので、幅や余白が指定できます。

CSS | 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.

inline-blockのポイント
  1. 要素の前後に改行を生成することなく、横に並ぶ
  2. padding・marginで余白、width・heightで幅と高さを自由に指定できる
  3. inline-blockは、inlineとblockのどちらの特性も併せもつ存在

この章のまとめ

重要なポイントをおさえよう!

  • displayプロパティとは、各ボックスが持つ4つの領域に対して、「どのように表示するか」を決めることができるプロパティ
  • 代表的なプロパティ値には、「block・inline・inline-block」がある
  • 各要素でdisplayのデフォルト値が「block」か「inline」に設定される