Home

display: flex | フレックス・ボックス


フレックス・ボックス(display: flex)を使うと、詳細な配置を設定をできます。

display: flexは、下表のCSSプロパティと共に使います。

display: flexと共に使うCSSプロパティ一覧
CSSプロパティ設定内容デフォルト値よく使う設定値設定する対象
flex-wrap改行を指定するnowrapwrap親要素
flex-direction向きを指定するrow親要素
flex-flow改行向き
を一括で指定する
nowrap rowwrap親要素
justify-content左右整列flex-start親要素
align-items上下整列(親要素)stretch親要素
align-content改行時の上下整列stretch親要素
align-self上下整列(子要素)stretch子要素
flex-grow幅の広がりを指定する01子要素
flex-shrink幅の縮みを指定する1子要素
flex-basis幅の大きさを指定するauto子要素
flexflex-growflex-shrink
flex-basis の一括指定
0 1 auto子要素
order順番を指定する0子要素

これらのCSSプロパティは親要素に対して設定するプロパティと、子要素に対して設定するプロパティがあるので注意しましょう。

display: flex

親子関係のある要素を準備します。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
実行結果初期状態
parent
子1
子2
子3
子4

display: flex親要素(.parent)に対して設定します。 子要素は横並びになります。 (理由: 後述するflex-directionのデフォルト値がrowだからです)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果display: flex
parent
子1
子2
子3
子4

デフォルト値

display: flexは他のCSSプロパティと共に設定します。 以下にそれらのデフォルト値が設定してみました。 全てがデフォルト値なので表示結果は無指定の場合と同じになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-wrap: nowrap; /* 改行 */
flex-direction: row; /* 向き */
justify-content: flex-start; /* 左右整列 */
align-items: stretch; /* 上下整列(親要素) */
align-content: stretch; /* 改行時の上下整列 */
}
.children {
align-self: stretch; /* 上下整列(子要素) */
flex-grow: 0; /* 幅の広がり */
flex-shrink: 1; /* 幅の縮み */
flex-basis: auto; /* 幅の大きさ */
order: 0; /* 順番 */
}
実行結果デフォルト値(1)
parent
子1
子2
子3
子4

いくつかのCSSプロパティは まとめることができます。 まとめた例を以下に示します。align-items

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-flow: nowrap row; /* 改行 + 向き */
justify-content: flex-start; /* 左右整列 */
align-items: stretch; /* 上下整列(親要素) */
align-content: stretch; /* 改行時の上下整列*/
}
.children {
align-self: stretch; /* 上下整列(子要素) */
flex: 0 1 auto; /* 幅の広がり+縮み+大きさ */
order: 0; /* 順番 */
}
実行結果デフォルト値(2)
parent
子1
子2
子3
子4

flex-wrap | 改行

flex-wrap改行を指定します。

flex-wrapの設定値
設定値機能デフォルトメモ
wrapに改行する。よく使う
wrap-reverseに改行する。
nowrap改行しない。
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の幅(width)を狭く(10rem)します。デフォルトでは子要素親要素はみ出します

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
}
実行結果はみ出す
parent
子1
子2
子3
子4

親要素flex-wrapwrapに設定すると子要素下に改行します

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
}
実行結果wrap
parent
子1
子2
子3
子4

wrap-reverseにするとに改行します。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap-reverse;
}
実行結果wrap-reverse
parent
子1
子2
子3
子4

nowrapにすると改行しません。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: nowrap;
}
実行結果nowrap
parent
子1
子2
子3
子4

改行しない場合は はみ出すことがあります。 はみ出した部分の表示についてはoverflowプロパティを使います。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
overflow: auto;
}
実行結果overflow: auto
parent
子1
子2
子3
子4

flex-direction | 向き

flex-direction並びの向きを指定します。

flex-directionの設定値
設定値並びデフォルトメモ
row左→右
row-reverse右→左
column上→下
column-reverse下→上
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素flex-directionrow-reverseに設定すると右→左になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-direction: row-reverse;
}
実行結果row-reverse
parent
子1
子2
子3
子4

columnに変更すると上→下になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-direction: column;
}
実行結果column
parent
子1
子2
子3
子4

column-reverseに変更すると下→上になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-direction: column-reverse;
}
実行結果column-reverse
parent
子1
子2
子3
子4

rowに変更すると左→右になります。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
flex-direction: row;
}
実行結果row
parent
子1
子2
子3
子4

個々の子要素の並び順を細かく指定するにはorderプロパティを使います。

flex-flow | 改行+向き

flex-flowflex-wrap(改行)とflex-direction(向き)をまとめて指定するプロパティです。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
}
実行結果初期状態
parent
子1
子2
子3
子4

flex-wrapflex-directionを個別に指定した場合と、flex-flowまとめて指定した場合の結果を示します。 表示結果は同じです。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
flex-direction: row-reverse;
}
実行結果個別
parent
子1
子2
子3
子4
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-flow: wrap row-reverse;
}
実行結果まとめて
parent
子1
子2
子3
子4

flex-flowの設定値を一つだけにすることもできます。 flex-wrap: wrapflex-flow: wrapは同じ結果になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
}
実行結果flex-wrap
parent
子1
子2
子3
子4
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-flow: wrap;
}
実行結果flex-flow
parent
子1
子2
子3
子4

justify-content | 左右整列

justify-content左右をそろえる設定です。

justify-contentの設定値
設定値機能デフォルトメモ
flex-start左に整列
center中央に整列
flex-end右に整列
space-between均等配置(端は詰める)
space-around均等配置(端は開ける)
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の幅(width)を広げます。左に整列されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
実行結果広げる
parent
子1
子2
子3
子4

親要素justify-contentcenterを指定します。中央に整列されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
justify-content: center;
}
実行結果center
parent
子1
子2
子3
子4

flex-endを指定します。右に整列されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
justify-content: flex-end;
}
実行結果flex-end
parent
子1
子2
子3
子4

space-betweenを指定します。均等に配置されます。 (はし)()めて表示されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
justify-content: space-between;
}
実行結果space-between
parent
子1
子2
子3
子4

space-aroundを指定します。均等に配置されます。(space-betweenとは異なり)端を空けて表示されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
justify-content: space-around;
}
実行結果space-around
parent
子1
子2
子3
子4

flex-startを指定します。左に整列されます。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
justify-content: flex-start;
}
実行結果flex-start
parent
子1
子2
子3
子4

align-items | 上下整列(親要素)

align-items上下をそろえる設定です。

align-itemsの設定値
設定値機能デフォルト
stretch上下に延ばす
flex-start上そろえ
center中央そろえ
flex-end下そろえ
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の高さ(height)を広げます。上下に延ばされます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
実行結果広げる
parent
子1
子2
子3
子4

align-itemsflex-startを指定すると上そろえになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
align-items: flex-start;
}
実行結果flex-start
parent
子1
子2
子3
子4

align-itemscenterを指定すると中央そろえになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
align-items: center;
}
実行結果center
parent
子1
子2
子3
子4

align-itemsflex-endを指定すると下そろえになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
align-items: flex-end;
}
実行結果flex-end
parent
子1
子2
子3
子4

align-itemsstretchを指定すると上下に延ばします。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
align-items: stretch;
}
実行結果stretch
parent
子1
子2
子3
子4

align-content | 改行時の上下整列

align-content改行時上下をそろえる設定です。 改行時に対する設定なのでflex-wrap(改行)がnowrap(改行しない)の場合は無効です。

align-contentの設定値
設定値機能デフォルト
stretch上下に引き延ばす
flex-start上に整列
center中央に整列
flex-end下に整列
space-between均等配置(上下の端は詰める)
space-around均等配置(上下の端は開ける)
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の高さ(height)を高くします。子要素上下に引き伸ばされます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
}
実行結果高く
parent
子1
子2
子3
子4

align-contentflex-startを指定すると上に整列になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: flex-start;
}
実行結果flex-start
parent
子1
子2
子3
子4

centerを指定すると中央に整列になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: center;
}
実行結果center
parent
子1
子2
子3
子4

flex-endを指定すると下に整列になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: flex-end;
}
実行結果flex-end
parent
子1
子2
子3
子4

space-betweenを指定すると均等配置(上下の端は詰める)になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: space-between;
}
実行結果space-between
parent
子1
子2
子3
子4

space-aroundを指定すると均等配置(上下の端は開ける)になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: space-around;
}
実行結果space-around
parent
子1
子2
子3
子4

stretchを指定すると上下に引き延ばします。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 10rem;
flex-wrap: wrap;
height: 18rem;
align-content: stretch;
}
実行結果stretch
parent
子1
子2
子3
子4

align-self | 上下整列(子要素)

align-itemsプロパティは親要素に対して設定し、全ての子要素に同じ設定が適用されます。しかし、個々の子要素で別の設定をしたい場合もあります。 その場合、対象の子要素align-selfプロパティを設定します。

align-selfが設定可能な値はalign-itemsと同じです。

align-selfの設定値
設定値機能デフォルト
stretch上下に延ばす
flex-start上そろえ
center中央そろえ
flex-end下そろえ
HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の高さ(height)を広げます。上下に延ばされます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
実行結果広げる
parent
子1
子2
子3
子4

.child-2だけは上そろえにしたい場合、.child-2クラスのalign-selfflex-startに設定します。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
.child-2 { align-self: flex-start; }
実行結果flex-start
parent
子1
子2
子3
子4

.child-3クラスのalign-selfcenterに設定すると、中央そろえになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
.child-2 { align-self: flex-start; }
.child-3 { align-self: center; }
実行結果center
parent
子1
子2
子3
子4

.child-4クラスのalign-selfflex-endに設定すると、下そろえになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
.child-2 { align-self: flex-start; }
.child-3 { align-self: center; }
.child-4 { align-self: flex-end; }
実行結果flex-end
parent
子1
子2
子3
子4

.child-4クラスのalign-selfstretchに変更すると、上下に伸びます。(デフォルト値)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
height: 12rem;
}
.child-2 { align-self: flex-start; }
.child-3 { align-self: center; }
.child-4 { align-self: stretch; }
実行結果stretch(デフォルト値)
parent
子1
子2
子3
子4

flex-grow | 幅の広がり

幅の広がりを指定します。flex-grow子要素に対して指定することに注意してください。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の幅(width)を広くしてみます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
実行結果広くする
parent
子1
子2
子3
子4

子要素flex-grow0と指定します。0がデフォルト値なので変化しません。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-grow: 0; }
実行結果0
parent
子1
子2
子3
子4

flex-grow1を指定すると子要素が広がります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-grow: 1; }
実行結果flex-grow
parent
子1
子2
子3
子4

.child-3flex-grow2にすると、他の子要素よりも幅が広くなります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-grow: 1; }
.child-3 { flex-grow: 2; }
実行結果子3のみ2
parent
子1
子2
子3
子4

.child-3flex-grow3にしてみます。幅はさらに広くなります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-grow: 1; }
.child-3 { flex-grow: 3; }
実行結果子3のみ3
parent
子1
子2
子3
子4

.childrenflex-grow0にしてみます。.child-3以外の幅はデフォルトに戻るので、開いた全てのスペースを.child-3が占めることになります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-grow: 0; }
.child-3 { flex-grow: 3; }
実行結果.children0
parent
子1
子2
子3
子4

flex-shrink | 幅の縮み

幅の縮みを指定します。flex-shrink子要素に対して指定することに注意してください。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の幅(width)を広くしてみます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
実行結果広くする
parent
子1
子2
子3
子4

子要素の幅も広くしてみます。 子要素の幅を10remにしているので、全体では10rem × 4 = 40rem必要にですが、親要素の幅が30remしかないのでハミ出しそうです。 しかし、子要素均等に縮むことで上手く収まっています。 これは子要素flex-shrinkのデフォルト値が1であるからです。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
}
実行結果子要素を広く
parent
子1
子2
子3
子4

実際に、子要素flex-shrink1に指定しても結果は同じです。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
flex-shrink: 1;
}
実行結果1
parent
子1
子2
子3
子4

flex-shrink0に変更するとはみ出します。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
flex-shrink: 0;
}
実行結果0
parent
子1
子2
子3
子4

.children1に戻して、.child-3flex-shrink2にすると、他の子要素よりも狭くなります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
flex-shrink: 1;
}
.child-3 { flex-shrink: 2 }
実行結果子3のみ2
parent
子1
子2
子3
子4

.child-3flex-shrink3にすると、さらに狭くなります。 このように値が大きいほど狭くなることに注意してください。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
flex-shrink: 1;
}
.child-3 { flex-shrink: 3 }
実行結果子3のみ2
parent
子1
子2
子3
子4

.child-3flex-shrink0にすると縮まなくなる(=width: 10rem)ので、他の子要素が縮んで調整します。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 10rem;
flex-shrink: 1;
}
.child-3 { flex-shrink: 0 }
実行結果子3のみ0
parent
子1
子2
子3
子4

flex-basis | 幅の大きさ

幅の大きさを指定します。flex-basis子要素に対して指定することに注意してください。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

親要素の幅(width)を広くしてみます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
実行結果広くする
parent
子1
子2
子3
子4

子要素flex-basis5remにします。 flex-basisは実質的にwidthと同じです。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-basis: 5rem; }
実行結果5rem
parent
子1
子2
子3
子4

.child-3flex-basis8remにしてみます。子3のみ、幅は広くなります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { flex-basis: 5rem; }
.child-3 { flex-basis: 8rem; }
実行結果子3のみ8rem
parent
子1
子2
子3
子4

flex-basiswidthと書き換えても同じ結果になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children { width: 5rem; }
実行結果widthでも同じ
parent
子1
子2
子3
子4

flex-basiswidthの両方を指定した場合、flex-basisが優先されます。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
width: 5rem;
flex-basis: 3rem;
}
実行結果flex-basisが優先
parent
子1
子2
子3
子4

flex | 幅の広がり+縮み+大きさ

flex-grow/flex-shrink/flex-basisを一括で指定します。

設定値の順番はflex( flex-grow, flex-shrink, flex-basis )またはflex( flex-basis, flex-grow, flex-shrink )にします。(つまりflex-shrinkは常にflex-growの後ろ)

設定値機能デフォルト
flex-grow幅の広がり0
flex-shrink幅の縮み1
flex-basis幅の大きさauto

個別に設定した場合。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
flex-grow: 1;
flex-shrink: 0;
flex-basis: 5rem;
}
実行結果flex-growflex-shrinkflex-basis
parent
子1
子2
子3
子4

flexでまとめて設定した場合。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
width: 30rem;
}
.children {
flex: 1 0 5rem;
}
実行結果flex
parent
子1
子2
子3
子4

order | 順番

子要素の順番を指定します。order子要素に対して指定することに注意してください。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
実行結果初期状態
parent
子1
子2
子3
子4

デフォルト値は0であり、プラスの値を設定すると右に移動します。マイナスの値を設定すると左に移動します。

.child-3order1にすると、子3が一番右に来ます

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
.child-3 { order: 1; }
実行結果1
parent
子1
子2
子3
子4

.child-3order-1にすると、子3が一番左に来ます。他の子要素のorder0なので、一番小さい-1である.child-3が一番左になります。

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
.child-3 { order: -1; }
実行結果-1
parent
子1
子2
子3
子4

全ての子要素orderを設定すると小さい順に並びます。(デフォルトが0であることに注意してください)

HTML
parent<br>
<div class="parent">
<div class="children child-1">子1</div>
<div class="children child-2">子2</div>
<div class="children child-3">子3</div>
<div class="children child-4">子4</div>
</div>
CSS
/* ----- 親要素 ----- */
.parent {
border: 5px dotted green;
padding: 5px;
display: inline-block;
}
/* ----- 子要素 ----- */
.children {
border: 5px solid purple;
margin: 5px;
padding: 5px;
}
CSS
.parent {
display: flex;
}
.child-1 { order: 4 }
.child-2 { order: 1 }
.child-3 { order: 3 }
.child-4 { order: 2 }
実行結果order
parent
子1
子2
子3
子4