Html-CSS动画

CSS动画技术指南

CSS动画概述

CSS动画是通过CSS技术控制页面元素属性变化的实现方式。相比JavaScript动画,CSS动画具有以下优势:

  • 无需依赖JavaScript即可实现
  • 动画效果更流畅
  • 由浏览器直接执行,性能更高
  • 代码量更少
  • 兼容性良好(通常支持IE10及以上浏览器)

如何鼠标移到指定位置出现盒子

过渡(Transition)效果

1.1 过渡基础

过渡(transition)用于指定属性变化时的平滑切换方式:

  • 需要特定条件触发(如:hover、:active、:focus)
  • 一次性效果,不支持循环
  • 仅包含初始值和结束值两帧
  • 兼容IE10+,移动端支持良好

1.2 过渡属性

  1. transition-property

    指定参与过渡的属性:

    • none:无过渡效果
    • all:所有属性参与过渡(默认)
    • property:自定义属性列表(逗号分隔)

    注意:

    • 所有数值类型属性均可参与过渡(width/height/left/top等)
    • 需在有效数值间进行过渡
  2. transition-duration

    指定过渡持续时间(必填)

    单位:s(秒)或ms(毫秒)

  3. transition-timing-function

    控制过渡变化曲线(可选):

    • ease:默认值(慢→快→慢)
    • linear:匀速
    • ease-in:慢→快
    • ease-out:快→慢
    • ease-in-out:慢→快→慢
    • steps():分步过渡
    • cubic-bezier(n,n,n,n):贝塞尔曲线(0-1值)
  4. transition-delay

    设置过渡延迟时间(可选)

    单位:s或ms

  5. transition

    简写属性,可同时设置以上所有属性(可选)

关键帧动画(Animation)

2.1 动画基础

与过渡不同,动画可自动触发,无需属性变化。

关键帧设置方法:

css 复制代码
/* 方法一 */
@keyframes 名称 {
  from {初始状态}
  to {结束状态}
}

/* 方法二 */
@keyframes 名称 {
  0% {初始状态}
  50% {中间状态}
  100% {结束状态}
}

注意:

  • 帧顺序可调整
  • 未指定初始/结束帧时使用元素默认样式
  • 可使用逗号同时设置多个关键帧

2.2 动画属性

  1. animation-name

    绑定关键帧名称(必填),可设置多个动画(逗号分隔)

  2. animation-duration

    动画持续时间(必填)

    单位:s或ms

  3. animation-timing-function

    动画速度曲线(与过渡相同)

  4. animation-delay

    动画延迟时间

  5. animation-iteration-count

    播放次数:

    • n:具体次数
    • infinite:无限循环
  6. animation-direction

    播放方向:

    • normal:默认(from→to)
    • reverse:to→from
    • alternate:正向+反向交替
    • alternate-reverse:反向+正向交替
  7. animation-fill-mode

    动画非播放时的元素样式:

    • none:默认(恢复初始)
    • forwards:保持结束状态
    • backwards:保持初始状态
    • both:结合两者
  8. animation-play-state

    控制动画状态:

    • running:播放(默认)
    • paused:暂停
  9. animation

    简写属性,可包含以上所有属性值

2D变形(Transform)

3.1 位移(translate)

css 复制代码
transform: translate(x,y);
  • x轴:正值右移,负值左移
  • y轴:正值下移,负值上移
  • 可单独设置:translateX()/translateY()/translateZ()
  • 支持百分比(基于自身尺寸)
  • 不影响其他元素布局
  • 对行内元素无效
垂直水平居中实现:
css 复制代码
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);

3.2 旋转(rotate)

css 复制代码
transform: rotate(角度);
  • 默认绕中心点旋转
  • 单位:deg(度)
  • 正值:顺时针
  • 负值:逆时针
  • 可单独设置:rotateX()/rotateY()/rotateZ()

3.3 缩放(scale)

css 复制代码
transform: scale(x, y);
  • 默认值:1(无单位)
  • 值 < 1:缩小元素;值 > 1:放大元素
  • 支持单独设置各轴向:scaleX() / scaleY() / scaleZ()
  • 缩放操作不会影响其他元素的布局

3.4 倾斜(skew)

css 复制代码
transform: skew(x-angle, y-angle);
  • 倾斜单位:deg

  • 单参数:仅设置x轴倾斜角度(y轴默认为0)

  • 双参数:第一个为x轴角度,第二个为y轴角度

  • 倾斜方向:

    • x轴正值向左倾斜,负值向右倾斜
    • y轴正值向上倾斜,负值向下倾斜
    • 参照点为元素左上角
  • 支持单独设置:

    css 复制代码
    transform: skewX();
    transform: skewY();

3.5 变形原点(transform-origin)

css 复制代码
transform-origin: x-axis y-axis;
  • 功能:改变元素变形时的基准点(默认为元素中心)

  • 生效条件:必须配合transform属性使用

  • 取值方式:

    • 关键词:left/center/right/top/bottom等
    • 数值:px或百分比(基于元素左上角计算)
  • 默认值:

    css 复制代码
    transform-origin: center center;
相关推荐
落霞的思绪11 分钟前
配置React和React-dom为CDN引入
前端·react.js·前端框架
Hacker_Z&Q12 分钟前
CSS 笔记2 (属性)
前端·css·笔记
Anastasiozzzz20 分钟前
LeetCode Hot100 295. 数据流的中位数 MedianFinder
java·服务器·前端
Exquisite.1 小时前
Nginx
服务器·前端·nginx
打小就很皮...1 小时前
dnd-kit 实现表格拖拽排序
前端·react.js·表格拖拽·dnd-kit
Ulyanov1 小时前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发
打小就很皮...1 小时前
React 19 + Vite 6 + SWC 构建优化实践
前端·react.js·vite·swc
Highcharts.js1 小时前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
这是个栗子1 小时前
AI辅助编程(二) - 通译千问
前端·ai·通译千问
VT.馒头2 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript