レスポンシブカラムのゴールをまずイメージする
レスポンシブカラムは、ざっくり言うとこういう動きです。
- スマホ:1カラム(縦一列)
- タブレット:2カラム
- PC:3〜4カラム
「画面幅に応じてカラム数が変わるカード一覧」や「サービス紹介ブロック」でよく使います。
ここでは、CSS と Tailwind CSS での書き方を、“実務でそのまま使えるテンプレート” ベースで解説していきます。
基本パターン1:メディアクエリで 1 → 2 → 3 カラム
CSS版:Grid+メディアクエリの王道パターン
.cards {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
}
/* 768px以上で2カラム */
@media (min-width: 768px) {
.cards {
grid-template-columns: repeat(2, 1fr);
}
}
/* 1024px以上で3カラム */
@media (min-width: 1024px) {
.cards {
grid-template-columns: repeat(3, 1fr);
}
}
CSS<div class="cards">
<div class="card">カード1</div>
<div class="card">カード2</div>
<div class="card">カード3</div>
<div class="card">カード4</div>
</div>
HTMLここでのポイントは、「最初は1カラム」→「画面が広がるごとに列数を増やす」 という発想です。
Grid の grid-template-columns をブレークポイントごとに変えるだけで、カラム数が自然に変化します。
Tailwind版:クラスだけで 1 → 2 → 3 カラム
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div class="bg-white p-4 rounded shadow">カード1</div>
<div class="bg-white p-4 rounded shadow">カード2</div>
<div class="bg-white p-4 rounded shadow">カード3</div>
<div class="bg-white p-4 rounded shadow">カード4</div>
</div>
HTMLgrid-cols-1md:grid-cols-2lg:grid-cols-3
この3つで、「スマホ1・タブレット2・PC3カラム」が完成します。
Tailwind のブレークポイント(デフォルト)
md≒ 768pxlg≒ 1024px
を使っているだけです。
基本パターン2:minmax+auto-fit で「自動でカラム数が変わる」
CSS版:カードの最小幅だけ決めて、あとは自動
.cards-auto {
display: grid;
gap: 16px;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
CSS<div class="cards-auto">
<div class="card">カード1</div>
<div class="card">カード2</div>
<div class="card">カード3</div>
<div class="card">カード4</div>
<div class="card">カード5</div>
</div>
HTMLここでのキモは minmax(220px, 1fr) です。
- 最小幅:220px
- 最大幅:1fr(余りを分け合う)
画面が広いときは 4〜5カラム、
狭くなると 3 → 2 → 1 カラムと、“勝手にいい感じ” に変化します。
Tailwind版:任意値でそのまま書く
<div class="grid gap-4 [grid-template-columns:repeat(auto-fit,minmax(220px,1fr))]">
<div class="bg-white p-4 rounded shadow">カード1</div>
<div class="bg-white p-4 rounded shadow">カード2</div>
<div class="bg-white p-4 rounded shadow">カード3</div>
<div class="bg-white p-4 rounded shadow">カード4</div>
<div class="bg-white p-4 rounded shadow">カード5</div>
</div>
HTMLTailwind には auto-fit 用の専用クラスはないので、[grid-template-columns:...] の「任意値」で書きます。
深掘りポイント
レスポンシブカラムで一番“ラク”なのは、この auto-fit + minmax パターンです。
「カードの最小幅だけ決めて、あとは Grid に任せる」という割り切りができると、一気に楽になります。
Flexboxで作るレスポンシブカラム(シンプル版)
Grid が使えない状況や、もっとシンプルにやりたいときは Flexbox でも作れます。
CSS版:wrap+幅指定
.flex-cards {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.flex-cards > .card {
flex: 1 1 calc(50% - 16px);
}
/* 768px以上で3カラム相当 */
@media (min-width: 768px) {
.flex-cards > .card {
flex: 1 1 calc(33.333% - 16px);
}
}
/* 480px未満では1カラムにしたい場合 */
@media (max-width: 479px) {
.flex-cards > .card {
flex: 1 1 100%;
}
}
CSS<div class="flex-cards">
<div class="card">カード1</div>
<div class="card">カード2</div>
<div class="card">カード3</div>
<div class="card">カード4</div>
</div>
HTMLFlexbox では「幅をパーセントで指定して wrap させる」という発想になります。
ただし、Grid に比べると「縦の揃い方」などは少し制御しづらいです。
Tailwind版:Flex+basis+wrap
<div class="flex flex-wrap gap-4">
<div class="basis-full sm:basis-[calc(50%-0.5rem)] lg:basis-[calc(33.333%-0.5rem)] bg-white p-4 rounded shadow">
カード1
</div>
<div class="basis-full sm:basis-[calc(50%-0.5rem)] lg:basis-[calc(33.333%-0.5rem)] bg-white p-4 rounded shadow">
カード2
</div>
<div class="basis-full sm:basis-[calc(50%-0.5rem)] lg:basis-[calc(33.333%-0.5rem)] bg-white p-4 rounded shadow">
カード3
</div>
</div>
HTML正直、レスポンシブカラムは Tailwind なら Grid を使った方が圧倒的に素直です。
Flex でやるのは「どうしても Grid が使えないとき」くらいでいい。
実戦でよく使うレスポンシブカラムテンプレート
サービス紹介セクション(1 → 2 → 3 カラム)
<section class="max-w-6xl mx-auto px-4 py-12">
<h2 class="text-2xl font-bold mb-8">サービス一覧</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<div class="bg-white p-6 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">サービスA</h3>
<p class="text-sm text-gray-600">説明テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">詳しく見る</button>
</div>
<div class="bg-white p-6 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">サービスB</h3>
<p class="text-sm text-gray-600">説明テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">詳しく見る</button>
</div>
<div class="bg-white p-6 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">サービスC</h3>
<p class="text-sm text-gray-600">説明テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">詳しく見る</button>
</div>
</div>
</section>
HTMLここでは
- 外側のレイアウト:Grid(レスポンシブカラム)
- カードの中身:Flex(縦方向の余白とボタンの下寄せ)
というきれいな役割分担になっています。
ブログカード一覧(minmax+auto-fit)
<section class="max-w-6xl mx-auto px-4 py-12">
<h2 class="text-2xl font-bold mb-8">最新記事</h2>
<div class="grid gap-6 [grid-template-columns:repeat(auto-fit,minmax(260px,1fr))]">
<article class="bg-white p-5 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">記事タイトル1</h3>
<p class="text-sm text-gray-600">概要テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">続きを読む</button>
</article>
<article class="bg-white p-5 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">記事タイトル2</h3>
<p class="text-sm text-gray-600">概要テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">続きを読む</button>
</article>
<article class="bg-white p-5 rounded-xl shadow flex flex-col gap-3">
<h3 class="text-lg font-semibold">記事タイトル3</h3>
<p class="text-sm text-gray-600">概要テキストが入ります。</p>
<button class="mt-auto self-start text-sm text-blue-600">続きを読む</button>
</article>
</div>
</section>
HTMLminmax(260px, 1fr) の「260px」が、
「このカードはこれ以上細くしたくない」という“最低ライン”です。
ここを 220〜300px の間で調整するだけで、
見た目と読みやすさのバランスがかなり変わります。
レスポンシブカラム設計の考え方(ここが一番大事)
1. 「カラム数ベース」で考えるか、「最小幅ベース」で考えるかを決める
カラム数ベース
「スマホ1・タブレット2・PC3」と、
ブレークポイントごとに列数を決めるやり方。
→ grid-cols-1 md:grid-cols-2 lg:grid-cols-3
最小幅ベース
「カードの最小幅だけ決めて、あとは自動で詰める」やり方。
→ repeat(auto-fit, minmax(◯◯px, 1fr))
どちらが正解ではなく、
「デザインの性格」によって使い分けます。
2. スマホの見え方を最優先で決める
レスポンシブ設計は、
「スマホでどう見せたいか」から決めるのが鉄則です。
- 1カラムで縦に読みやすく
- 文字サイズ・行間を十分に
- カードの横幅が細くなりすぎないように
その上で、
「じゃあタブレットでは2カラムにしようか」
「PCでは3カラムに増やそうか」
と足していくイメージです。
3. Tailwind なら「まず grid-cols-1 md:grid-cols-2」から始めていい
迷ったら、最初はこれで十分です。
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
HTML慣れてきたら
lg:grid-cols-3
[grid-template-columns:repeat(auto-fit,minmax(240px,1fr))]
HTMLのように、少しずつ“攻めた”書き方を足していけばOKです。
まとめ
レスポンシブカラムは、
「画面幅に応じてカラム数やカード幅を変える」レイアウトの基礎です。
CSS なら
- Grid+メディアクエリ
repeat(auto-fit, minmax(...))
Tailwind なら
grid-cols-1 md:grid-cols-2 lg:grid-cols-3[grid-template-columns:repeat(auto-fit,minmax(◯◯px,1fr))]
を軸に考えると、かなりスムーズに組めます。


