首都高赛车免安装正式中文版
6.7G · 2025-10-10
在 CSS 中,transition
是用于实现元素样式平滑过渡的属性,能让元素从一种样式状态(如颜色、尺寸、位置等)逐渐变化到另一种状态,避免样式突变带来的生硬感。它是实现基础动画效果的核心工具,广泛用于 hover 交互、状态切换等场景。
transition
核心语法transition
是一个复合属性,可以同时定义过渡的多个参数,语法如下:
css
transition: [过渡属性] [过渡时长] [过渡 timing 函数] [延迟时间];
各参数的含义和规则:
参数 | 说明 | 可选值 / 示例 | 是否必填 |
---|---|---|---|
过渡属性(property) | 指定哪些 CSS 属性需要过渡(如 width 、background ,all 表示所有属性) | width 、background 、all 等 | 否(默认 all ) |
过渡时长(duration) | 过渡效果持续的时间(必须设置,否则无过渡效果) | 0.3s 、500ms (秒 / 毫秒) | 是 |
timing 函数 | 过渡速度的变化曲线(控制动画的 “节奏感”) | ease (默认)、linear 、ease-in 等 | 否 |
延迟时间(delay) | 延迟多久开始过渡 | 0s (默认)、0.5s | 否 |
transition-property
)all
:所有可过渡的属性变化都触发(常用,但性能略差)。width
、height
、background-color
、transform
等(推荐按需指定,优化性能)。display
(无法平滑过渡)、position
等,可过渡属性参考 MDN 列表。transition-duration
)0s
,无过渡)。s
(秒)或 ms
(毫秒),如 0.5s
或 500ms
。transition-duration: 0.3s
表示过渡持续 0.3 秒。transition-timing-function
)ease
(默认):先慢 → 快 → 慢(适合大多数交互)。linear
:匀速(适合平移、旋转等均匀运动)。ease-in
:开始慢,逐渐加快(适合 “进入” 场景)。ease-out
:开始快,逐渐减慢(适合 “退出” 场景)。ease-in-out
:开始和结束都慢,中间快(对称效果)。cubic-bezier(x1, y1, x2, y2)
可自定义复杂曲线(如 cubic-bezier(0.25, 0.1, 0.25, 1)
)。transition-delay
)transition-delay: 0.2s
表示触发后等待 0.2 秒再开始过渡。实现按钮在 hover 时背景色、阴影、尺寸的平滑过渡:
<!DOCTYPE html><html><head> <style> .btn { padding: 10px 20px; border: none; border-radius: 4px; background: #3b82f6; color: white; font-size: 16px; cursor: pointer; /* 过渡配置:所有属性,0.3秒,ease曲线 */ transition: all 0.3s ease; } .btn:hover { /* hover 时的样式变化 */ background: #2563eb; /* 深色背景 */ transform: translateY(-2px); /* 上移2px */ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* 加深阴影 */ } </style></head><body> <button class="btn">Hover 我</button></body></html>
解析:
transition: all 0.3s ease
,表示所有样式变化都将在 0.3 秒内以 ease
曲线过渡。background
、transform
、box-shadow
同时变化,这些变化会被过渡效果 “平滑化”,而非瞬间切换。通过 transition-delay
让多个元素按顺序触发过渡,形成动画序列:
<!DOCTYPE html><html><head> <style> .container { display: flex; gap: 10px; margin: 20px; } .dot { width: 30px; height: 30px; border-radius: 50%; background: #6366f1; /* 基础过渡配置:尺寸变化,0.3秒 */ transition: transform 0.3s ease; } /* 为每个圆点设置不同延迟 */ .dot:nth-child(1) { transition-delay: 0s; } .dot:nth-child(2) { transition-delay: 0.1s; } .dot:nth-child(3) { transition-delay: 0.2s; } .dot:nth-child(4) { transition-delay: 0.3s; } .container:hover .dot { transform: scale(1.5); /* 所有圆点放大1.5倍 */ } </style></head><body> <div class="container"> <div class="dot"></div> <div class="dot"></div> <div class="dot"></div> <div class="dot"></div> </div></body></html>
解析:
transition-delay
依次增加 0.1s,当容器 hover 时,会按顺序逐个放大,形成 “波浪式” 动画。transition
与 transform
(变形)结合是最常用的动画组合,可实现平移、旋转、缩放等效果:
<!DOCTYPE html><html><head> <style> .card { width: 200px; height: 150px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); display: flex; align-items: center; justify-content: center; font-size: 18px; /* 过渡:transform和box-shadow,0.5秒 */ transition: transform 0.5s ease, box-shadow 0.5s ease; } .card:hover { /* 上移+放大+加深阴影 */ transform: translateY(-10px) scale(1.05); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15); } </style></head><body> <div class="card">Hover 我</div></body></html>
解析:
transform
同时实现 translateY
(上移)和 scale
(放大),transition
让这些变形平滑进行,配合阴影变化,模拟卡片 “浮起” 的立体感。transition
需要样式变化才能触发,常见触发方式::hover
、:active
、:focus
等。element.classList.add('active')
)。transform
和 opacity
,这两个属性不会触发浏览器的 “重排重绘”,性能更好。transition: all
(会监听所有属性变化,浪费性能),尽量指定具体属性(如 transition: width 0.3s
)。transition
只能实现 “从 A 到 B” 的一次性过渡,无法实现循环动画或复杂时间线动画(这类需求需用 animation
属性)。transition
与 animation
的区别特性 | transition | animation |
---|---|---|
触发方式 | 需要样式变化触发(被动) | 可自动触发,支持循环(主动) |
复杂度 | 适合简单的 “状态切换” 动画 | 适合复杂的多关键帧动画 |
控制能力 | 仅能定义开始和结束状态 | 可定义多个关键帧(@keyframes ) |
循环 | 不支持循环(需手动重置样式) | 支持 animation-iteration-count 循环 |
简单说:简单交互用 transition
,复杂动画用 animation
。
通过 transition
,只需几行代码就能让元素交互变得生动流畅,是前端开发中提升用户体验的重要工具。掌握其参数组合和使用场景后,可轻松实现按钮反馈、卡片悬浮、菜单展开等常见交互效果。
vivo 蓝河操作系统 3 将于 11 月开启手表端公测,首批支持 vivo / iQOO WATCH 5
微星推出 MAG X870E TOMAHAWK MAX WIFI PZ 背插主板,可超外频