≪ Today I learned. RSS購読
公開日
タグ
CSS
著者
ダーシノ(@bc_rikko)

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を優先して使っていきたい。