过渡和动画

Tailwind CSS 提供了丰富的过渡和动画功能,帮助你创建流畅、自然的界面交互。

过渡基础

过渡是元素从一种状态平滑变化到另一种状态的方式。Tailwind 提供了简单的类来控制过渡效果。

基础过渡属性

悬停查看效果

默认过渡效果

transition

默认应用于颜色、背景色、阴影和不透明度等属性

悬停查看效果

颜色过渡

transition-colors

仅应用于颜色相关的属性变化

悬停查看效果

不透明度过渡

transition-opacity

仅控制不透明度的变化

悬停查看效果

变换过渡

transition-transform

仅应用于变换属性

悬停查看效果

所有属性过渡

transition-all

应用于所有可动画的CSS属性

悬停查看效果

无过渡效果

transition-none

禁用所有过渡效果,变化会立即生效

实际应用场景

按钮悬停效果

导航链接

卡片标题

悬停时背景色和阴影平滑过渡

卡片悬停

过渡属性使用技巧

  • • 使用transition-colors类用于按钮、链接、标签等颜色变化元素,性能较好
  • • 使用transition-transform类用于变换效果,如缩放、旋转等,通常比过渡颜色更流畅
  • • 避免在大量元素上使用transition-all,可能会导致性能问题,尽量只过渡需要的属性
  • • 结合duration-*类控制过渡的持续时间,找到适合的速度
  • • 对于复杂的交互,可以组合多种过渡属性和变换,但要注意保持视觉的一致性
  • • 任何能用CSS动画的属性都可以过渡,如宽度、高度、位置、阴影、透明度等

过渡持续时间

控制过渡的持续时间能够创造出不同的感受 - 从快速响应到优雅缓慢的变化。

持续时间预览

duration-7575ms

超快速过渡,几乎瞬间

duration-100100ms

快速过渡,适合微小变化

duration-150150ms

较快过渡,适合按钮反馈等

duration-200200ms

中速过渡,常用默认值

duration-300300ms

较慢过渡,适合较大变化

duration-500500ms

慢速过渡,适合强调变化

duration-700700ms

非常慢的过渡,特殊场景使用

duration-10001000ms

一秒过渡,明显的动画效果

实际应用场景

按钮悬浮效果 (duration-150)

按钮悬浮效果应该快速响应,让用户感觉界面灵敏但不突兀。

卡片悬浮效果 (duration-300)

悬浮查看效果

卡片等较大元素的过渡应该较慢,让用户能够注意到变化但不显得突兀。

展开效果 (duration-500)

点击展开内容

较复杂的界面变化(如展开、折叠)需要较长的过渡时间,让用户能够理解变化过程。

内容展开和折叠应该有适当的时间,避免内容突然出现和消失。

持续时间选择指南

75-150ms: 适用于微小变化,如按钮状态、图标切换等快速反馈。

200-300ms: 适用于大多数常见交互,如悬浮效果、颜色变化等。这是一个平衡的选择,既不会太快让用户错过,也不会太慢让用户等待。

500-700ms: 适用于更明显的动画,如展开面板、滑入内容等。让用户有时间理解发生了什么变化。

1000ms+: 应谨慎使用,主要用于特殊效果或强调重要变化。太长的动画可能会降低界面的响应感。

过渡时间函数

时间函数控制过渡的加速和减速方式,影响过渡的感觉和自然度。

时间函数预览

ease-linearlinear

线性过渡,整个过程速度相同

ease-incubic-bezier(0.4, 0, 1, 1)

缓入过渡,开始慢然后加速

ease-outcubic-bezier(0, 0, 0.2, 1)

缓出过渡,开始快然后减速

ease-in-outcubic-bezier(0.4, 0, 0.2, 1)

缓入缓出过渡,开始和结束慢,中间快

实际应用场景

按钮动效 (ease-out)

按钮使用ease-out可以让变化更自然,结束时的减速效果更符合用户预期。

菜单展开 (ease-out)

选项 1
选项 2
选项 3

菜单展开使用ease-out让菜单出现更自然,降低视觉冲击感。

加载动画 (ease-in-out)

循环动画通常使用ease-in-out,让动画看起来更平滑自然。

时间函数选择指南

ease-linear: 适用于进度条、倒计时等需要均匀变化的场景,或者非常短暂的过渡效果。

ease-in: 适用于元素离开屏幕或消失的效果,如关闭对话框、元素淡出等。给人一种"加速离开"的感觉。

ease-out: 适用于元素进入屏幕或出现的效果,如打开对话框、元素淡入等。给人一种"减速到达"的自然感。

ease-in-out: 适用于往返运动、循环动画或复杂交互,如幻灯片切换、页面转场等。这是最接近自然运动的时间函数。

动画的物理学原理

现实世界中的物体不会立即启动或停止,它们需要时间加速和减速。优秀的数字界面动画模拟这种自然行为,使用恰当的时间函数可以让界面感觉更自然、更符合用户的预期。遵循这一原则,大多数情况下应该使用ease-out或ease-in-out,而不是线性过渡。

过渡延迟

延迟控制过渡开始的时间,可用于创建序列动画和错开多个元素的变化时间。

延迟预览

delay-7575ms

最短延迟,几乎立即开始

delay-100100ms

短延迟,用于微小的时间差

delay-150150ms

适中延迟,用于轻微错开元素

delay-200200ms

中等延迟,效果可以明显察觉

delay-300300ms

较长延迟,适合次要元素

delay-500500ms

长延迟,明显的等待时间

delay-700700ms

很长延迟,用于特殊效果

delay-10001000ms

最长延迟,一秒后才开始过渡

实际应用场景

序列动画

悬停查看序列动画效果
(每个圆点有不同的延迟)

加载指示器

通过不同的延迟创建顺序加载动画,提高视觉趣味性

级联菜单项

菜单项 1
菜单项 2
菜单项 3
菜单项 4

悬停在各个菜单项上,注意颜色变化的级联效果

延迟使用指南

错开时间: 延迟可以在多个元素之间创建错开的动画效果,使界面变化更加生动。

建立层次感: 主要元素可以先出现,次要元素可以稍后出现,帮助用户理解内容的层次结构。

减轻视觉负担: 当多个元素同时变化时,可能会造成视觉混乱,使用延迟可以减轻这种情况。

注意点: 过长的延迟可能会让用户感到界面反应迟缓,延迟时间应根据元素重要性和过渡持续时间来平衡。

创意使用案例

波纹效果: 结合不同的延迟和缩放/透明度变化,可以创建从中心向外扩散的波纹效果。

打字效果: 为文本中的每个字母设置逐渐增加的延迟,可以模拟打字机效果。

故事板动画: 在页面滚动时,使用延迟让不同元素按顺序出现,创建故事板效果。

注意力引导: 通过延迟突出显示界面的不同部分,可以引导用户按特定顺序查看内容。

过渡属性控制

Tailwind CSS提供了控制哪些CSS属性应该过渡的工具类,帮助你优化性能并创建精确的效果。

过渡属性概览

Tailwind CSS 允许你指定哪些 CSS 属性应该过渡,从而优化性能和创建精确的效果。 默认的 transition 类等同于 transition-all,会对所有可过渡的属性应用过渡效果。

transition-none

无过渡效果

无过渡

悬停查看效果区别

transition-all

所有属性过渡

所有属性

悬停查看效果区别

transition-colors

仅颜色相关过渡

仅颜色

悬停查看效果区别

transition-opacity

仅透明度过渡

仅透明度

悬停查看效果区别

transition-shadow

仅阴影过渡

仅阴影

悬停查看效果区别

transition-transform

仅变换过渡

仅变换

悬停查看效果区别

性能考量

不同的过渡属性对性能的影响各不相同。一般来说,对变换和透明度的过渡性能最佳,而对所有属性的过渡可能会导致性能问题。

过渡属性性能对比

低性能:transition-all

所有属性过渡可能导致性能问题

中等性能:transition-colors, transition-shadow

颜色和阴影过渡性能适中

高性能:transition-transform, transition-opacity

变换和透明度过渡性能最佳

实际使用案例

为特定组件选择正确的过渡属性可以提高用户体验和性能。以下是一些常见用例和推荐的过渡属性。

按钮反馈

按钮仅需颜色过渡,使用transition-colors即可

卡片悬停

卡片标题

卡片内容描述

卡片悬停效果只需阴影过渡,使用transition-shadow

导航菜单项

菜单项

下划线动画仅需变换属性,使用transition-transform

最佳实践

  • 明确指定过渡属性: 避免使用transition-all,始终明确指定你想要过渡的属性。
  • 优先使用高性能属性: transform和opacity是最适合动画的属性,应该尽可能使用它们。
  • 使用 transform-gpu: 添加transform-gpu类可以启用GPU加速,进一步提高变换过渡的性能。
  • 避免过渡位置属性: 尽量避免对top、left、right、bottom等属性进行过渡,因为它们会触发布局重新计算。
  • 考虑移动设备: 在移动设备上,过渡效果可能会降低性能,因此更要谨慎选择过渡属性。

动画

Tailwind CSS 提供了一系列预设的动画,用于创建常见的UI动效,如加载指示器、通知提示等。

内置动画

Tailwind CSS 提供了四种内置动画,可以通过简单的类名应用。这些动画可以满足常见的UI动画需求。

animate-spin

旋转动画,通常用于加载指示器

animate-ping

缩放淡出动画,适用于提示新的通知

animate-pulse

脉冲动画,适用于加载状态的占位符

animate-bounce

弹跳动画,适用于吸引向下滚动的注意力

实际应用场景

动画在用户界面中的实际应用,提供视觉反馈和增强用户体验。

加载状态

在内容加载期间显示动画,提供视觉反馈并增加用户耐心

正在加载数据...

通知指示器

用于引起用户对新消息或通知的注意

内容占位符

在内容加载时显示脉冲占位符,减少感知等待时间

自定义动画指南

除了内置动画,Tailwind CSS还允许通过配置文件定义自定义动画。以下是如何创建自己的动画:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      keyframes: {
        wiggle: {
          '0%, 100%': { transform: 'rotate(-3deg)' },
          '50%': { transform: 'rotate(3deg)' },
        }
      },
      animation: {
        wiggle: 'wiggle 1s ease-in-out infinite',
      }
    },
  },
}

然后你可以在HTML中使用animate-wiggle类来应用这个自定义动画。

动画与可访问性

动画可以增强用户体验,但对于一些用户(如有前庭功能障碍或注意力障碍的人)可能会引起不适。为了确保良好的可访问性:

  • 避免使用大幅闪烁或高对比度的动画
  • 为重复性动画提供暂停或停止的选项
  • 使用prefers-reduced-motion媒体查询来尊重用户偏好
  • 在Tailwind中,可以使用motion-safe:motion-reduce:变体
<div className="animate-spin motion-reduce:animate-none">...</div>

动画设计提示

明确目的:只在有意义的地方使用动画,让它们服务于用户体验而不仅仅是装饰。

保持简洁:微妙的动画通常比夸张的动画更有效,避免过度使用可能分散用户注意力的动画。

考虑性能:动画可能会影响性能,特别是在移动设备上。优先使用transforms和opacity属性,它们的性能通常更好。

注重一致性:在整个界面中保持动画风格的一致性,创建连贯的体验。

动效设计提示与最佳实践

1. 目的性

每个动效都应该有明确的目的,比如引导用户注意力、提供反馈或创造愉悦的体验。 避免为了动效而动效,确保它们增强而不是分散用户体验。

2. 一致性

在整个应用中保持动效风格的一致性。相似的元素应该有相似的动效,这有助于建立用户心智模型。

3. 微妙与克制

通常情况下,最好的动效是微妙的。过于夸张或持续时间过长的动效可能会让用户感到疲劳或不耐烦。 对于频繁发生的交互,动效应该更短更克制。

4. 性能考量

尽量使用对性能影响较小的属性进行动画,如transform和opacity。 避免频繁触发布局重绘的属性,如width、height、top、left等。

5. 可访问性

记住"prefers-reduced-motion"媒体查询,为那些可能对动效敏感或偏好减少动效的用户提供替代选项。 在Tailwind中可以使用motion-safe:motion-reduce:前缀来实现。

更多内容即将添加

我们正在开发更多关于 Tailwind CSS 动画的内容,包括:

  • 关键帧动画
  • 动画迭代
  • 高级动画技巧