FlexboxはCSS3から使用できる新しいCSSです。
フレキシブルで簡単にレイアウトが今までより少ないコードで、
実装することができます。
目次
Flexboxの書き方
FlexboxのHTML
複数の要素をboxで囲います。
<div class="box"> <div class="menu01">子要素01</div> <div class="menu02">子要素02</div> <div class="menu03">子要素03</div> <div class="menu04">子要素04</div> </div>
FlexboxのCSS
まず、boxにFlexコンテナーを定義
.box { display: -webkit-flex; display: flex; }
インライン要素の場合
.box { -webkit-flex-direction: row; flex-direction: row; }
Flexboxコンテナーに指定するプロパティ
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
flex-direction
子要素をどの方向に配置していくかを指定するプロパティー。
.box { -webkit-flex-direction: row; flex-direction: row; }
使える値
row(初期値) | 子要素を左から右に配置されます。 |
---|---|
row-reverse | 子要素を右から左に配置されます。 |
column | 子要素を上から下に配置されます。 |
column-reverse | 子要素を下から上に配置されます。 |
flex-wrap
子要素を一行、または複数行に並べるかを指定します。
.box { -webkit-flex-wrap: nowrap; flex-wrap: nowrap; }
使える値
nowrap(初期値) | 子要素を折り返しせず、一行に配置されます。 |
---|---|
wrap | 子要素を折り返し、複数行に上から下へ配置されます。 |
wrap-reverse | 子要素を折り返し、複数行に下から上へ配置されます。 |
flex-flow
flex-directionとflex-wrapをまとめて指定できるプロパティです。
.box { -webkit-flex-flow: row nowrap; flex-flow: row nowrap; }
justify-content
flexコンテナーに空きスペースがあった場合、水平方向のどの位置に配置するかを指定します。
.box { justify-content: flex-start; }
使える値
flex-start(初期値) | 行の開始位置から配置。左揃え。 |
flex-end | 行末から配置。右揃え。 |
center | 中央揃え |
space-between | 最初と最後の子要素を両端に配置し、残りの要素は均等に間隔をあけて配置 |
space-around | 両端の子要素も含め、均等に間隔をあけて配置 |
align-items
flexコンテナーに空きスペースがあった場合、垂直方向のどの位置に配置するかを指定します。
.box { align-items: stretch; }
使える値
stretch(初期値) | 親要素の高さ、またはコンテンツの一番多い子要素の高さに合わせて広げて配置 |
---|---|
flex-start | 親要素の開始位置から配置。上揃え。 |
flex-end | 親要素の終点から配置。下揃え。 |
center | 中央揃え |
baseline | ベースラインで揃える |
align-content
子要素が複数行に渡った場合の垂直方向の揃えを指定します。
.box { align-content:stretch; }
使える値
stretch(初期値) | 親要素の高さに合わせて広げて配置 |
---|---|
flex-start | 親要素の開始位置から配置。上揃え。 |
flex-end | 親要素の終点から配置。下揃え。 |
center | 中央揃え |
space-between | 最初と最後の子要素を上下の端に配置し、残りの要素は均等に間隔をあけて配置 |
space-around | 上下端にある子要素も含め、均等に間隔をあけて配置 |
子要素に指定するプロパティ
- order
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
order
子要素を任意の順で並べ替えられます。
.menu01 {order: 2; } .menu02 {order: 1; } .menu03 {order: 4; } .menu04 {order: 3; }
flex-grow
親要素にスペースがある場合、子要素が他の子要素に対してどれくらい伸びるかを指定します。
.menu02 {flex-grow: 5; }
flex-shrink
flex-growと逆で、親要素にスペースがなく子要素が入り切らない場合、指定のある子要素が他の子要素に対してどれくらい縮むかを指定します。
.menu02 {flex-shrink: 5; }
flex-basis
widthと同じように幅の値を指定できます。autoと指定した場合は子要素のコンテンツのサイズが適応されます。
.menu02 {flex-basis: 200px; }
flex
flex-grow、flex-shrink、flex-basis の3つのプロパティーを一行で指定できます。
初期値は 0(flex-grow) 1(flex-shrink) auto(flex-basis)です。
.menu02 {flex: 0 5 200px; }
align-self
親要素に高さにスペースがある場合、子要素を垂直方向のどの位置に配置するかを指定します。
flexコンテナに指定するalign-itemsと同じ機能ですが、こちらに指定がある場合は、align-itemsよりも優先されます。
.menu01 {align-self: auto;}
使える値
auto(初期値) | 親要素の align-items の値を継承 |
---|---|
stretch | 親要素の高さ、またはコンテンツの一番多い子要素の高さに合わせて広げて配置 |
flex-start | 親要素の開始位置から配置。上揃え。 |
flex-end | 親要素の終点から配置。下揃え。 |
center | 中央揃え |
baseline | ベースラインで揃える |
まとめ
私はグローバルナビゲーションで使ったりします。
Flexboxってとっても便利だなと思うのですが、
LPのコーディングを見てると
意外とfloatを使っていることが多いんですよ。
LPのコーディングでFlexbox使っているのが見つかったら、
ご紹介したいと思います。