当前位置: 首页 > news >正文

CSS - transition 粗浅记忆

在 CSS 中,transition 是用于实现元素样式平滑过渡的属性,能让元素从一种样式状态(如颜色、尺寸、位置等)逐渐变化到另一种状态,避免样式突变带来的生硬感。它是实现基础动画效果的核心工具,广泛用于 hover 交互、状态切换等场景。

一、transition 核心语法

transition 是一个复合属性,可以同时定义过渡的多个参数,语法如下:

css

transition: [过渡属性] [过渡时长] [过渡 timing 函数] [延迟时间];

各参数的含义和规则:

参数 说明 可选值 / 示例 是否必填
过渡属性(property) 指定哪些 CSS 属性需要过渡(如 widthbackgroundall 表示所有属性) widthbackgroundall 否(默认 all
过渡时长(duration) 过渡效果持续的时间(必须设置,否则无过渡效果) 0.3s500ms(秒 / 毫秒)
timing 函数 过渡速度的变化曲线(控制动画的 “节奏感”) ease(默认)、linearease-in
延迟时间(delay) 延迟多久开始过渡 0s(默认)、0.5s

二、核心参数详解

1. 过渡属性(transition-property

  • 作用:指定哪些 CSS 属性发生变化时会触发过渡效果。
  • 常见值:
    • all:所有可过渡的属性变化都触发(常用,但性能略差)。
    • 具体属性:如 widthheightbackground-colortransform 等(推荐按需指定,优化性能)。
  • 注意:不是所有 CSS 属性都支持过渡,如 display(无法平滑过渡)、position 等,可过渡属性参考 MDN 列表。

2. 过渡时长(transition-duration

  • 作用:定义过渡效果从开始到结束的时间,必须设置(默认 0s,无过渡)。
  • 单位:s(秒)或 ms(毫秒),如 0.5s500ms
  • 示例:transition-duration: 0.3s 表示过渡持续 0.3 秒。

3. Timing 函数(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))。

4. 延迟时间(transition-delay

  • 作用:指定触发过渡后,延迟多久开始执行。
  • 示例:transition-delay: 0.2s 表示触发后等待 0.2 秒再开始过渡。

三、使用场景与示例

1. 基础示例:按钮 hover 效果

实现按钮在 hover 时背景色、阴影、尺寸的平滑过渡:

_2025-10-05_23-49-17

<!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 曲线过渡。
  • 当鼠标 hover 时,backgroundtransformbox-shadow 同时变化,这些变化会被过渡效果 “平滑化”,而非瞬间切换。

3. 延迟过渡:实现序列动画

通过 transition-delay 让多个元素按顺序触发过渡,形成动画序列:

_2025-10-05_23-54-53

<!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>

解析

  • 4 个圆点的过渡属性相同,但 transition-delay 依次增加 0.1s,当容器 hover 时,会按顺序逐个放大,形成 “波浪式” 动画。

4. 配合 transform 实现复杂动画

transitiontransform(变形)结合是最常用的动画组合,可实现平移、旋转、缩放等效果:

_2025-10-05_23-57-00

<!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 让这些变形平滑进行,配合阴影变化,模拟卡片 “浮起” 的立体感。

四、注意事项

  1. 触发条件transition 需要样式变化才能触发,常见触发方式:
    • 伪类::hover:active:focus 等。
    • 类名变化:通过 JS 动态添加 / 移除类(如 element.classList.add('active'))。
    • 媒体查询:窗口大小变化触发样式调整。
  2. 性能优化
    • 优先过渡 transformopacity,这两个属性不会触发浏览器的 “重排重绘”,性能更好。
    • 避免使用 transition: all(会监听所有属性变化,浪费性能),尽量指定具体属性(如 transition: width 0.3s)。
  3. 兼容性:现代浏览器(Chrome、Firefox、Edge、Safari 10+)均支持,无需前缀;IE10 及以上部分支持,低版本 IE 不支持。
  4. 局限性transition 只能实现 “从 A 到 B” 的一次性过渡,无法实现循环动画或复杂时间线动画(这类需求需用 animation 属性)。

五、transitionanimation 的区别

特性 transition animation
触发方式 需要样式变化触发(被动) 可自动触发,支持循环(主动)
复杂度 适合简单的 “状态切换” 动画 适合复杂的多关键帧动画
控制能力 仅能定义开始和结束状态 可定义多个关键帧(@keyframes
循环 不支持循环(需手动重置样式) 支持 animation-iteration-count 循环

简单说:简单交互用 transition,复杂动画用 animation

通过 transition,只需几行代码就能让元素交互变得生动流畅,是前端开发中提升用户体验的重要工具。掌握其参数组合和使用场景后,可轻松实现按钮反馈、卡片悬浮、菜单展开等常见交互效果。

http://www.hskmm.com/?act=detail&tid=25229

相关文章:

  • 【MC】LittleTiles模组结构数据解析和版本迁移方案
  • 容器魔方导致盒子满了
  • 课程学习笔记——[大一秋]遗传学
  • P3067 [USACO12OPEN] Balanced Cow Subsets G
  • Vivado 2025 界面中文设置
  • 词汇学习——专业词汇
  • P4556 [Vani有约会] 雨天的尾巴 [模板] 线段树合并
  • P4550 收集邮票
  • P8110 [Cnoi2021] 矩阵
  • P9751 [CSP-J 2023] 旅游巴士
  • P9234 [蓝桥杯 2023 省 A] 买瓜
  • P1044 [NOIP 2003 普及组] 栈
  • P1080 [NOIP 2012 提高组] 国王游戏
  • 音响没声音
  • P1654 OSU!
  • DynamoDB十年演进:云原生数据库的技术革新
  • 完整教程:MySQL全量、增量备份与恢复
  • 10/5
  • 10/4
  • 嵌入式MCU
  • porting perf性能观测工具
  • Windows常用快捷指令
  • Python 在金融中的应用- Part 1 - 教程
  • QBXT2025S刷题 Day4
  • java学习日记9.25
  • porting 开源memtester
  • 计算机的组成
  • 完整教程:用mediamtx搭建简易rtmp,rtsp视频服务器
  • oppoR9m MTK 6755 开启VCOM的9008模式
  • 关于电脑息屏后自动亮屏的的原因排查及解决方式