全部文章

UnoCSS / Tailwind CSS 速查

原子化 CSS 常用类名速查、响应式设计、暗色模式与自定义配置

目录 23 节

UnoCSS / Tailwind CSS 速查

UnoCSSTailwind CSS 都是原子化 CSS 框架,语法高度兼容。

这页适合作为“原子化 CSS 的速查入口”。真正决定项目可维护性的不是类名会不会写,而是是否统一约定:什么时候用原子类、什么时候抽组件、什么时候沉淀成快捷方式。

先选框架还是先定规范

如果项目还没定方向,建议先想清楚下面几件事:

  • 是更看重兼容 Tailwind 生态,还是更看重生成灵活度与体积控制
  • 是否需要 Attributify、图标预设、动态规则等 UnoCSS 特性
  • 团队是否已经有现成的 Tailwind 设计体系
  • 是否允许任意值和随手堆过长类名

项目一旦落地,最好长期坚持一种主方案,避免 UnoCSS 和 Tailwind 思维混用导致维护成本上升。

布局

<!-- Flexbox -->
<div class="flex items-center justify-between gap-4">
  <div class="flex flex-col gap-2">
    <div class="flex-1 flex-shrink-0">
      <!-- Grid -->
      <div class="grid grid-cols-3 gap-4">
        <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
          <div class="col-span-2"></div>
        </div>
      </div>
    </div>
  </div>
</div>

间距

<!-- padding -->
<div class="p-4 px-6 py-2 pt-4 pb-0">
  <!-- margin -->
  <div class="m-4 mx-auto my-2 mt-8 mb-0">
    <div class="-mt-2">
      <!-- 负值 -->

      <!-- gap -->
      <div class="gap-4 gap-x-2 gap-y-6"></div>
    </div>
  </div>
</div>

数值对照:1 = 0.25rem = 4px,4 = 1rem = 16px

尺寸

<div class="w-full h-screen min-h-0 max-w-md">
  <div class="w-48 h-48">
    <!-- 12rem -->
    <div class="w-[300px] h-[50vh]">
      <!-- 任意值 -->
      <div class="size-8"><!-- w-8 h-8 --></div>
    </div>
  </div>
</div>

文字

<p class="text-sm text-gray-500 font-bold leading-relaxed tracking-tight"></p>
<p class="text-lg sm:text-xl lg:text-2xl"></p>
<p class="line-clamp-2 truncate"></p>
<p class="text-center underline uppercase"></p>
类名大小
text-xs0.75rem
text-sm0.875rem
text-base1rem
text-lg1.125rem
text-xl1.25rem
text-2xl1.5rem

颜色

<div class="text-red-500 bg-blue-100 border-gray-200">
  <div class="text-white/80">
    <!-- 80% 透明度 -->
    <div class="bg-black/50"><!-- 半透明黑 --></div>
  </div>
</div>

边框与圆角

<div class="border border-gray-200 rounded-lg">
  <div class="border-2 border-dashed border-blue-500">
    <div class="rounded-full">
      <!-- 圆形 -->
      <div class="rounded-t-lg rounded-b-none"></div>
    </div>
  </div>
</div>

阴影与效果

<div class="shadow-sm shadow-md shadow-lg shadow-xl">
  <div class="opacity-50 blur-sm backdrop-blur-md">
    <div class="ring-2 ring-blue-500 ring-offset-2"></div>
  </div>
</div>

响应式

<!-- 移动优先 -->
<div class="text-sm sm:text-base md:text-lg lg:text-xl">
  <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
    <div class="hidden md:block">
      <!-- 移动端隐藏 -->
      <div class="block md:hidden"><!-- 桌面端隐藏 --></div>
    </div>
  </div>
</div>
前缀最小宽度
sm:640px
md:768px
lg:1024px
xl:1280px
2xl:1536px

推荐使用习惯

  • 布局类、间距类和文本类按固定顺序书写
  • 常见按钮、卡片、标签尽早抽成快捷方式或组件
  • 能用语义化封装时,不要把几十个类长期堆在模板里
  • 任意值只在确实需要时使用,避免到处出现难维护的魔法数字

暗色模式

<div class="bg-white dark:bg-gray-900 text-black dark:text-white">
  <div class="border-gray-200 dark:border-gray-700"></div>
</div>

过渡与动画

<div class="transition-all duration-200 ease-in-out">
  <div class="hover:scale-105 hover:shadow-lg">
    <div class="animate-spin animate-pulse animate-bounce"></div>
  </div>
</div>

状态变体

<button class="hover:bg-blue-600 active:bg-blue-700 focus:ring-2">
<div class="group">
  <span class="group-hover:text-blue-500">
</div>
<li class="first:mt-0 last:mb-0 odd:bg-gray-50">

UnoCSS 特有功能

Attributify 模式

<!-- 传统写法 -->
<div class="text-sm text-red-500 font-bold">
  <!-- Attributify -->
  <div text="sm red-500" font="bold"></div>
</div>

图标(preset-icons)

<span class="i-carbon-sun text-xl" /> <span class="i-mdi-github text-2xl" />

快捷方式

// uno.config.ts
export default defineConfig({
  shortcuts: {
    btn: "px-4 py-2 rounded-lg font-medium transition-colors",
    "btn-primary": "btn bg-blue-500 text-white hover:bg-blue-600",
  },
});

常见问题

类名越写越长,看不懂

通常说明该抽象了。可以优先:

  • shortcuts
  • 抽组件
  • 把重复布局封装成局部模式

为什么样式有时不生效

优先检查:

  • 扫描路径是否覆盖到目标文件
  • 动态拼接类名是否能被正确识别
  • 预设和插件是否启用
  • 暗色模式和响应式前缀是否写对

什么时候不用原子类

当你需要:

  • 复杂交互状态
  • 大段复用样式
  • 强语义组件边界

这时更适合抽组件或写局部样式,而不是无限往模板里堆类名。

延伸阅读

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇TypeScript 实用技巧