CSS3のフレックスは、コンポーネントの配置を変える便利な機能です。
アイテムのサイズや余白サイズが自動で配分されるので、アイテムサイズと余白の操作はとても重要です。
今回はアイテムの余白を操作します。いま、ほぼすべてのブラウザで対応しているので心配ありません。わかりやすく手順を追って解説します。
justify-content 並び方向の寄せ
初期値 | flex-start |
flex-start | 並びの初めの方に寄せる |
flex-end | 並びの終わりの方に寄せる |
center | 中央寄せ |
space-between | 端のアイテムを領域の端に配置して、間の余白を均等に割り当てる |
space-around | アイテムの両端の余白を均等に割り当てる |
| | または。or |
例
コンテナに指定します。
アイテムの並びの方向で余白をコントロールします。5つのパターンがあります。
- 左(右)寄せ
- 右(左)寄せ
- 中央寄せ
- 均等(両端の余白なし)
- 均等(両端の余白あり)
じっさいにサンプルコードを実行していきます。その前に、フレックスの並びの方向について知っておく必要があります。もし、分からないという人はこちらから。
まずはCSSです。
ソースコードサンプルのボックスにタップやマウスを合わせると、右上にコピーボタンが出ます。
慣れないうちは、とりあえずコピー&ペーストで、自分で動かすところから始めると良いです。
次にHTMLです。一気に表示します。
ヨコ並び
タテ並び
rowとcolumnで、ヨコ・タテの向きが変わります。また、reverseの有無で端に寄せるものが逆転しアイテムの順序も逆転します。
ここで、『アイテムの並びと同じ方向だけしかできないのか?』という疑問があるでしょう。フレックスにはもう一方の方向もできます。
ここで変更した並びの方向はメイン軸です。
align-items クロス方向の寄せ
初期値 | stretch |
flex-start | クロス軸の初めの方に寄せる |
flex-end | クロス軸の終わりの方に寄せる |
center | 中央寄せ |
baseline | アイテムをベースラインで揃える |
stretch | アイテムを伸ばす。余白を残さない |
| | または。or |
例
コンテナに指定します。
justify-contentはアイテムの並び方向の寄せでした。align-itemsは、並びの方向の垂直の方向(クロス)のアイテムの寄せに使います。
『クロス』がイメージしづらいかもしれないので図をもう一度見てみましょう。
クロス軸の寄せには5つのパターンがあります。
- 上(左)寄せ
- 下(右)寄せ
- 中央寄せ
- アイテムのベースライン
- 寄せずにアイテムを伸ばす
じっさいにサンプルコードを実行していきます。まずはCSSです。さっきのCSSにクラスを追加します。
ベースライン確認用のフォントサイズを変えるのと、align-itemsのデフォルト(stretch)以外を用意しました。
次にHTMLです。align-itemsプロパティでは、reverseの有無で結果は同じです。クロス軸の方向が同じだから。
***-reverseは省略します。さっきと同じように一気に表示します。
ヨコ並び
タテ並び
あたりまえですが、タテ向きでベースラインは揃えることができません。結果はflex-startです。
align-itemsはアイテムごとにも指定できます。align-selfプロパティです。
align-self クロス方向の個別指定
初期値 | auto |
auto | align-itemsを継承する |
flex-start | クロス軸の初めの方に寄せる |
flex-end | クロス軸の終わりの方に寄せる |
center | 中央寄せ |
baseline | アイテムをベースラインで揃える |
stretch | アイテムを伸ばす。余白を残さない |
| | または。or |
例
アイテムに指定します。
align-sefプロパティは、align-itemsを個別に指定するものです。指定する値はalign-itemsと同じで、それに加えてautoがあります。
autoは、align-itemsプロパティの値をそのまま使います。
じっさいにサンプルコードを実行しましょう。まずはCSSです。さっきのCSSにクラスを追加します。
次にHTMLです。
align-content 折り返しのアイテムを寄せる
初期値 | stretch |
flex-start | 並びの初めの方に寄せる |
flex-end | 並びの終わりの方に寄せる |
center | 中央寄せ |
space-between | 端のアイテムを領域の端に配置して、間の余白を均等に割り当てる |
space-around | アイテムの両端の余白を均等に割り当てる |
stretch | アイテムを伸ばす。余白を残さない |
| | または。or |
折り返しがある場合のみ有効。1行の場合は効果がない。
例
コンテナに指定します。
align-itemsプロパティでは、折り返しのとき、余白を行間に均等に配分します。サンプルコードで見てみましょう。
CSSに新しいクラスを追加します。
HTMLは、コンテナのクラスを変更してアイテムの数を増やします。
HTMLの結果を表示します。
アイテムの配置が変わりますが、ぜんぶ行間に余白を配分しています。
align-items(align-self)は、1行に詰めたときのアイテムの寄せには使えますが、折り返しの行間まではコントロールできません。
(アイテム全体では寄せてくれません。)
そこで、align-contentプロパティを使います。align-contentはアイテムの寄せを行いながら、折り返しの行間も寄せてくれます。
align-contentは、align-itemsの機能 + 折り返しの行間の寄せまで行う。
じっさいにサンプルコードを実行します。今度は、align-contentプロパティを使います。まずはCSSから。
CSSに新しいクラスを追加します。
次にHTMLです。
align-itemsのHTMLに、コンテナのクラスを追加します。(align-content-***)
HTML結果には、align-contentを入れる前も表示して比べます。
- align-items(align-self)は、1行詰めのクロス軸の寄せに使う
- align-contentは、折り返しの複数行のクロス軸の寄せに使う
早見表
justify-content, align-items(align-self), align-contentの余白の寄せの早見表を作りました。
justify-content | align-items | align-content | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
flex-start | flex-end | center | spaece-between | space-around | flex-start | flex-end | center | baseline | stretch | flex-start | flex-end | center | space-between | space-around | stretch | |
row | 左 | 右 | 中央 | 均等(*1) | 均等(*2) | 上 | 下 | 中央 | baseline | 伸ばす | 上 | 下 | 中央 | 均等(*1) | 均等(*2) | 伸ばす |
row-reverse | 右 | 左 | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
column | 上 | 下 | 中央 | 均等(*1) | 均等(*2) | 左 | 右 | 中央 | baseline | 伸ばす | 左 | 右 | 中央 | 均等(*1) | 均等(*2) | 伸ばす |
column-reverse | 下 | 上 | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
*1: 両端に空白なし
*2: 両端に空白あり
- : 同上
align-selfはalign-itemsと同じ。autoは、align-itemsを継承する。
まとめ
フレックスを使って、アイテムの寄せ、余白のコントロールの方法をご紹介しました。
フレックスは、余白の配分やアイテムの拡大・縮小があったりして、width, heightどおりにサイズが固定されることはあまりありません。
アイテムのサイズをコントロールする基準はflexプロパティですが、余白をコントロールするプロパティを分かっていないと自動的なサイズ変更に振り回されるので注意しましょう。
フレックスのすごいところはこれだけではありません。まだまだほかにもあります。
ここで説明すると長くなるのでとりあえずここまでにします。