CSSのレイアウト flexbox について
以前、上の記事でCSSのレイアウトがわかってないなという話を書いたが、 CSSを一通りざっと勉強して、(古いブラウザのことを無視すれば)flexboxだけわかってれば 大体のレイアウトは組めそうなことがわかった。
flexbox
flexbox自体の説明はググればたくさんあるのでしないとして、 設計方針としては、基本的には、
display: flex
とするだけで横並びになるので、行単位で設計する- 子要素がフォームやボタンのような部品系なら、
- 子要素の並びは
justify-content
(子要素が並ぶ方向)と
align-items
(子要素が並ぶのと垂直方向)で決める
- 子要素の並びは
- 子要素がレイアウトのためのコンテナ要素なら、
でなんとなくイメージが形になる。
自分としてはまだCSSに不慣れなので、 各要素のwidth/heightの値を指定してあげないと意図したとおりにレイアウトされない部分がいろいろあるのに注意が必要な状況。
迷ったこと
試している中で迷ったことが2つ。
行の中の部品のうち1つだけ右揃えにする方法
自分では float: right
をつけるしかないのかな、そうするとflexboxとfloatが共存して気持ち悪いな、と思っていたのだけど、
「flexbox 右寄せ」でググったら、例えばココのように、marginを使った方法がたくさん紹介されてた。
サンプルは以下。
これですっきり実現できた。
See the Pen flexbox right side example by nippi (@nshinya) on CodePen.
flex-growの比率指定の意味
子要素にflex-growで数字を指定すれば、子要素同士の幅や高さの比率指定ができる。
ただし、この比率指定は 余白部分の割り当て比率 であるため、 子要素がもともと持っている幅(内部のテキストの幅など)があると、 行や列全体に対する割合にはならないことに注意が必要。
厳密に全体に対する割合を指定したいときは、widthで%指定を使う。
See the Pen flexbox grow example by nippi (@nshinya) on CodePen.
レイアウト例
2 column layout
See the Pen flexbox example (2 columns) by nippi (@nshinya) on CodePen.
grid
See the Pen flexbox example (grid) by nippi (@nshinya) on CodePen.
row/column layout
See the Pen flexbox row-column example by nippi (@nshinya) on CodePen.