【初心者向け】Tailwind CSS Place ContentでFlexbox & Gridレイアウトをマスター


Place Contentの核心概念

Place Contentは、以下の2つの主要なプロパティで構成されています。

  1. place-items: 個々のアイテムの配置と整列を制御します。
  2. place-content: コンテナ全体のコンテンツの配置と整列を制御します。

これらのプロパティは、水平方向と垂直方向の配置を独立して設定できます。

place-itemsは以下の値をサポートします。

  • space-evenly: アイテム間を等間隔に配置します。
  • space-around: アイテム間とコンテナの端に余白を設けます。
  • space-between: アイテム間を均等に配置します。
  • flex-end: Flexboxアイテムをコンテナの末尾に配置します。
  • flex-start: Flexboxアイテムをコンテナの先頭に配置します。
  • baseline: アイテムをベースラインに揃えます。
  • stretch: アイテムをコンテナ全体に伸縮させます。
  • center: アイテムをコンテナの中央に配置します。
  • end: アイテムをコンテナの末尾に配置します。
  • start: アイテムをコンテナの先頭に配置します。

place-contentは以下の値をサポートします。

  • space-evenly: コンテンツ行間を等間隔に配置します。
  • space-around: コンテンツ行間とコンテナの端に余白を設けます。
  • space-between: コンテンツ行間を均等に配置します。
  • stretch: コンテンツをコンテナ全体に伸縮させます。
  • end: コンテンツをコンテナの末尾に配置します。
  • start: コンテンツをコンテナの先頭に配置します。
  • center: コンテンツをコンテナの中央に配置します。

Place Contentの使用方法

Place Contentユーティリティを使用するには、要素に適切なクラスを適用するだけです。例えば、Flexboxコンテナ内のアイテムを中央に配置するには、以下のコードを使用します。

<div class="flex flex-col place-items-center">
  </div>

同様に、Gridコンテナ内のコンテンツを垂直方向に中央揃えするには、以下のコードを使用します。

<div class="grid place-content-center">
  </div>

Place Contentユーティリティは、水平方向と垂直方向の配置を組み合わせることもできます。例えば、Flexboxコンテナ内のアイテムを水平方向に両端に揃え、垂直方向に中央揃えするには、以下のコードを使用します。

<div class="flex flex-col place-items-start place-content-center">
  </div>

Place Contentは、以下のレイアウトを構築するのに役立ちます。

  • アイテム間とコンテナ端に余白を設けたGridコンテナ
  • 垂直方向に伸縮するコンテンツを持つFlexboxコンテナ
  • 両端に揃えられたアイテムを持つGridコンテナ
  • 中央揃えのコンテンツを持つFlexboxコンテナ


Flexboxコンテナ内のアイテムを中央揃えにする

<div class="flex flex-col place-items-center place-content-center">
  <div class="w-24 h-24 bg-gray-200 rounded-md"></div>
  <div class="w-48 h-48 bg-gray-300 rounded-md mt-4"></div>
  <div class="w-72 h-64 bg-gray-400 rounded-md mt-4"></div>
</div>

この例では、Flexboxコンテナと子要素に以下のクラスを適用しています。

  • place-content-center: コンテンツを垂直方向に中央揃えにします。
  • place-items-center: アイテムを水平方向に中央揃えにします。
  • flex-col: アイテムを垂直方向に並べます。
  • flex: Flexboxレイアウトを有効にします。

Gridコンテナ内のコンテンツを両端に揃える

<div class="grid grid-cols-3 gap-4 place-content-start">
  <div class="bg-gray-200 rounded-md"></div>
  <div class="bg-gray-300 rounded-md"></div>
  <div class="bg-gray-400 rounded-md"></div>
</div>

この例では、Gridコンテナと子要素に以下のクラスを適用しています。

  • place-content-start: コンテンツを水平方向に両端に揃えます。
  • gap-4: アイテム間の余白を4pxに設定します。
  • grid-cols-3: コンテナを3列に分割します。
  • grid: Gridレイアウトを有効にします。

Flexboxコンテナ内のコンテンツを垂直方向に伸縮させる

<div class="flex flex-col place-items-center place-content-stretch">
  <div class="flex-grow h-24 bg-gray-200 rounded-md"></div>
  <div class="flex-grow h-48 bg-gray-300 rounded-md mt-4"></div>
  <div class="flex-grow h-64 bg-gray-400 rounded-md mt-4"></div>
</div>
  • flex-grow: 余分なスペースを均等に子要素に分配します。
  • place-content-stretch: コンテンツを垂直方向に伸縮させます。
  • place-items-center: アイテムを水平方向に中央揃えにします。
  • flex-col: アイテムを垂直方向に並べます。
  • flex: Flexboxレイアウトを有効にします。

アイテム間とコンテナ端に余白を設けたGridコンテナ

<div class="grid grid-cols-4 gap-4 place-content-around">
  <div class="bg-gray-200 rounded-md"></div>
  <div class="bg-gray-300 rounded-md"></div>
  <div class="bg-gray-400 rounded-md"></div>
  <div class="bg-gray-500 rounded-md"></div>
</div>
  • place-content-around: コンテンツ行間とコンテナの端に余白を設けます。
  • gap-4: アイテム間の余白を4pxに設定します。
  • grid-cols-4: コンテナを4列に分割します。
  • grid: Gridレイアウトを有効にします。


Flexboxレイアウトのjustify-contentとalign-itemsプロパティ

長所

  • 垂直方向と水平方向の配置を個別に設定できます。
  • Place Contentよりも詳細な制御を提供します。
  • ネイティブのCSSプロパティなので、幅広いブラウザでサポートされています。

短所

  • 冗長なコードになる可能性があります。
  • Tailwind CSSほど直感的ではない可能性があります。

例:

<div class="flex flex-col justify-content-center align-items-center">
  <div class="w-24 h-24 bg-gray-200 rounded-md"></div>
  <div class="w-48 h-48 bg-gray-300 rounded-md mt-4"></div>
  <div class="w-72 h-64 bg-gray-400 rounded-md mt-4"></div>
</div>

Gridレイアウトのjustify-itemsとalign-itemsプロパティ

長所

  • 垂直方向と水平方向の配置を個別に設定できます。
  • Place Contentよりも詳細な制御を提供します。
  • ネイティブのCSSプロパティなので、幅広いブラウザでサポートされています。

短所

  • 冗長なコードになる可能性があります。
  • Tailwind CSSほど直感的ではない可能性があります。
<div class="grid grid-cols-3 gap-4 justify-items-start align-items-center">
  <div class="bg-gray-200 rounded-md"></div>
  <div class="bg-gray-300 rounded-md"></div>
  <div class="bg-gray-400 rounded-md"></div>
</div>

絶対配置

長所

  • 複雑なレイアウトを構築するのに役立ちます。
  • 非常に柔軟な配置オプションを提供します。

短所

  • レスポンシブデザインに対応するのが難しい場合があります。
  • 保守が難しくなる可能性があります。
  • コードが煩雑になる可能性があります。
<div class="relative">
  <div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-24 h-24 bg-gray-200 rounded-md"></div>
  <div class="absolute top-3/4 left-1/4 -translate-x-1/2 -translate-y-1/2 w-48 h-48 bg-gray-300 rounded-md"></div>
  <div class="absolute bottom-1/4 right-1/4 -translate-x-1/2 -translate-y-1/2 w-72 h-64 bg-gray-400 rounded-md"></div>
</div>

marginとpaddingプロパティ

長所

  • 基本的なレイアウトに適しています。
  • シンプルで分かりやすい構文です。

短所

  • レスポンシブデザインに対応するのが難しい場合があります。
  • 複雑なレイアウトには適していません。
<div class="flex flex-col">
  <div class="w-24 h-24 bg-gray-200 rounded-md m-auto"></div>
  <div class="w-48 h-48 bg-gray-300 rounded-md mt-4"></div>
  <div class="w-72 h-64 bg-gray-400 rounded-md mt-4"></div>
</div>

カスタムユーティリティ

長所

  • 独自のレイアウト要件に合わせたユーティリティを作成できます。
  • Place Contentの機能を拡張できます。
  • ユーティリティを保守するのが難しくなる可能性があります。
  • コードが増加します。
.place-center-x {
  justify-content: center;
}

.place-center-y {
  align-items: center;