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;
相关推荐
子兮曰8 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖8 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神8 小时前
github发布pages的几种状态记录
前端
不像程序员的程序媛10 小时前
Nginx日志切分
服务器·前端·nginx
北原_春希11 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
尽意啊11 小时前
echarts树图动态添加子节点
前端·javascript·echarts
吃面必吃蒜11 小时前
echarts 极坐标柱状图 如何定义柱子颜色
前端·javascript·echarts
O_oStayPositive11 小时前
Vue3使用ECharts
前端·javascript·echarts
竹秋…11 小时前
echarts自定义tooltip中的内容
前端·javascript·echarts
宝贝露.11 小时前
Axure引入Echarts图无法正常显示问题
前端·javascript·echarts