出来るようになる事
親要素のサイズが変更された時、真ん中の状態を経由せずに、縦並びと横並びを切り替える
なぜこの処理が必要?
一部の要素だけが大きくなると、大きく表示される要素をオススメのコンテンツだと勘違いしてしまう事があるから
実装する
Flexbox内の要素のサイズを自動で変更する
- 最小幅 : 親要素の33%
- 最大幅 : 親要素の100%
で子要素のサイズが自動で変更されるようになりました。
See the Pen Qiita-612c3c82f4238fcab2b1-1 by lp0ql (@lp0ql) on CodePen.
flex-basis
flex-basis
は、子要素の基本幅(子要素になってほしいサイズ)を設定します。すると、Flexbox内で、なるべくflex-basis
に指定したサイズに近づくようにブラウザが調整してくれます。
See the Pen Qiita-612c3c82f4238fcab2b1-2 by lp0ql (@lp0ql) on CodePen.
999rem, -999rem
flex-basis
で999rem
や-999rem
等の値を設定すると、なるべく要素を大きく又は小さくしようとします。
しかし、min-width
とmax-width
によって阻まれるので、999rem
の時はmax-width
で指定されたサイズである100%
に、
-999rem
の時は
このように値が無効になり、min-width
で設定された33%
になります。
(最初と同じ状態)
999 と -999 を親要素のサイズで切り替える
calc(40rem - 100%)
この計算を行う事で、親要素が40rem
以上の時に結果が負になり、40rem
より小さい時に正
の数になります。
これを利用して
flex-basis: calc(40rem - 100%) * 999);
とする事で、flex-basis
に非常に高い値
または非常に低い値
を設定します。そして、このような状況では999
を使うのが一般的なようです。
See the Pen Qiita-612c3c82f4238fcab2b1-2 by lp0ql (@lp0ql) on CodePen.
@ media よりもこの方法が良い理由
ビューポートのサイズに関係なく利用出来るので、任意の横幅の親要素内で利用する事が出来る
参考
heydonworks.com - The Flexbox Holy Albatross
最後に
間違い・アドバイスがあれば是非教えて下さい!