首页 / Tailwind CSS 入门教程 / 过渡效果

Tailwind CSS 入门教程

过渡效果

本教程共 50 篇 · 第 35 篇 · 更新于 2026-07-29 · 约 6 分钟阅读

Tailwind CSSTailwind CSS 入门教程过渡效果transition动画durationtiming-function

35. 过渡效果

本节目标:掌握 Tailwind CSS 中过渡效果的核心工具类,学会控制元素状态切换时的平滑动画,让界面交互不再生硬。

按钮悬停时颜色慢慢变、菜单展开时宽度逐渐增加——这些”不跳变”的效果,都是过渡在起作用。没有过渡的界面,就像没有缓冲的汽车,一顿一顿的。

基础过渡属性

Tailwind 提供了几个工具类来控制哪些 CSS 属性需要过渡:

<!-- 默认过渡:颜色、背景色、阴影、透明度等 -->
<button class="bg-blue-500 hover:bg-blue-700 transition">
  默认过渡
</button>

<!-- 仅过渡颜色相关属性 -->
<button class="bg-blue-500 hover:bg-blue-700 transition-colors">
  颜色过渡
</button>

<!-- 仅过渡透明度 -->
<div class="opacity-100 hover:opacity-50 transition-opacity">
  透明度过渡
</div>

<!-- 仅过渡变换 -->
<div class="scale-100 hover:scale-110 transition-transform">
  变换过渡
</div>

<!-- 仅过渡阴影 -->
<div class="shadow-md hover:shadow-xl transition-shadow">
  阴影过渡
</div>

<!-- 所有属性都过渡(慎用) -->
<div class="w-20 hover:w-40 transition-all">
  全部过渡
</div>

<!-- 禁用过渡 -->
<div class="transition-none">
  无过渡
</div>
Tip

尽量明确指定过渡属性,避免使用 transition-all。过渡范围越精确,浏览器优化空间越大,性能越好。

过渡持续时间

持续时间决定过渡动画的快慢。Tailwind 提供从 75ms 到 1000ms 的预设值:

<!-- 75ms - 超快,几乎瞬间完成 -->
<div class="transition duration-75">75ms</div>

<!-- 150ms - 快速反馈,适合按钮 -->
<div class="transition duration-150">150ms</div>

<!-- 300ms - 中等速度,适合大多数场景 -->
<div class="transition duration-300">300ms</div>

<!-- 500ms - 较慢,适合大面积变化 -->
<div class="transition duration-500">500ms</div>

<!-- 1000ms - 一秒,明显的动画效果 -->
<div class="transition duration-1000">1000ms</div>

实际使用中的选择建议:

  • 75-150ms:按钮状态、图标切换等需要快速反馈的场景
  • 200-300ms:悬停效果、颜色变化等常见交互
  • 500-700ms:展开面板、滑入内容等较大变化
  • 1000ms+:特殊效果,谨慎使用,容易让用户觉得界面迟钝

过渡时间函数

时间函数控制过渡的加速和减速方式,影响动画的”手感”:

<!-- 线性:整个过程速度一致 -->
<div class="transition duration-300 ease-linear">linear</div>

<!-- 缓入:开始慢,然后加速(适合元素离开) -->
<div class="transition duration-300 ease-in">ease-in</div>

<!-- 缓出:开始快,然后减速(适合元素进入) -->
<div class="transition duration-300 ease-out">ease-out</div>

<!-- 缓入缓出:两头慢中间快(最自然) -->
<div class="transition duration-300 ease-in-out">ease-in-out</div>

现实世界中物体不会瞬间启动或停止,它们需要时间加速和减速。所以大多数情况下,ease-outease-in-out 比线性过渡更自然。

Note

ease-out 适合元素出现的场景(如打开弹窗),ease-in 适合元素消失的场景(如关闭弹窗),ease-in-out 适合往返运动。

过渡延迟

延迟控制过渡何时开始,可以用来创建序列动画:

<!-- 无延迟 -->
<div class="transition delay-0">立即开始</div>

<!-- 150ms 延迟 -->
<div class="transition delay-150">延迟 150ms</div>

<!-- 300ms 延迟 -->
<div class="transition delay-300">延迟 300ms</div>

<!-- 1000ms 延迟 -->
<div class="transition delay-1000">延迟 1s</div>

序列动画的常见用法——让多个元素依次出现:

<div class="flex gap-2">
  <div class="w-8 h-8 bg-blue-500 rounded-full transition-all duration-300 scale-0 group-hover:scale-100 delay-0"></div>
  <div class="w-8 h-8 bg-blue-500 rounded-full transition-all duration-300 scale-0 group-hover:scale-100 delay-75"></div>
  <div class="w-8 h-8 bg-blue-500 rounded-full transition-all duration-300 scale-0 group-hover:scale-100 delay-150"></div>
  <div class="w-8 h-8 bg-blue-500 rounded-full transition-all duration-300 scale-0 group-hover:scale-100 delay-225"></div>
  <div class="w-8 h-8 bg-blue-500 rounded-full transition-all duration-300 scale-0 group-hover:scale-100 delay-300"></div>
</div>
Warning

过长的延迟会让用户觉得界面反应迟钝。延迟时间一般不超过 300ms,除非你在刻意制造特殊效果。

组合使用

实际项目中,这些工具类通常组合使用:

<!-- 按钮悬停:颜色快速过渡 -->
<button class="bg-blue-500 text-white px-4 py-2 rounded-lg
               transition-colors duration-150 ease-out
               hover:bg-blue-600">
  提交
</button>

<!-- 卡片悬停:阴影和位移缓慢过渡 -->
<div class="p-6 rounded-xl shadow-md
            transition-all duration-300 ease-in-out
            hover:shadow-xl hover:-translate-y-1">
  <h3>卡片标题</h3>
  <p>卡片内容</p>
</div>

<!-- 菜单展开:高度和透明度过渡 -->
<div class="overflow-hidden opacity-0 max-h-0
            transition-all duration-500 ease-out
            group-hover:opacity-100 group-hover:max-h-96">
  展开的内容
</div>

性能考量

不是所有属性都适合过渡。浏览器处理不同属性的成本差异很大:

  • 高性能transformopacity——GPU 加速,最流畅
  • 中等性能colorbackground-colorbox-shadow
  • 低性能widthheighttopleft——触发布局重绘

能用 transform 实现的动画,就不要用位置属性。比如让一个元素从左侧滑入,用 translate-x 比用 left 性能好得多。

<!-- 推荐:使用 transform -->
<div class="transition-transform duration-300 -translate-x-full group-hover:translate-x-0">
  滑入内容
</div>

<!-- 不推荐:使用 left -->
<div class="relative left-0 transition-all duration-300 hover:left-4">
  滑入内容
</div>
Tip

需要 GPU 加速时,可以添加 transform-gpu 类,它会在变换时启用硬件加速。