目次
- Flexboxとは
- ブラウザの対応状況
- Flexboxの使い方
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
- order
- 注意
- まとめ
Flexboxとは
Flexboxとは、スクリーンサイズに応じて、ページ上の要素が指定した通りに配置されるレイアウト方法です。 仕様では、Webアプリのインターフェース設計用に最適化されたCSSのボックスモデルとなっていますが、スマートフォンやタブレットなど多くのスクリーンサイズにフレキシブルに対応する場合に使えます。 ようするに、レスポンシブWebデザインととても相性がいいのです。ブラウザの対応状況
Can I use…を見てみると、モダンブラウザではほぼ使用可能です。 以前は、IE8,9などの影響でまだ使える状況が限られていましたが、IEのサポートポリシーの変更でWindows VistaのIE9を除けば、普段の業務でも利用しやすい状況になりました。Flexboxの使い方
Flexboxレイアウトは、Flex itemという子要素とそれらを内包する、Flex boxという親要素からできています。 flexboxレイアウトを使うには、フレキシブル要素の親要素のdisplay:flexを指定するだけです(iOS Safariはベンダープレフィックスが必要)。.flex_box{
display: -webkit-flex;
display:flex;
}
デモ
これで、Flexboxを扱う準備ができました。
flex-direction
このプロパティで子要素(Flex item)の配置を決めます。 row子要素がHTMLに記述された順に横に並んで配置されます。
.flex_box{
-webkit-flex-direction: row;
flex-direction: row;
}
column子要素がHTMLに記述された順に縦に配置されます。
.flex_box{
-webkit-flex-direction: column;
flex-direction: column;
}
デモ
row-reverse子要素がHTMLに記述された順とは逆順で横に並んで配置されます。
.flex_box{
-webkit-flex-direction: row-reverse;
flex-direction: row-reverse;
}
デモ
column-reverse
子要素がHTMLに記述された順とは逆順で縦に配置されます。
.flex_box{
-webkit-flex-direction: column-reverse;
flex-direction: column-reverse;
}
デモ
flex-wrap
flex-wrapは子要素の折り返しを設定します。 nowrap折り返さず、横一行に配置されます。
.flex_box{
-webkit-flex-wrap: nowrap;
flex-wrap: nowrap;
}
デモ
wrap横複数行に配置されます。
.flex_box{
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
デモ
wrap-reverseHTMLに記述された順とは逆順で横複数行に配置されます
.flex_box{
-webkit-flex-wrap: wrap-reverse;
flex-wrap: wrap-reverse;
}
デモ
flex-flow
flex-directionとflex-wrapのショートハンドです。 逆順で横に複数行.flex_box{
-webkit-flex-flow:row-reverse wrap-reverse;
flex-flow:row-reverse wrap-reverse;
}
justify-content
親要素の水平方向に沿って子要素配置します。 flex-start親要素の左側に配置します。
.flex_box{
-webkit-justify-content: flex-start;
justify-content: flex-start;
}
デモ
flex-end親要素の右側に配置します。
.flex_box{
-webkit-justify-content: flex-endt;
justify-content: flex-end;
}
デモ
center親要素の左右中央に配置されます。
.flex_box{
-webkit-justify-content: center;
justify-content: center;
}
デモ
space-between最初の子要素は左端に、最後の子要素は右端に配置され、その他の要素は等間隔に配置されます。
.flex_box{
-webkit-justify-content: space-between;
justify-content: space-between;
}
デモ
space-aroundspace-between とは違い術との要素が等間隔に配置されます。
.flex_box{
-webkit-justify-content: space-around;
justify-content: space-around;
}
デモ
align-items
justify-content に似ていますが、親要素の垂直方向に沿って子要素配置します。 今までは難しかった天地中央揃えが簡単に実装できます。 flex-start親要素の上側に配置します。
.flex_box{
-webkit-align-items: flex-start;
align-items: flex-start;
}
デモ
flex-end親要素の下側に配置します。
.flex_box{
-webkit-align-items: flex-end;
align-items: flex-end;
}
デモ
center親要素の天地中央に配置します。
.flex_box{
-webkit-align-items: center;
align-items: center;
}
デモ
<
p>天地左右中央揃えをする場合.flex_box{
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
}
デモ
baseline親要素のベースラインに沿って配置します。
.flex_box{
-webkit-align-items: baseline;
align-items: baseline;
}
デモ
stretch親要素の高さいっぱいに配置します。
.flex_box{
-webkit-align-items: stretch;
align-items: stretch;
}
デモ
align-content
名前が似ているので紛らわしいですが、align-items とは違い複数行の配置を決定します。 とる値はjustify-contentと同じです。 justify-content の縦バージョンと思ってもらえればいいと思います。 flex-start親要素の上側にまとまって配置します。
.flex_box{
-webkit-align-content: flex-start;
align-content: flex-start;
}
デモ
flex-end親要素の下側にまとまって配置します。
.flex_box{
-webkit-align-content: flex-end;
align-content: flex-end;
}
デモ
center親要素の天地中央にまとまって配置します。
.flex_box{
-webkit-align-content: center;
align-content: center;
}
デモ
space-between最初の子要素は上に、最後の子要素は下に配置され、その他の要素は等間隔に配置されます。
.flex_box{
-webkit-align-content: space-between;
align-content: space-between;
}
デモ
space-around要素が等間隔に配置されます。
.flex_box{
-webkit-align-content: space-around;
align-content: space-around;
}
デモ
ここからは子要素に設定するプロパティです。
flex-grow
子要素の伸び幅を決定します。 横幅いっぱいに伸ばすサイズは値によって配分されます。.flex_item{
-webkit-flex-grow: 1;
flex-grow: 1;
}
デモ
flex-shrink
flex-grow とは逆に子要素の縮み幅を決定します。 親要素に入りきらない場合、値によって自動的に縮む。.flex_item{
-webkit-flex-shrink: 1;
flex-shrink: 1;
}
デモ
flex-basis
子要素の最初のサイズを元に、幅と高さのプロパティを同じ値にします。.flex_item{
-webkit-flex-basis: 200px;
flex-basis: 200px;
}
デモ
flex
flex-grow, flex-shrink, flex-basis のショートハンドです。.flex_item{
-webkit-flex: 1 1 200px;
flex: 1 1 200px;
}
デモ
align-self
子要素の整列をalign-itemsでの指定より優先します。 個別にalign-itemsを設定することができます。 値はalign-itemsを参照。- flex-start
- flex-end
- center
- baseline
- stretch
order
子要素の並ぶ順番を決定します。 初期値は0です。.flex_item{
-webkit-order: 1;
order: 1;
}
デモ
注意
float や clear や vertical-align はFlex itemに影響を与えません。Flexbox Playground
Flexboxの実験ができます。Flexbox Playground
FLEXBOX FROGGY
Flexboxをゲーム感覚で遊びながら学べます。FLEXBOX FROGGY