本記事ではFlexboxの各プロパティを用いることで、どんな風に要素が配置されるのかを解説していきます。
この記事を読むことで、Flexboxの各プロパティの使い方の基礎が理解できるようになります。
ぜひ最後までご覧ください。
目次
Flexboxとは
Flexboxとは「Flexible Box Layout Module」の略で、その名前の通り柔軟なボックスレイアウトを可能にするものです。
Flexboxは親要素にdisplay: flex;(インライン要素であれば、display: inline-flex;)を記述することで、フレックスコンテナとして使えるようになり、コンテナの中に子要素を作ります。
Flexboxではフレックスコンテナ(flex-container)とフレックスアイテム(flex-item)に分類されます。
- フレックスコンテナ(以下「コンテナ」という)は「親要素」を意味します。
- フレックスアイテム(以下「アイテム」という)は「子要素」を意味します。
Flexboxはコンテナとアイテムで構成されていることを理解した上で、コンテナで使われるプロパティとアイテムで使われるプロパティを見ていきましょう。
コンテナで使われるプロパティ
コンテナで使われるプロパティは以下のようになります。
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
それぞれのプロパティの使い方とアイテムがどのように配置されるのかを解説していきます。
flex-direction
flex-directionはアイテムの並び順(配置する順番)を指定できるプロパティです。
flex-directionが取れる値は、以下の4つになります。
- flex-direction: row;
- flex-direction: row-reverse;
- flex-direction: column;
- flex-direction: column-reverse;
flex-direction: row;
flex-direction: row;はデフォルトで設定された値で、アイテムが水平方向に左から右に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-direction: row; } |
flex-direction: row-reverse;
flex-direction: row-reverse;はアイテムが水平方向に右から左に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-direction: row-reverse; } |
flex-direction: column;
flex-direction: column;はアイテムが垂直方向に上から下に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-direction: column; } |
flex-direction: column-reverse;
flex-direction: column-reverse;はアイテムが垂直方向に下から上に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-direction: column-reverse; } |
flex-wrap
flex-wrapはアイテムの折り返しを指定できるプロパティです。
flex-wrapが取れる値は、以下の3つになります。
- flex-wrap: nowrap;
- flex-wrap: wrap;
- flex-wrap: wrap-reverse;
flex-wrap: nowrap;
flex-wrap: nowrap;はデフォルトで設定された値で、アイテムを折り返さないで一列に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-wrap: nowrap; } |
flex-wrap: wrap;
flex-wrap: wrap;は複数行(2列以上)のアイテムを上から下に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-wrap: wrap; } |
flex-wrap: wrap-reverse;
flex-wrap: wrap-reverse;は複数行(2列以上)のアイテムを下から上に配置されます。
1 2 3 4 |
.flex-container { display: flex; flex-wrap: wrap-reverse; } |
flex-flow
flex-flowはアイテムの並び順(配置する順番)とアイテムの折り返しを指定できるプロパティです。
flex-flowはflex-directionとflex-wrapを一括で指定できます。
flex-flowの記述方法は、以下のようになります。
1 2 3 4 |
.flex-container { display: flex; flex-flow: flex-directionの値 flex-wrapの値; } |
justify-content
justify-contentは水平方向でアイテムの位置を指定できるプロパティです。
justify-contentで取れる値は、以下の5つになります。
- justify-content: flex-start;
- justify-content: flex-end;
- justify-content: center;
- justify-content: space-between;
- justify-content: space-around;
justify-content: flex-start;
justify-content: flex-start;はデフォルトの値であり、アイテムを左揃えで配置されます。
1 2 3 4 |
.flex-container { display: flex; justify-content: flex-start; } |
justify-content: flex-end;
justify-content: flex-endはアイテムを右揃えで配置されます。
1 2 3 4 |
.flex-container { display: flex; justify-content: flex-end; } |
justify-content: center;
justify-content: center;はアイテムを左右中央揃えで配置されます。
1 2 3 4 |
.flex-container { display: flex; justify-content: center; } |
justify-content: space-between;
justify-content: space-between;は両端のアイテムは余白を空けずに、両端以外のアイテムを均等に間隔を空けて配置されます。
1 2 3 4 |
.flex-container { display: flex; justify-content: space-between; } |
justify-content: space-around;
justify-content: space-around;は全てのアイテム(両端を含む)を均等に間隔を開けて配置されます。
1 2 3 4 |
.flex-container { display: flex; justify-content: space-around; } |
align-items
align-itemsはアイテムの垂直方向の位置を指定できるプロパティです。
align-itemsが取れる値は、以下の5つになります。
- align-items: stretch;
- align-items: flex-start;
- align-items: flex-end;
- align-items: center;
- align-items: baseline;
align-items: stretch;
align-items: stretch;はデフォルトの値であり、アイテムを上下の余白を埋めて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-items: stretch; } |
align-items: flex-start;
align-items: flex-start;はアイテムを上に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-items: flex-start; } |
align-items: flex-end;
align-items: flex-end;はアイテムを下に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-items: flex-end; } |
align-items: center;
align-items: center;はアイテムを上下中央に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-items: center; } |
align-items: baseline;
align-items: baseline;はアイテムをベースラインに合わせて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-items: baseline; } |
align-content
align-contentはアイテムの垂直方向の位置を指定できるプロパティです。
align-contentが取れる値は、以下の6つになります。
- align-content: stretch;
- align-content: flex-start;
- align-content: flex-end;
- align-content: center;
- align-content: space-between;
- align-content: space-around;
align-content: stretch;
align-content: stretch;はアイテムの行を余白を埋めるように配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: stretch; } |
align-content: flex-start;
align-content: flex-start;はアイテムの行を上に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: flex-start; } |
align-content: flex-end;
align-content: flex-end;はアイテムの行を下に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: flex-end; } |
align-content: center;
align-content: center;はアイテムの行を上下中央に揃えて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: center; } |
align-content: space-between;
align-content: space-between;は一番上の行と一番下の行のアイテムを余白を空けないで配置し、他のアイテムの行は均等に間隔を空けて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: space-between; } |
align-content: space-around;
align-content: space-around;はすべてのアイテムの行が均等に間隔を空けて配置されます。
1 2 3 4 |
.flex-container { display: flex; align-content: space-around; } |
アイテムで使われるプロパティ
アイテムで使われるプロパティは以下のようになります。
- order
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
それぞれのプロパティの使い方について見ていきましょう。
order
orderはアイテムの並び順を指定することができるプロパティです。
アイテムの1つ1つにorderを指定すると、HTMLの記述する順を無視して要素の並び順を指定することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.flex-container { display: flex; } .flex-item:nth-child(1) { order: 4; } .flex-item:nth-child(2) { order: 1; } .flex-item:nth-child(3) { order: 3; } .flex-item:nth-child(4) { order: 2; } |
flex-grow
flex-growはアイテムのサイズを指定するプロパティです。
flex-growでは数値を指定することで、アイテムの伸び率や大きさを指定することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.flex-container { display: flex; } .flex-item:nth-child(1) { flex-grow: 4; } .flex-item:nth-child(2) { flex-grow: 1; } .flex-item:nth-child(3) { flex-grow: 3; } .flex-item:nth-child(4) { flex-grow: 2; } |
flex-shrink
flex-shrinkはアイテムの縮み率を指定することができるプロパティです。
flex-shrinkはflex-growと対照的にアイテムの縮み率、小ささを指定することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.flex-container { display: flex; } .flex-item:nth-child(1) { flex-shrink: 1; } .flex-item:nth-child(2) { flex-shrink: 1.5; } .flex-item:nth-child(3) { flex-shrink: 2; } .flex-item:nth-child(4) { flex-shrink: 1.5; } |
flex-basis
flex-basisは、アイテムの基本幅を指定することができるプロパティです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.flex-container { display: flex; } .flex-item:nth-child(1) { flex-basis: 20%; } .flex-item:nth-child(2) { flex-basis: 30%; } .flex-item:nth-child(3) { flex-basis: 10%; } .flex-item:nth-child(4) { flex-basis: 40%; } |
flex
flexは、flex-growとflex-shrink、flex-basisの3つの値をまとめて指定できるプロパティです。
flexの書き方は以下のようになります。
1 2 3 |
.flex-item { flex: flex-growの値 flex-shrinkの値 flex-basisの値; } |
align-self
align-selfでは、アイテムの垂直方向の位置を指定できるプロパティです。
vertical-alignは使えないので、注意が必要です。
コンテナでalign-itemsを使って垂直方向の位置を指定することができるが、アイテムにalign-selfが指定されてた場合はalign-selfが優先されます。
align-selfが取れる値は以下の6つになります。
- align-self: auto; (コンテナのalign-itemsの値を使用)
- align-self: stretch; (アイテムを上下の余白を埋めるように配置)
- align-self: flex-start; (アイテムを上に揃えて配置)
- align-self: flex-end; (アイテムを下に揃えて配置)
- align-self: center; (アイテムを中央に揃えて配置)
- align-self: baseline; (アイテムをベースラインに合わせて配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
.flex-container { display: flex; } .flex-item { align-self: auto; } .flex-item { align-self: stretch; } .flex-item { align-self: flex-start; } .flex-item { align-self: flex-end; } .flex-item { align-self: center; } .flex-item { align-self: baseline; } |
まとめ
いかがだったでしょうか?
今回はFlexboxの各プロパティの使い方を理解することはできたでしょうか?
Flexboxが使いこなせるとCSSのハードルが下がると言っても言い過ぎではありません。
プログラミングは受験勉強や学校の定期テストと違ってカンペが使えるので、忘れたときに調べて自己解決できるレベルまで反復練習をするようにしましょう。