CSS 过渡
盒阴影给了你平静的深度。过渡给你平静的随时间变化:按钮悬停时背景变柔和,卡片获焦时略微抬起,链接颜色是滑动而不是猛跳。你仍然写两个状态——浏览器在你设定的时长内在其间插值。
过渡是什么
过渡不会独自发明新外观。它监视已经在变的属性(常见于 :hover、:focus-visible 或类名),并把这次变化做成动画。没有过渡就是瞬间跳变;有了过渡,你会得到一段短而可读的滑动。
四个完整写法是 transition-property、transition-duration、transition-timing-function 和 transition-delay。日常工作多用简写 transition。
属性与时长
写明哪些属性可以动、变化要花多久。时长是时间值(0.2s、200ms)。短而有目的胜过戏剧性等待——界面反馈常见在 150ms–300ms 左右。
.btn {
background: #2563eb;
color: #fff;
border: none;
padding: 0.75rem 1.25rem;
border-radius: 0.5rem;
transition-property: background-color, color;
transition-duration: 0.2s;
}
.btn:hover {
background: #1d4ed8;
color: #f8fafc;
}
把过渡写在基础规则上,这样进入和离开悬停状态都会有动画。只列出你真正想动的属性——否则意外的布局跳动也会滑上半秒。
缓动与延迟
transition-timing-function 塑造速度曲线:ease(默认手感)、linear、ease-in、ease-out、ease-in-out,或自定义 cubic-bezier(...)。transition-delay 在变化开始前等待——适合错开菜单,但在单个按钮上很容易用过。
.fade-panel {
opacity: 0.65;
transition: opacity 0.35s ease-out;
}
.fade-panel.is-bright {
opacity: 1;
}
.meter-bar {
width: 40%;
transition: width 0.4s linear;
}
.meter-bar.is-full {
width: 100%;
}
界面出现时,ease-out 往往更自然。Linear 适合应读成匀速的进度。把延迟留给有意的序列——不要让每次点击都显得迟钝。
简写与多属性运动
简写里常见顺序是:属性、时长、缓动函数、延迟。可用逗号列出多条过渡。优先选择对绘制友好的属性——transform 与 opacity 通常比动画化 width、height、top 或 margin 更顺滑。
.card-lift {
background: #fff;
border-radius: 0.75rem;
box-shadow: 0 0.25rem 0.75rem rgba(15, 23, 42, 0.08);
transition:
transform 0.2s ease,
box-shadow 0.2s ease;
}
.card-lift:hover,
.card-lift:focus-visible {
transform: translateY(-0.25rem);
box-shadow: 0 0.75rem 1.5rem rgba(15, 23, 42, 0.14);
}
这里,上一课的深度与运动相遇:阴影与抬起共享同一个悬停瞬间。位移保持小幅,页面才会仍显得稳固。
减少动效,以及何时用动画
有些人偏好更少运动。尊重 prefers-reduced-motion: reduce,缩短或关闭非必要过渡。过渡擅长 A → B 状态变化。循环或多步叙事属于后面的 CSS 动画(@keyframes)——在 Transforms 之后。
自己试试
- 给按钮加
0.2s背景过渡并悬停——再把transition从:hover挪到基础规则,比较离开悬停的表现。 - 用类切换以
ease-out动画化面板的opacity;再试linear并体会手感。 - 在卡片悬停上组合
transform: translateY(...)与更柔的box-shadow(两个属性,一条简写列表)。 - 在 DevTools 中模拟
prefers-reduced-motion: reduce,确认非必要动效会退让。 - 本练习先不要为打开菜单动画化
height——那种模式留给之后。
常见错误
- 写
transition: all 1s,让每个属性(含布局)都滑整整一秒 - 多秒时长让界面显得迟钝
- 在
transform或opacity就够用时仍动画化width/top/margin - 忽略
prefers-reduced-motion - 指望过渡无限循环——那是动画的领域
小结
- 过渡在一段时长内平滑两个状态之间的属性变化
- 控制属性、时长、缓动与延迟(或使用
transition简写) - 优先对绘制友好的属性做短运动;把过渡写在基础规则上
- 尊重减少动效偏好;循环与复杂序列用关键帧动画
- Effects & Motion 下一课:Transforms
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部