[css] flex

flex 学習記録。

いまのレベル感としてはなんとなく雰囲気でつかってるかんじ。flex-direction, justify-contents, align-items, くらいは使えるけど、 基本の flex-grow, flex-shrink, flex-basis とかが理解できてない。 そういう基本を理解して、しっかり flex をつかえるようになりたい。 あと flex 関連で知らないプロパティがたくさんあると思うので目を通しておきたい。

flex

mdn - flex

mdn によると「flex は CSS の一括プロパティで、フレックスアイテムをフレックスコンテナの領域に収めるために、どのように伸張・収縮させるかを指定します」 ということらしい。

flex-grow

mdn - flex-grow

flex-grow は CSS のプロパティで、フレックスアイテムの主軸方向の寸法のフレックス伸長係数を設定します。

フレックス身長係数というのは、フレックスコンテナ内の残りに空間のうち、どれだけがそのアイテムに割り当てられるかを表した値らしい。

主軸方向の寸法は、アイテムの幅または高さのどちらかで、flex-directionの値に依存して決まります。

flex-direction: rowのときは幅、flex-direction: columnのときは高さってことかな。 あと基本的にはflex-growを単体で使うことはなくて、flex-shrink, flex-basisといっしょに使用されるから、flexプロパティを使って定義するらしい。
item 1 - flex: 1
item 2
item 3

じっさいに記述してみるとかなり腑に落ちるな。たしかに余ってる空間をどれだけ使うかを指定してる。

で、item 1 にだけ flex: 1を付与すると、たしかに item 1 だけ伸長して他の item は伸長しないので、flex-growのデフォルト値は 0 というのも体感した。

flex-shrink

mdn - flex-shrink

flex-shrink は CSS のプロパティで、フレックスアイテムの 縮小係数を設定します。 すべてのフレックスアイテムの寸法がフレックスコンテナよりも大きい場合、アイテムはflex-shrinkの数値にしたがって縮小して収まります。
使用時はflex-shrinkflex-growflex-basisなどの他のフレックスプロパティとともに使用され、 ふつうはflexの一括指定を使用して定義されます。

mdn - flex-shrink

flex-grow伸長係数を設定するのに対して、flex-shrink縮小係数を設定する。なるほど。

flex-shrink: 2
flex-shrink: 2
flex-shrink: 1
flex-shrink: 1
flex-shrink: 1

背景がオレンジっぽいところが width: 500px の flex コンテナで、 そのなかの item を flex-basis: 120px にして、item がコンテナに収まらないようにしている。(flex-basis は flex-shrink の次に勉強する)

おー。flex-shrink: 2にしている item が、flex-shrink: 1にしている item より縮小している。 ちなみにflex-shrink: 1の記述を消してもレイアウトは変わらなかったのでflex-shrink の default value が 1 だというのも体感した。

flex-basis

mdn - flex-basis

flex-basisは CSS のプロパティで、フレックスアイテムの主要部分の初期の寸法を設定します。box-sizingで設定していない限り、このプロパティはコンテンツボックスの寸法を定義します。

mdn - flex-basis

フレックスアイテムの寸法を設定するってのはわかったけど、「box-sizingで設定しない限り、このプロパティはコンテンツボックスの寸法を定義します」がよくわかなんないな。 コンテンツボックスっていう単語を知らないからか。

これ読めばわかるっぽいけど、ちょっといまはいいや。

mdn - box-sizing

とりあえず flex-basis で flex item のサイズを指定できるらしい。で、mdn によると width よりも flex-basis のほうが優先られるらしい。

flex-basis: 50px
flex-basis: 100px
flex-basis: 200px

まあなんとなくわかった。

あと flex-wrap ってのも大事そうなので見ておきたい。

flex-wrap

mdn - flex-wrap

flex-wrap は css のプロパティで、フレックスアイテムを単一行に押し込むか、あるいは複数行に折り返してもよいかを指定します。 折返しを許可する場合は、行を積み重ねる方向の制御も可能です。

mdn - flex-wrap

flex-wrap: wrapで、折り返して、flex-wrap: nowrapで折り返さないってくらいか。これは知ってたな。

w3 school の flexbox のページをみてて思ったけど、flexbox 関連のプロパティって、 flex container の設定をするプロパティと flex item の設定をするプロパティにわけられるのか。

w3school - flexbox

flex container の設定をするプロパティ

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex item の設定をするプロパティ

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

こうやって実際に分けて並べてみるとちょっと整理できた気持ちになるな。

flex-flow ってなんだろ。使ったことないな。

flex-flow

mdn - flex-flow

あー。flex-directionflex-wrapを一括で設定できるのか。

あと align-self についてもちょっと調べておきたいんだよな。なんか使ってはみるけど、いつもうまく動いてくれないから、正しい使い方を知っておきたい。

align-self は CSS のプロパティで、グリッドやフレックスのアイテムの align-items の値を上書きします。 グリッドでは、アイテムはグリッド領域内で配置されます。フレックスボックスでは、アイテムは交差軸上で配置されます。

mdn - flex-flow

交差軸って言葉がわからん。調べる。

mdn - cross axis

フレックスボックスにおける交差軸(cross axis / クロス軸)は、主軸(main axis / メイン軸)で、flex-direction が row または row-reverse であるとき(つまり主軸が行方向であるとき)、列方向の軸のことです。

主軸が column または column-reverse の場合は、交差軸は行方向となります。

mdn - cross axis

主軸に対する交差軸ってことか。

flex-direction: row (主軸: 横, 交差軸: 縦)

center
start
end

flex-direction: column (主軸: 縦, 交差軸: 横)

center
start
end

いったん center, start, endくらい使えれば大丈夫かな。

とりあえず flexbox はこれくらいでいいや。

学習過程をだらだらと書きながら進めていくスタイルでやってみたけど、なんか無駄が多いなあった気もした。

でもこうやって書きながら、こまめに deploy して公開してたからこそ、ひととおり最後までできたのでよかった、のかな?

あとレイアウト系は gird学習しないとな。 それにしても、やっぱりなにかを作りながらの勉強と比べて、純粋に勉強だけするのは大変つまらないなというのは感じたな。 やっぱり何か作りながらがいいのかな。学習方法もいろいろ考えないとな。

おしまい!