FlexboxよりGridを使う理由
先日、Grid First, Flex Thirdという記事を読んだ。要約すると「レイアウトを行う際は grid > block > flex の順で使うべき」という主張がなされている。
並びのレイアウトはFlexbox、格子状に区切ってどこに何を配置するかはGridを使う派だったのだが、Gridの有用性を再認識した。
Flexboxの使いづらいところ
Flexboxで要素を並べると子要素の幅を指定しても圧縮されてしまう。
<section class="layout">
<div class="item"></div>
<div class="item"></div>
...
</section>
.layout {
display: flex;
overflow-x: auto;
}
.item {
width: 200px;
}
子要素の幅を維持するためには、flex-shrink: 0;
という指定が必要になる。
.item {
width: 200px;
flex-shrink: 0;
}
Gridを使う
Gridを使うと、Flexboxのようなflex-shrink
の指定が不要になる。
.layout {
display: grid;
grid-auto-flow: column;
overflow-x: auto;
}
まとめ
Flexboxが登場したとき、狂喜乱舞した思い出がある。そのため、「横並びの要素にはdisplay:flex
を使う」という意識が強い。
しかし、現在はFlexboxを代替できるほどの機能を持ったGridが全主要ブラウザで利用できるようになった。もちろん横1列に収めて並べるレイアウトはFlexboxのほうが得意だし、レンダリングのコストもGridに比べて低い(誤差レベルだが)。一概に「FlexboxではなくGridを使え」とは言えないが、個人的には今後はGridを優先して使っていきたい。