見た目で選ぶ!CSSのFlexboxを使いこなそう
CSSのFlexboxとは、WEBサイト作成でよく用いられるレイアウト手法になります。
使い方に慣れるまでは複雑に感じますが、非常に便利なCSSプロパティですのでしっかりと使いこなせるようになりましょう。
Flexboxとは
Flexible Box Layout Moduleを略してflexboxと呼ばれています。CSS3から導入されたレイアウトモジュールです。
まずはどんなことができるのかをビジュアルで確認してみましょう。
上記のような要素に対して、FlexboxのCSSを反映させて横並びにしてみます。
HTMLと追加するCSSのコードは以下の通りです。
<div class="flex">
<div class="square one">01</div>
<div class="square">02</div>
<div class="square">02</div>
</div>
.flex{
display:-webkit-box;
display:-ms-flexbox;
display:flex;
}
.left{
-webkit-justify-content : flex-start;
-ms-flex-pack : start;
justify-content : flex-start;
}
水平方向 (justfy-content) |
|
---|---|
垂直方向 (align-item) |
|
コンテナとアイテム
Flexboxにはコンテナとアイテムという概念があります。コンテナは上記の例でいう「クラスflex」の部分、その子要素がアイテムと呼ばれます。当記事でもコンテナとアイテムという名称を使用しています。
Flexboxの特徴
例を見ていたいてなんとなくどういうものかがわかったかと思いますが、Flexboxの大まかな特徴を紹介します。
特徴1. 子要素の高さがそろう
CSSでFlexboxをかけると、アイテムの高さがそろいます。これまでの横並びで使用していた、floatやinline-blockなどはそれぞれの要素の高さに依存していましたが、Flexboxを使用すると、自動でアイテムの高さを調整してくれます。
特徴2. レイアウトを独自のプロパティで変更
上記の例で試していただいたと思いますが、CSSプロパティを使用することでアイテムのレイアウトを変更ができます。どのようなプロパティがあるかは後述いたしますので、その特徴を覚えましょう。
コンテナに使用するプロパティ
flexboxでは、コンテナに使用するプロパティとアイテムに使用するプロパティでわかれています。
まずはコンテナに使用するプロパティを紹介します。
プロパティ名 | 役割 |
---|---|
flex-direction | 横並びか縦並びを指定 |
flex-wrap | 改行、複数行を制御 |
flex-flow | 上記2つのプロパティのショートハンド |
justify-content | 列のレイアウトを調整 |
align-items | 上下の配置を調整 |
align-content | 行のレイアウトを調整 |
flex-directionで縦横の並びを指定
flex-directionの記載方法は以下の通りです。
.flex{
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
}
プロパティ値 | 役割 |
---|---|
row | 横並び、左から右へ配置(デフォルト) |
row-reverse | 横並び逆順、右から左へ配置 |
column | 縦並び、上から下へ配置 |
column-reverse | 縦並び、下から上へ配置 |
flex-direction |
|
---|
flex-wrapで改行指定
flex-wrap の記載方法は以下の通りです。
.flex{
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
プロパティ値 | 役割 |
---|---|
nowrap | 改行不可、1行指定(デフォルト) |
wrap | 改行許可、複数行指定 |
flex-wrap |
|
---|---|
コンテナサイズがアイテムの合計サイズよりも小さくなると、デフォルトでは改行せず無理くりコンテナ内に納めますが、改行を許可すると2行以上に改行され表示されます。
flex-flowで省略記載
flex-flowプロパティを使用すると上記で紹介した、flex-directionとflex-wapプロパティを同時に記載できます。
.flex{
-webkit-box-orient:horizontal;
-webkit-box-direction:normal;
-ms-flex-flow:row wrap;
flex-flow:row wrap;
}
CSSの行数を減らして記載することができます。
justify-contentで列のレイアウト指定
justify-contentは一番初めの例でも紹介した、列のレイアウトを指定するプロパティです。
.flex{
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
}
プロパティ値 | 役割 |
---|---|
flex-start | 左揃え(デフォルト) |
center | 中央揃え |
flex-end | 右揃え |
space-between | 両端揃え均等配置 |
space-around | 中央揃え均等配置 |
水平方向 (justfy-content) |
|
---|---|
align-itemsで上下の配置を調整
align-itemsも一番初めの例でも紹介した、上下の配置を指定するプロパティです。
.flex{
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
}
プロパティ値 | 役割 |
---|---|
stretch | 上下揃え(デフォルト) |
flex-start | 上揃え |
centern | 中央揃え |
flex-end | 下揃え |
baseline | ベースライン |
垂直方向 (align-item) |
|
---|---|
align-contentで行のレイアウトを調整
align-contentはjustify-contentの上下バージョンです。
.flex{
-ms-flex-line-pack: stretch;
align-content: stretch;
}
プロパティ値 | 役割 |
---|---|
stretch | 余白を埋めるように配置(デフォルト) |
flex-start | 上揃え |
centern | 中央揃え |
flex-end | 下揃え |
space-between | 上下両端揃え均等配置 |
space-around | 中央揃え均等配置 |
コンテナの高さが決まっているときに有効です。 デモは割愛させていただきます。
アイテムに使用するプロパティ
次にアイテムに使用するプロパティを紹介していきます。
プロパティ名 | 役割 |
---|---|
order | 並び順を指定 |
flex-grow | アイテムの伸び率を制御 |
flex-shrink | アイテムの縮み率を制御 |
flex-basis | アイテムのベース幅を制御 |
flex | 上記3つのショートハンド |
align-self | 垂直方向の位置指定 |
また、アイテムそれぞれにプロパティを使用するので、htmlに以下のようなクラスを追加してデモを作成します。
<div class="flex">
<div class="square one">01</div>
<div class="square two">02</div>
<div class="square three">03</div>
</div>
orderで並び順を変更
アイテムにorderプロパティを使用することで、任意に並び順を変更することが可能です。
.one{
order:2;
}
.two{
order:3;
}
.three{
order:1;
}
align-self で垂直方向の位置指定
アイテム単位でalign-itemsと同じように指定できます。
.flex{
-ms-flex-item-align: normal;
align-self: normal;
}
プロパティ値 | 役割 |
---|---|
normal | ノーマル |
flex-start | 右揃え |
flex-end | 左揃え |
center | 中央揃え |
baseline | ベースライン |
stretch | 両端ぞろえ |
アイテムの幅指定
アイテムの幅を個別に指定できます。アイテムの幅を指定するためのプロパティは複数あります。
プロパティ名 | 名前 |
---|---|
flex | まとめて指定 |
flex-grow | 伸び率 |
flex-shrink | 縮み率 |
flex-basis | ベースの幅を指定 |
まとめて指定するプロパティflexが推奨されています。
.flex{
-webkit-box-flex:1;
-ms-flex:1 1 10%;
flex:1 1 10%;
}
まとめ
flexboxは横並びだけでなく、レイアウトをするうえでも大変便利なプロパティです。
ぜひ使いこなして、レイアウトを楽にしましょう。
- CSS
- 見た目で選ぶ!CSSのFlexboxを使いこなそう