ウェブエンジニア問題集

レイアウトユーティリティ — FlexboxとGrid

TailwindのFlexbox・Gridユーティリティを使うと、横並びや複雑なレイアウトをHTMLだけで素早く組めます。

学習者学習者

レイアウトって flexgrid どっちを使えばいいの?いつも何となくで選んじゃう…。

先生先生

ざっくり「1方向(横一列・縦一列)の並びは flex、行と列の2次元レイアウトは grid」が目安。まずはこの章で両方の基本を押さえよう。

Tailwindでレイアウトを設計しているイメージ

Flexbox

flex クラスで Flexbox コンテナになります。

<!-- 基本の横並び -->
<div class="flex gap-4">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>
 
<!-- 両端に配置 -->
<div class="flex justify-between items-center">
  <span>ロゴ</span>
  <nav>メニュー</nav>
</div>
 
<!-- 中央揃え -->
<div class="flex justify-center items-center h-screen">
  <p>画面中央</p>
</div>

よく使うFlexクラス一覧

クラスCSS
flexdisplay: flex
flex-colflex-direction: column
flex-wrapflex-wrap: wrap
items-centeralign-items: center
items-startalign-items: flex-start
justify-centerjustify-content: center
justify-betweenjustify-content: space-between
justify-endjustify-content: flex-end
gap-4gap: 1rem
flex-1flex: 1 1 0%
flex-noneflex: none
growflex-grow: 1
shrink-0flex-shrink: 0

CSS Grid

grid クラスでGridコンテナになります。

<!-- 3列グリッド -->
<div class="grid grid-cols-3 gap-6">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
 
<!-- レスポンシブグリッド -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
  <!-- カード -->
</div>
 
<!-- 2列、左が固定・右が可変 -->
<div class="grid grid-cols-[240px_1fr] gap-6">
  <aside>サイドバー</aside>
  <main>メインコンテンツ</main>
</div>

よく使うGridクラス一覧

クラスCSS
griddisplay: grid
grid-cols-3grid-template-columns: repeat(3, minmax(0, 1fr))
grid-cols-[240px_1fr]カスタム値(任意の値)
col-span-2grid-column: span 2
col-span-full全幅にまたがる
gap-4gap: 1rem
gap-x-4column-gap: 1rem
gap-y-8row-gap: 2rem

コンテナ

<!-- 最大幅を制限して中央揃え -->
<div class="container mx-auto px-4">
  コンテンツ
</div>

container クラスは各ブレークポイントで max-width を設定します。


position 系

<!-- 固定ヘッダー -->
<header class="fixed top-0 left-0 right-0 z-50 bg-white">
  ナビゲーション
</header>
 
<!-- 親要素に対して絶対配置 -->
<div class="relative">
  <span class="absolute top-2 right-2 text-xs">バッジ</span>
</div>

ちゃんと使うためのポイント

  • flex items-center gap-4 の組み合わせは非常によく使う
  • グリッドのカラム数はブレークポイントと組み合わせてレスポンシブにする
  • 任意の値は grid-cols-[240px_1fr] のように角括弧で指定できる

次の章では、余白(margin・padding)のスペーシングユーティリティを学びます。