flexboxを使ってみよう!

flexboxは要素を等間隔に横並びにしたり、中央寄せしたり、横並びの要素の高さを全部揃えたりできるもの。

flexboxはCSS3から追加されたCSSの新しい機能。IE11以降から使える。

今までfloatやjsを使って行なっていたものが全てflexboxで行えるようになる。

flexboxの基本

Flexコンテナーと呼ばれる親要素の中に、Flexアイテムと呼ばれる子要素を入れて使う。

HTML

          
            
Item 1
Item 2
Item 3
Item 4

表示

Item 1
Item 2
Item 3
Item 4

後は親要素にdisplay:flexを指定するだけ

CSS

          
            .container {
              display: flex;
            }
          
        

表示

Item 1
Item 2
Item 3
Item 4

親要素に指定できるプロパティ

flex-direction … 子要素の並ぶ向き

子要素の上下並びと降順、昇順の並び方が変えられる

CSS

          
            .container {
              display: flex;
              flex-direction: row;
            }
          
        

row

Item 1
Item 2
Item 3
Item 4

row-reverse

Item 1
Item 2
Item 3
Item 4

column

Item 1
Item 2
Item 3
Item 4

column-reverse

Item 1
Item 2
Item 3
Item 4

flex-wrap … 子要素の折り返し

子要素を一行、または複数行に並べるかを指定する。複数行にする場合は子要素が親要素の幅を超えてしまった場合、折り返して複数行に配置されていく

CSS

          
            .container {
              display: flex;
              flex-wrap: wrap;
            }
          
        

nowrap

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

wrap

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

wrap-reverse

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

flex-flow … flex-directionとflex-wrapをまとめて指定

flex-direction と flex-wrap を一行で指定できるプロパティー。初期値は row nowrap

CSS

          
            .container {
              display: flex;
              flex-flow: row wrap;
            }
          
        

justify-content … 水平方向の揃え

親要素に空きスペースがあった場合、子要素を水平方向のどの位置に配置するかを指定

CSS

          
            .container {
              display: flex;
              justify-content: flex-end;
            }
          
        

flex-start

Item 1
Item 2
Item 3
Item 4

flex-end

Item 1
Item 2
Item 3
Item 4

center

Item 1
Item 2
Item 3
Item 4

space-between

Item 1
Item 2
Item 3
Item 4

space-around

Item 1
Item 2
Item 3
Item 4

align-items … 垂直方向の揃え

親要素に空きスペースがあった場合、子要素を垂直方向のどの位置に配置するかを指定

CSS

          
            .container {
              display: flex;
              align-items: center;
            }
          
        

stretch

Item 1
Item 2
Item 3
Item 4

flex-start

Item 1
Item 2
Item 3
Item 4

flex-end

Item 1
Item 2
Item 3
Item 4

center

Item 1
Item 2
Item 3
Item 4

baseline

Item 1
Item 2
Item 3
Item 4
2行でもOK

align-content … 複数行にした時の揃え

子要素が複数行に渡った場合の垂直方向の揃えを指定する。
flex-wrap: nowrap; が適応されていると子要素が一行になるので、align-content は無効になる。

CSS

          
            .container {
              display: flex;
              align-content: space-between;
            }
          
        

stretch

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

flex-start

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

flex-end

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

center

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

space-between

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

space-around

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20

子要素に指定できるプロパティ

order … 順序の指定

通常子要素はHTMLの記述順に配置されるが、order プロパティーを使えば任意の順で並べ替えられる

CSS

          
            .container {
              display: flex;
            }
            .item1 { order: 2; }
            .item2 { order: 3; }
            .item3 { order: 1; }
          
        

order

Item 1
Item 2
Item 3
Item 4

flex-grow … 子要素の伸びる比率

親要素に余ったスペースがあった場合、指定のある子要素が他の子要素に対してどれくらい伸びるかを指定

CSS

          
            .container {
              display: flex;
            }
            .item1 { flex-grow: 2; }
            .item2 { flex-grow: 3; }
            .item3 { flex-grow: 1; }
          
        

flex-grow

Item 1
Item 2
Item 3
Item 4

flex-shrink … 子要素の縮む比率

flex-grow と逆で、親要素に余ったスペースがなくすべての子要素が入り切らない場合、指定のある子要素が他の子要素に対してどれくらい縮むかを指定

CSS

          
            .container {
              display: flex;
            }
            .item1 { flex-shrink: 2; }
            .item2 { flex-shrink: 3; }
            .item3 { flex-shrink: 1; }
          
        

flex-shrink

Item 1
Item 2
Item 3
Item 4

flex-basis … 子要素のベースとなる幅の指定

子要素に対し width と同じように幅の値を指定。auto と指定した場合は子要素のコンテンツのサイズが適応される。

CSS

          
            .container {
              display: flex;
            }
            .item1 { flex-basis: auto; }
            .item2 { flex-basis: 200px; }
            .item3 { flex-basis: 30%; }
          
        

flex-basis

Item 1
Item 2
Item 3
Item 4

flex … flex-grow、flex-shrink、flex-basisをまとめて指定

flex-grow、flex-shrink、flex-basis の3つのプロパティーを一行で指定.初期値は 0 1 auto.

CSS

          
            .container {
              display: flex;
            }
            .item1 {
              flex: 0 1 30%;
            }
          
        

align-self … 子要素の垂直方向の揃え

親要素に空きスペースがあった場合、子要素を垂直方向のどの位置に配置するかを指定。
親要素に指定する align-items と全く同じ機能だが、こちらは子要素に対して指定する。
この align-self での指定は、親要素に記述する align-items よりも優先される。

CSS

          
            .container {
              display: flex;
            }
            .item1 {
              align-self: flex-end;
            }
          
        

auto

Item 1
Item 2
Item 3

stretch

Item 1
Item 2
Item 3

flex-start

Item 1
Item 2
Item 3

flex-end

Item 1
Item 2
Item 3

center

Item 1
Item 2
Item 3

baseline

Item 1
Item 2
Item 3