mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
3571 字
9 分钟
交互动效设计
2026-06-06
统计加载中...

交互动效设计#

一.变换#

csstransform是元素进行2D/3D变换的核心属性,支持平移、旋转、倾斜、缩放、倾斜等效果,且不破坏原有文档流布局

场景: 应用非常广泛,通过简介的语法实现复杂的视觉动态效果

坐标系
变换的时候很多情况需要按照坐标轴来变化,介绍2D坐标系和3D坐标系

2D坐标系

alt text

盒子往正值,往负值 盒子往正值,往负值

3D坐标系

alt text

基础变换函数-2D#

变换类型函数语法核心描述应用场景
平移translate(x, y)
translateX(x)
translateY(y)
沿 X/Y 轴移动元素,参数可为像素或百分比(百分比相对于元素自身尺寸)微调元素位置、悬停偏移效果
旋转rotate(angle)以元素中心为基点顺时针旋转,需加单位 deg(负值为逆时针)图标旋转、卡片翻转
缩放scale(sx, sy)
scaleX(sx)
scaleY(sy)
X/Y 轴按比例缩放,单参数时等比例缩放(>1 放大,<1 缩小,支持百分比)悬停放大、焦点突出
倾斜skew(x-angle, y-angle)
skewX(angle)
skewY(angle)
沿 X/Y 轴扭曲元素形状,参数为倾斜角度(支持负值)斜切导航栏、动态图表

1.变换函数-2D平移#

平移(translate)沿X/Y轴移动元素位置,不改变元素的实际布局(原位置仍保留)

场景

  1. 悬停元素微调。鼠标放入元素上下或者左右移动(添加过渡更优雅)
  2. 元素居中。元素实现水平垂直居中
  • 平移不影响页面布局,仅是视觉上的移动
  • 添加鼠标经过元素移动,优先transform而不是通过lefttop等,性能更佳
  • 如果单位是百分比,相对于元素自身尺寸,而非父容器

示例

.box {
transition: transform 0.3s;
}
.box:hover {
transform: translate(10px, 10px);
}

2.变换函数-2D旋转#

旋转(rotate)通过改变元素在平面或空间中的角度实现视觉效果

场景

  1. 悬停动画(如按钮旋转)
  2. 加载动画(无线循环旋转)

语法

.box {
transform: rotate(360deg); /* 旋转 */
transform-origin: center center; /* 旋转的基点,默认中心 */
}
  • 参数单位:deg(度),正值是顺时针,负值是逆时针
  • transform-origin设置旋转中心点
  • 属性值支持left,top等,也可以支持数字比如像素和百分比等
注意: **行内元素**的布局特性(无法设置宽高,盒模型限制,transform基准异常)会破环旋转效果的稳定性,所以文字类要转换行内块或者块级元素,比如字体图标需要转换

3.变换函数-2D缩放#

缩放(scale)用于调整元素尺寸,且不改变元素在文档流中的原始占位

场景

  1. 悬停放大。鼠标悬停在元素上时,元素放大

语法transform: scale(1.5); 整体放大1.5倍 transform: scale(1.5, 1); 水平方向放大,垂直方向不放大

  • 单参数:同时作用于x轴和y轴,等比例缩放
  • 双参数:分别作用于x轴和y轴,不同比例缩放

4.变换函数-2D倾斜#

倾斜(skew)用于对元素进行二维*倾斜变换,通过沿x轴或y轴扭曲元素的几何形状

场景

  1. 鼠标经过元素倾斜效果

语法transform: skew(30deg, 30deg); 水平方向倾斜30度,垂直方向倾斜30度 transform: skewX(30deg); 水平方向倾斜30度,垂直方向不倾斜 transform: skewY(30deg); 垂直方向倾斜30度,水平方向不倾斜

  • 单参数:y轴默认倾斜角度为0
  • 双参数:分别作用于x轴和y轴,不同角度倾斜
  • transform-origin设置倾斜中心点,默认中心

5.过渡transition完整写法#

transition完整写法transition: 过渡属性 持续时间 速度曲线 延迟时间;

  • 过渡属性:过渡属性属性值变化时触发过渡效果
  • 持续时间:属性值变化时的过渡时间,单位秒
  • 速度曲线:属性值变化时的过渡曲线
  • 延迟时间:属性值变化时的过渡时间延迟,单位秒

过渡属性: 过渡属性的值可以是:

  • none:表示没有过渡效果
  • all:表示所有可过渡的属性都参与过渡(默认值)
  • 具体属性名:如 transformopacitybackground-colorwidthheightmarginpaddingborderbox-shadow 等常用CSS属性

注意:并非所有CSS属性都可以过渡,只有具有中间值的属性才能实现平滑过渡效果。颜色、尺寸、位置、透明度等连续性属性最适合过渡。

速度曲线

速度曲线参数效果描述曲线可视化
ease默认值,慢速开始 → 加速 → 慢速结束,适合大多数自然过渡(如按钮悬停)
alt text
linear匀速运动,无加速/减速,适合机械感效果(如进度条)
alt text
ease-in慢速开始 → 逐渐加速,适合元素从静止启动(如弹窗出现)
alt text
ease-out快速开始 → 逐渐减速,适合元素退出(如关闭动画)
alt text
ease-in-out慢速开始和结束,中间加速,适合对称性动画(如页面切换)
alt text
cubic-bezier(x1,y1,x2,y2)贝塞尔曲线。通过四值(0-1范围内)自定义速度曲线,实现弹跳、骤停等创意效果(如按钮点击反馈)
alt text

工具

  1. 可视化编辑贝塞尔曲线
  2. 获取常用缓动函数的预设值

6.变换函数-复合写法#

在css中,transform属性的复合写法是将每个函数用空格隔开(多个变换函数组合使用)

语法transform: A() B() C();

顺序

  • 核心规则从右到左的执行顺序
  • 实际的执行顺序是:先执行最右侧的C(),再执行B(),最后执行A()

示例:轮胎移动效果

.img {
transition: transform 0.3s;
}
.box:hover img {
transform: translate(10px, 10px) rotate(360deg);
}
注意: 如果translate和rotate写反了,会导致元素先移动再旋转,效果不符合预期

3D变换与透视#

css3D效果通过将二维元素在三位空间中进行变换,为网页添加立体感和动态交互体验

场景

  1. 卡片翻转效果
  2. 3D幻灯片/轮播图
  3. 数据可视化。立体图表(如3D柱状图等)

相比JavaScript或WebGL,css3D利用GPU加速,动画更流畅,性能更高效

3D坐标系
网页中的三维坐标系:

alt text
坐标数值

  • x轴代表左右方向。右边是正值,左边是负值
  • y轴代表上下方向。上边是正值,下边是负值
  • z轴代表前后方向。接近屏幕是正值,远离屏幕是负值

默认情况下,元素在二维平面上呈现,Z轴值为0
当应用3D变换时,元素便可以在三维空间中自由变换

3D旋转#

旋转(rotate)通过改变元素在3D空间中的角度实现视觉效果

语法transform: rotateX(30deg); 围绕x轴旋转30度 transform: rotateY(30deg); 围绕y轴旋转30度 transform: rotateZ(30deg); 围绕z轴旋转30度

  • 参数单位:deg(度),正值是顺时针旋转,负值是逆时针旋转
  • rotateZ和二维里面的rotate()一样的,只是在3D空间中旋转

透视(Perspective)#

”透视“(Perspective)一词源于拉丁文”perspclre“(看透),指在平面上描绘物体的口康健关系的方法或技术。

在css中,透视效果(perspective)用于模拟人眼观察3D空间时的进大远小效果

alt text

语法
perspective: 1000px; 透视距离为1000px

  • 数值越小,透视效果越强
  • 给父元素添加,里面所有子元素都会添加透视效果(常用)
  • 给子元素添加,当前元素添加透视效果

同时使用多个属性transform: perspective(1000px) rotateX(30deg);

  • 注意:perspective()必须作为transform属性的第一个元素(否则无效)

3D旋转方向:左手大拇指指向坐标轴正方向,四指指向的方向就是正值方向

3D旋转-两面翻转的盒子示例#

backface-visibility:当元素旋转时,是否显示背面面

  • visible:显示背面
  • hidden:隐藏背面

示例:创建一个正面粉色反面蓝色,悬停时可翻转的盒子

.box {
position: relative;
margin: 100px auto;
width: 600px;
height: 300px;
}
.box .front,
.box .back {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* 元素翻转隐藏背面 */
backface-visibility: hidden;
transition: transform 0.6s;
}
.box .front {
background-color: lightblue;
transform: rotateY(0deg);
}
.box .back {
background-color: pink;
transform: rotateY(-180deg);
}
.box:hover .front {
transform: rotateY(180deg);
}
.box:hover .back {
transform: rotateY(0deg);
}

3D位移#

CSS 3D函数translatrZ()translateX3d()

语法
transform: translateX3d(xpx, ypx, zpx); 沿着x轴移动xpx,y轴移动ypx,z轴移动zpx

  • 在三维空间中同时沿x轴y轴z轴平移元素,支持更复杂的空间定位
  • 位移建议通过3D变换强制启用GPU渲染,提升动画流畅度

语法
transform: translateZ(zpx);

  • 沿z轴平移元素,实现进大远小的立体效果
  • 正值元素放大,负值元素缩小
  • 需父容器设置透视距离(perspective),否则无视觉变化

开启3D空间
在变换的时候(如卡片翻转)要使子元素保留3D位置,父元素需要设置transform-style: preserve-3d;

  • transform-style默认值为flat,即2D空间,不保留3D位置
  • 开启3D空间后,子元素会保留3D位置,实现3D效果

二.动画#

动画的基本使用#

CSS3的animation是一种通过定义关键帧和动画属性来实现元素动态效果的技术

优势

  • 性能高效:通过浏览器原生支持,利用GPU加速渲染,避免频繁的javascript计算开销
  • 代码简洁:解决了传统CSS过渡(transition)只能定义两帧状态的局限性,可以利用关键帧实现更复杂动画
  • 交互增强:支持与用户操作(如悬停、点击)结合,提升网页的动态变现里和用户体验

关键帧#

关键帧(keyframe)是动画和视频制作中用于定义动作或状态变化的核心节点,它决定了动画的其实,转折和结束状态,中间帧(插帧)通过算法自动生成,形成连贯的动画效果

动画的使用#

动画的使用要先定义动画,再使用动画

1.定义动画

@keyframes move {
0% {
transform: translateX(0);
}
50% {
transform: translateX(50px);
}
100% {
transform: translateX(100px);
}
}
  • @keyframes:定义动画的关键帧
  • move:动画名称,自定义
  • 0% 50% 100%:关键帧的时间点,0%表示动画开始,50%表示动画中间,100%表示动画结束
  • 关键帧可以定义多个,每个关键帧可以设置不同的属性值
@keyframes move {
from {
transform: translateX(0);
}
to {
transform: translateX(100px);
}
}
  • from:动画开始时的状态,相当于0%
  • to:动画结束时的状态,相当于100%

2.使用动画:动画属性要写到目标元素里面

.box {
animation: move 1s;
}
  • animation:应用动画
  • move:动画名称,与定义动画时的名称一致
  • 1s:动画持续时间,单位为秒

animation属性完整写法#

animation: 动画名称 动画持续时间 速度曲线 延迟时间 播放次数 播放方向 执行完毕状态;

  • 动画名称和动画时长是必填项,其余可以省略,但是要保证书写顺序
  • 动画属性要写到目标元素里面

|子属性|默认值|说明| |速度曲线|ease|动画速度曲线,可选值有linear(匀速)和cubic-bezier()(自定义贝塞尔曲线)等| |延迟时间|0s|动画延迟时间,单位为秒| |播放次数|1|动画播放次数,无限循环播放为infinite| |播放方向|normal|动画播放方向,可选值还有reverse(反向播放)和alternate(交替播放)| |执行完毕状态|none|动画结束后状态(如forwards保留最后一帧,backwards回到第一帧)|

step逐帧动画#

速度曲线除了常见的linear、ease、cubic-bezier等,还包含steps()函数,steps()是CSS动画中用于控制动画分段执行的计时函数,它通过将动画分割为离散的步骤,实现类似传统帧动画(逐帧动画)的跳跃效果

语法

animation: move 1s steps(8) infinite;
  • steps(步数),步数为正整数
  • 经常和背景图片(精灵图)来实现动画效果

逐帧动画原理

  1. 移动图片。其实是通过变化背景位置,展示不同的图片帧,实现动画效果
  2. 图片有N个不同图形,steps()步数就写N

示例

  • 盒子大小:宽度548px,高度513px
  • 背景图片大小:宽度13700px,高度513px
  • 背景图片一共有25张小图片组成
@keyframes move {
0% {
background-position: 0 0;
}
100% {
background-position: -13700px 0;
}
}
.box {
width: 548px;
height: 513px;
background: url(./images/box.png) no-repeat left/13700px 513px;
/* 使用动画 */
animation: move 1s steps(25) infinite;
}

动画单写属性#

动画子属性默认值说明
animation-timing-functionease动画速度曲线,支持 linearcubic-bezier()
animation-delay0s动画延迟时间,可设为负值(跳过部分动画)
animation-iteration-count1播放次数,若需无限循环需显式声明 infinite
animation-directionnormal播放方向,可选 reverse(反向)、alternate(交替)
animation-fill-modenone执行完毕状态,动画结束后是否保留样式(如 forwards 保留最后一帧)
animation-play-staterunning暂停或者继续动画,需单独设置 paused 暂停动画

三.其他效果#

box-reflect: 倒影效果#

box-reflect是css中用于为元素创建倒影效果 语法box-reflect: 倒影方向 倒影距离 倒影图像

  1. 倒影方向(必写):
  • above:倒影在元素上方
  • below:倒影在元素下方
  • left:倒影在元素左侧
  • right:倒影在元素右侧
  1. 倒影距离(必写):
  • 倒影距离,单位为像素
  1. 倒影图像(可选):
  • 倒影图像,可选值还有none(无倒影)
  • url(./images/reflect.png):倒影图像,可选值还有linear-gradient()(线性渐变)、radial-gradient()(径向渐变)等

注意,因为兼容性问题,前面需要添加-webkit-前缀,例如-webkit-box-reflect: below 10px #f5f5f5;

() 父亲选择器#

:has()选择器是css中用于选择包含指定子元素的元素 语法:has(子元素)

  1. 子元素(必写):
    • 子元素,可选值还有::first-child(第一个子元素)、::last-child(最后一个子元素)、::nth-child(第n个子元素)(第n个子元素)等
    • 例如::has(子元素):选择包含子元素的元素
    • 例如::has(子元素):nth-child(2):选择包含子元素的第2个子元素

() 反选器#

:not()选择器是css中用于选择不包含指定子元素的元素 语法:not(子元素)

  1. 子元素(必写):
    • 子元素,可选值还有::first-child(第一个子元素)、::last-child(最后一个子元素)、::nth-child(第n个子元素)(第n个子元素)等
    • 例如::not(子元素):选择不包含子元素的元素
    • 例如::not(子元素):nth-child(2):选择不包含子元素的第2个子元素

opacity 透明度#

opacity是css中用于设置元素透明度的属性 语法opacity: 透明度值

  1. 透明度值(必写):
    • 透明度值,取值范围为0到1之间
    • 0:完全透明
    • 1:完全不透明
    • 0.5:半透明
    • 例如:opacity: 0.5;:设置元素透明度为0.5
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

交互动效设计
https://fairycrane.website/posts/interaction/
作者
仙鹤
发布于
2026-06-06
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00