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

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