【CSS】Flexboxで横並び表現
はじめに
この記事では、CSSで要素の横並びが簡単にできるFlexboxの使い方を解説していきます。
Flexboxとは「Flexible Box Layout Module」の略で、 floatプロパティで表現していた横並び のレイアウト処理を、簡単に行うことができるCSSプロパティです。 FlexboxはCSS3で導入されたレイアウトモードです。
ベースとなるHTMLとCSSの準備
これからFlexboxでレイアウトを組んでいきますが、ベースとなるHTMLとCSSを次のように用意しました。
<div class="container">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
</div>
.container {
background: cornsilk;
border: 1px solid coral;
}.item {
color: rgb(31, 45, 61);
background: coral;
margin: 10px;
padding: 10px;
}

Flexboxで横並び display: flex;
それでは子要素であるitem
クラスを横並べにしてみましょう。親要素の.container
クラスにdisplay: flex;
を記述するだけです。
.container {
...: flex;
display }

画像のように、float
プロパティを使うより圧倒的に簡単に要素の横並びが実現できました。
の記事をご覧になって、floatを使った場合と比較してみてください。
子要素の並ぶ向き flex-direction
flex-direction
プロパティを使うと、子要素の並び方向を変えることができます。flex-direction
には次のような値を設定できます。
値 | 動作 |
---|---|
row(初期値) | 子要素を左から右に配置 |
row-reverse | 子要素を右から左に配置 |
column | 子要素を上から下に配置 |
column-reverse | 子要素を下から上に配置 |
それでは実際にflex-direction
を使ってみましょう。
.container {
...: flex;
display: row-reverse;
flex-direction }
画像のように、
row-reverse
の値を指定すると右から左へ順番に子要素を配置することができました。
子要素の折り返し flex-wrap
flex-wrap
プロパティを使って子要素が折り返されたときの挙動を変えてみます。flex-wrap
プロパティで使える値は、次の表のとおりです。
値 | 動作 |
---|---|
nowrap(初期値) | 子要素を折り返さず、1行に並べる |
wrap | 子要素を折り返し、複数行に上から下へ並べる |
wrap-reverse | 子要素を折り返し、複数行に下から上へ並べる |
今度は子要素を9個に増やしてflex-wrap
を使ってみました。
.container {
...: flex;
display: wrap-reverse;
flex-wrap }

画像のように、wrap-reverse
の値を指定すると、折り返しつつ下から上へ子要素が配置されました。
水平方向の揃え justify-content
justify-content
プロパティを使うと、空きスペースがあった場合に、水平方向で揃えることができます。justify-content
プロパティで使える値は次の表のとおりです。
値 | 動作 |
---|---|
flex-start(初期値) | 左揃え |
flex-end | 右揃え |
center | 中央揃え |
space-between | 両端と均等配置 |
space-around | 均等配置 |
.container {
...: flex;
display: space-between;
justify-content }
画像のように、
space-between
の値を指定すると、両端に子要素が固定され、残りは均等配置されました。
垂直方向の揃え align-items
align-items
プロパティを使うと、空きスペースがあった場合に、垂直方向で揃えることができます。align-items
プロパティで使える値は次の表のとおりです。
値 | 動作 |
---|---|
stretch(初期値) | 親要素の高さいっぱいに広げて配置 |
flex-start | 上揃え |
flex-end | 下揃え |
center | 中央揃え |
baseline | ベースラインで揃える |
.container {
...: flex;
display: center;
align-items: 300px;
height }
画像のように、
align-items: center;
を指定すると、親要素の高さの中央位置に子要素が配置されます。
複数行での揃え align-content
align-content
プロパティでは、子要素が複数行にまたがった場合の垂直方向の揃えを制御します。align-content
プロパティで使える値は次のとおりです。
値 | 動作 |
---|---|
stretch(初期値) | 親要素の高さにあわせて広げて配置 |
flex-start | 上揃え |
flex-end | 下揃え |
center | 中央揃え |
space-between | 上下は端に配置、残りは均等間隔で配置 |
space-around | 均等間隔で配置 |
.container {
...: flex;
display: wrap;
flex-wrap: space-between;
align-content: 300px;
height }
画像のように、
space-between
の値を指定すると、上下の端に子要素が配置され、残りの子要素は垂直方向に均等間隔で配置されます。
以上でFlexboxの基本的な使い方の説明をおわります。float
でレイアウトをするよりも、Flexboxのほうが感覚的にわかりやすく使えて便利ですね。
ほとんどの主要なブラウザがFlexboxに対応しているので、積極的に使っていきます。
https://caniuse.com/flexbox