从自定义 CSS 迁移到 Tailwind CSS 是现代前端开发中最常见的重构任务之一。无论是改造遗留样式表、将 Figma 设计稿转换为代码,还是引入第三方组件,掌握 CSS 属性到 Tailwind 工具类的映射关系能节省大量时间。

在线 CSS 转 Tailwind 工具 →

Tailwind CSS 的工作原理

Tailwind 是一个”工具优先”的 CSS 框架。与传统的 .card.hero-section 这类语义化类名不同,Tailwind 让你直接在 HTML 中组合单一用途的工具类:

<!-- 传统 CSS 方式 -->
<div class="card">...</div>

<!-- Tailwind 方式 -->
<div class="rounded-lg shadow-md p-6 bg-white border border-gray-200">...</div>

每个工具类对应一条(或少数几条)CSS 声明。Tailwind 的构建过程会扫描你的代码,只生成实际用到的 CSS,最终产物非常精简。

核心 CSS 属性映射

间距(margin、padding)

Tailwind 使用数字刻度,默认 1 = 4px(0.25rem):

CSSTailwind
margin: 0m-0
margin: 1remm-4
margin: 2remm-8
margin-top: 1.5remmt-6
margin-left: automl-auto
padding: 0.5remp-2
padding: 1.25remp-5
padding-left: 2rempl-8
padding-top: 0; padding-bottom: 0py-0
padding-left: 1rem; padding-right: 1rempx-4

规律:m = margin,p = padding,t/r/b/l = 上/右/下/左,x = 水平,y = 垂直。

尺寸(width、height)

CSSTailwind
width: 100%w-full
width: 50%w-1/2
width: 100vww-screen
width: autow-auto
width: 2remw-8
max-width: 64remmax-w-4xl
height: 100%h-full
height: 100vhh-screen
min-height: 100vhmin-h-screen

排版

CSSTailwind
font-size: 0.875remtext-sm
font-size: 1remtext-base
font-size: 1.25remtext-xl
font-size: 2.25remtext-4xl
font-weight: 400font-normal
font-weight: 600font-semibold
font-weight: 700font-bold
line-height: 1.5leading-normal
line-height: 2leading-loose
text-align: centertext-center
text-decoration: underlineunderline
text-transform: uppercaseuppercase
letter-spacing: 0.05emtracking-wide
color: #6b7280text-gray-500

颜色

Tailwind 内置了色板,每种颜色有从 50(最浅)到 950(最深)的色阶:

/* CSS */
color: #3b82f6;
background-color: #f3f4f6;
border-color: #e5e7eb;
<!-- Tailwind -->
<div class="text-blue-500 bg-gray-100 border-gray-200">...</div>

常用颜色对照:

CSS 值Tailwind 类
#ffffffbg-white / text-white
#000000bg-black / text-black
#3b82f6text-blue-500
#ef4444text-red-500
#22c55etext-green-500
#f59e0btext-amber-500
#8b5cf6text-violet-500
transparentbg-transparent

显示与定位

CSSTailwind
display: blockblock
display: inlineinline
display: inline-blockinline-block
display: flexflex
display: inline-flexinline-flex
display: gridgrid
display: nonehidden
position: relativerelative
position: absoluteabsolute
position: fixedfixed
position: stickysticky
top: 0top-0
z-index: 10z-10
overflow: hiddenoverflow-hidden
overflow: autooverflow-auto

Flexbox

CSSTailwind
flex-direction: rowflex-row
flex-direction: columnflex-col
justify-content: centerjustify-center
justify-content: space-betweenjustify-between
justify-content: flex-endjustify-end
align-items: centeritems-center
align-items: flex-startitems-start
flex-wrap: wrapflex-wrap
gap: 1remgap-4
flex: 1flex-1
flex: noneflex-none

Grid

CSSTailwind
grid-template-columns: repeat(3, 1fr)grid-cols-3
grid-template-columns: repeat(12, 1fr)grid-cols-12
grid-column: span 2col-span-2
grid-column: 1 / -1col-span-full
gap: 1.5remgap-6
row-gap: 1remgap-y-4
column-gap: 2remgap-x-8

边框与圆角

CSSTailwind
border: 1px solidborder
border: 2px solidborder-2
border-top: 1px solidborder-t
border-color: #e5e7ebborder-gray-200
border-radius: 0.25remrounded
border-radius: 0.5remrounded-lg
border-radius: 9999pxrounded-full
border-radius: 0rounded-none

阴影与透明度

CSSTailwind
box-shadow: 0 1px 3px rgba(0,0,0,0.12)shadow-sm
box-shadow: 0 4px 6px rgba(0,0,0,0.1)shadow-md
box-shadow: 0 10px 15px rgba(0,0,0,0.1)shadow-lg
box-shadow: noneshadow-none
opacity: 0.5opacity-50
opacity: 0.75opacity-75

任意值(Arbitrary Values)

当设计稿中有不在 Tailwind 默认刻度内的值时,使用方括号语法:

/* CSS */
width: 327px;
padding-top: 22px;
color: #1a2b3c;
background: linear-gradient(135deg, #667eea, #764ba2);
<!-- Tailwind 任意值 -->
<div class="w-[327px] pt-[22px] text-[#1a2b3c] bg-[linear-gradient(135deg,#667eea,#764ba2)]">

任意值适用于所有工具类:h-[calc(100vh-4rem)]grid-cols-[1fr_2fr_1fr]translate-x-[-50%]

响应式设计

Tailwind 采用移动端优先的断点前缀:

断点等同于 CSS前缀
移动端(默认)所有宽度(无)
SM@media (min-width: 640px)sm:
MD@media (min-width: 768px)md:
LG@media (min-width: 1024px)lg:
XL@media (min-width: 1280px)xl:

Tailwind v4 说明: 默认断点值不变。自定义断点改为在 CSS 的 @theme 块中定义(--breakpoint-3xl: 1920px;),不再使用 tailwind.config.js

/* CSS 媒体查询 */
.hero { font-size: 1.5rem; }
@media (min-width: 768px) { .hero { font-size: 2.25rem; } }
@media (min-width: 1024px) { .hero { font-size: 3rem; } }
<!-- Tailwind 响应式类 -->
<h1 class="text-2xl md:text-4xl lg:text-5xl">主标题</h1>

状态变体

Tailwind 用前缀处理伪类:

/* CSS */
.btn:hover { background-color: #2563eb; }
.input:focus { outline: 2px solid #3b82f6; }
<!-- Tailwind -->
<button class="bg-blue-600 hover:bg-blue-700 transition-colors">按钮</button>
<input class="focus:ring-2 focus:ring-blue-500 focus:outline-none">

实战转换案例:卡片组件

/* 转换前:自定义 CSS */
.card {
  background-color: #ffffff;
  border-radius: 0.75rem;
  padding: 1.5rem;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.07);
  border: 1px solid #f3f4f6;
}

.card-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: #111827;
  margin-bottom: 0.5rem;
}

.card-body {
  font-size: 0.875rem;
  color: #6b7280;
  line-height: 1.625;
}
<!-- 转换后:Tailwind -->
<div class="bg-white rounded-xl p-6 shadow-md border border-gray-100">
  <h3 class="text-lg font-semibold text-gray-900 mb-2">标题</h3>
  <p class="text-sm text-gray-500 leading-relaxed">正文内容。</p>
</div>

现有项目迁移策略

从组件开始,不要从页面开始:一次转换一个组件,而不是重写整个样式表。这样风险最低,项目始终保持可构建状态。

@apply 过渡:如果你偏好语义化类名但想用 Tailwind 的工具类,@apply 可以在 CSS 类中组合工具类:

.btn-primary {
  @apply inline-flex items-center px-4 py-2 bg-blue-600 text-white
         font-medium rounded-lg hover:bg-blue-700 transition-colors;
}

tailwind.config.js 中扩展主题:对于反复出现的自定义值,不要到处用任意值,而是在配置中统一定义:

module.exports = {
  theme: {
    extend: {
      colors: {
        brand: {
          500: '#1a73e8',
          600: '#1557b0',
        },
      },
      spacing: {
        18: '4.5rem',
        22: '5.5rem',
      },
    },
  },
};

保留原有 CSS 文件:迁移期间不要删除原始 CSS,使用 CSS Modules 或命名空间隔离新旧样式,待迁移完成后再清理。

CSS 转 Tailwind v4:有哪些变化,怎么调整

Tailwind v4 于 2025 年初发布,引入了重新设计的引擎和配置模型。如果你正在使用 v4 项目,或者需要将 CSS 转换为 v4 的工具类,以下是与 v3 的关键差异。

不再使用 tailwind.config.js

v4 将配置从 JavaScript 文件迁移到 CSS:

/* v3:tailwind.config.js */
module.exports = {
  theme: {
    extend: {
      colors: { brand: '#1a73e8' },
      spacing: { 18: '4.5rem' },
    },
  },
};
/* v4:主 CSS 文件 */
@import "tailwindcss";

@theme {
  --color-brand: #1a73e8;
  --spacing-18: 4.5rem;
}

原来的三条 @tailwind 指令(basecomponentsutilities)统一替换为一行 @import "tailwindcss"

CSS 变量设计令牌

v4 中所有主题值(颜色、间距、字号等)都是 CSS 自定义属性,可以直接在自定义样式中引用,无需查找配置文件:

.custom-element {
  background-color: var(--color-blue-500);
  padding: var(--spacing-4);
}

v4 类名变化

部分工具类的默认值发生了偏移——原来的”无后缀”默认变体变得更细微,后缀也随之调整:

v3 类名v4 等效类名变化说明
shadowshadow-sm默认阴影变浅,用 shadow-sm 还原 v3 效果
ringring-3默认描边宽度从 3px 降至 1px,用 ring-3 还原
blurblur-sm与阴影一致,默认模糊程度更轻
drop-shadowdrop-shadow-sm同上

使用官方升级工具迁移

npx @tailwindcss/upgrade

该工具会自动将 tailwind.config.js 转换为 @theme 块,重命名 HTML/JSX 中的废弃类名,并更新 @tailwind 指令。先跑一遍升级工具,再用 CSS 转 Tailwind 工具 处理剩余的自定义 CSS 片段。

在线转换工具

ZeroTool 的 CSS 转 Tailwind 工具可以实时将 CSS 属性块转换为对应的 Tailwind 工具类,直接粘贴 CSS 即可获取结果,无需安装任何工具。

立即使用 CSS 转 Tailwind 工具 →