六维教程

Tailwind CSS 响应式设计

前两篇讲了 Flexbox 和 Grid 的静态布局。本篇讲响应式设计,让页面在手机、平板、桌面上都好看。Tailwind v4 默认是移动优先策略。

响应式基础

移动优先原则

移动优先的意思是,基础类名只针对小屏幕生效,大屏幕通过断点变体逐步增强。不要先写桌面样式再用 max-* 往回改,那样维护起来很麻烦。

<div class="text-sm md:text-base lg:text-lg">
  文字随屏幕变大
</div>

这里 text-sm 对所有屏幕生效,md:text-base 只在 ≥768px 时覆盖,lg:text-lg 只在 ≥1024px 时覆盖。

断点变体

Tailwind v4 内置这些断点,名称即「在该宽度及以上生效」。

前缀 最小宽度
sm: 640px
md: 768px
lg: 1024px
xl: 1280px
2xl: 1536px

断点变体可以加在几乎所有工具类前面,比如布局、文字、间距。

<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
  <div class="p-4 bg-blue-100">卡片</div>
  <div class="p-4 bg-blue-100">卡片</div>
  <div class="p-4 bg-blue-100">卡片</div>
</div>

约束内容宽度

用 container 类约束内容宽度

container 类是一个开箱即用的布局工具:它会让元素宽度跟随当前断点变化,并在每个断点处取该断点对应的最大宽度,同时水平居中(margin-left/right: auto)。常用它把正文「包」在一个不会过宽的容器里,避免大屏上文字拉得太长。

<div class="container mx-auto px-4">
  <h1>标题</h1>
  <p>正文内容……</p>
</div>

container 在各断点的大致上限是:<576px 满宽受父级约束,sm 640px、md 768px、lg 1024px、xl 1280px、2xl 1536px。配合 mx-auto 居中、px-4 留左右内边距即可。

如果你不想用 container 类,也可以手动写 max-w-3xl mx-auto 这类固定最大宽度,效果类似,只是宽度不会随断点阶梯变化。

在布局中用断点

在布局与间距上用断点

断点不只用于网格,也能改 Flex 方向和间距。

<div class="flex flex-col md:flex-row gap-2 md:gap-6">
  <div class="p-4 bg-green-100">侧栏</div>
  <div class="p-4 bg-green-100">内容</div>
</div>

手机上 flex-col 竖向堆叠,平板上 md:flex-row 改成横向,md:gap-6 同时加大间距。

反向断点

有时需要「只在小于某宽度时生效」,v4 支持 max-* 反向变体。

<div class="max-md:flex-col md:flex-row">
  <div class="p-4 bg-yellow-100">A</div>
  <div class="p-4 bg-yellow-100">B</div>
</div>

max-md:flex-col 表示在小于 md(<768px)时竖向排列,大于等于 md 时由 md:flex-row 接管。两种写法结果一致,按团队习惯选择。

实战:随屏幕变化列数的卡片网格

综合前面知识,做一个从 1 列到 4 列渐变的卡片墙。

<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-4 p-4">
  <div class="p-6 bg-gray-100 rounded">卡片 1</div>
  <div class="p-6 bg-gray-100 rounded">卡片 2</div>
  <div class="p-6 bg-gray-100 rounded">卡片 3</div>
  <div class="p-6 bg-gray-100 rounded">卡片 4</div>
  <div class="p-6 bg-gray-100 rounded">卡片 5</div>
  <div class="p-6 bg-gray-100 rounded">卡片 6</div>
</div>

手机 1 列,≥640px 2 列,≥1024px 3 列,≥1536px 4 列。无需写任何媒体查询,全靠断点变体。

小结

响应式的关键是把基础样式留给小屏,再用 sm:/md:/lg:/xl:/2xl: 逐级增强,必要时用 max-* 反向断点。下一篇讲状态与变体,让元素在交互时改变样式。

上一篇
Tailwind CSS 布局:Grid
下一篇
Tailwind CSS 状态与变体