【CSS】过渡动画

article/2025/3/13 4:16:39

目录

  • 过渡动画
  • 1 css 属性
    • 1.1 transform 变换(平移旋转缩放)
    • 1.2 animation 动画
      • 1.2.1 keyframes
    • 1.3 transition 过渡
    • 1.4 比较
  • 2 方式
    • 2.1 css 伪类
    • 2.2 vue <Transition> 组件
      • 2.2.1 默认名称
      • 2.2.2 自定义名称
      • 2.2.3 自定义 class
      • 2.2.4 配合 animation
      • 2.2.5 多层
      • 2.2.6 封装
    • 2.3 vue <TransitionGroup> 组件
      • 2.3.1 示例列表
    • 2.4 class 变化
      • 2.4.1 点击旋转
      • 2.4.2 点击持续旋转
      • 2.4.3 点击折叠收起
  • 3 效果
    • 3.1 淡入(fade in)
    • 3.2 上浮(fade up)
    • 3.3 左右摆动(wiggle)
    • 3.4 上下弹跳(bounceAround)
  • 4 性能考量

过渡动画

不加过渡动画,变化不太流畅

1 css 属性

MDN css transitions

1.1 transform 变换(平移旋转缩放)

w3school transform

  • transform:用于元素的变形,显示变形后的状态,不是变形的过程,变形过程需要配合transition表示
    • 2D 转换
      • translate(50px, 100px) 平移
      • rotate(20deg) 顺时针旋转 20 度
      • rotateX(150deg) 绕其 X 轴旋转给定角度
      • scaleX(2) 增大为其原始宽度的两倍
      • scaleY(0.5) 缩减为其原始高度的一半
      • scale(2, 3) 增大为其原始宽度的两倍和其原始高度的三倍
      • skewX(20deg) 沿 X 轴倾斜 20 度
      • skewY(20deg) 沿 Y 轴倾斜 20 度
      • skew(20deg, 10deg) 沿 X 轴倾斜 20 度,同时沿 Y 轴倾斜 10 度
      • matrix() 方法把所有 2D 变换方法组合为一个
        • matrix(scaleX, skewY, skewX, scaleY, translateX, translateY)
        • transform: matrix(1, -0.3, 0, 1, 0, 0);
函数描述函数描述
matrix(n,n,n,n,n,n)定义 2D 转换,使用六个值的矩阵。matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate(x,y)定义 2D 转换,沿着 X 和 Y 轴移动元素。translate3d(x,y,z)定义 3D 转化。
translateX(n)定义 2D 转换,沿着 X 轴移动元素。translateX(x)定义 3D 转化,仅使用用于 X 轴的值。
translateY(n)定义 2D 转换,沿着 Y 轴移动元素。translateY(y)定义 3D 转化,仅使用用于 Y 轴的值。
translateZ(z)定义 3D 转化,仅使用用于 Z 轴的值。
scale(x,y)定义 2D 缩放转换,改变元素的宽度和高度。scale3d(x,y,z)定义 3D 缩放转换。
scaleX(n)定义 2D 缩放转换,改变元素的宽度。scaleX(x)定义 3D 缩放转换,通过给定一个 X 轴的值。
scaleY(n)定义 2D 缩放转换,改变元素的高度。scaleY(y)定义 3D 缩放转换,通过给定一个 Y 轴的值。
scaleZ(z)定义 3D 缩放转换,通过给定一个 Z 轴的值。
rotate(angle)定义 2D 旋转,在参数中规定角度。rotate3d(x,y,z,angle)定义 3D 旋转。
rotateX(angle)定义沿 X 轴的 3D 旋转。
rotateY(angle)定义沿 Y 轴的 3D 旋转。
rotateZ(angle)定义沿 Z 轴的 3D 旋转。
skew(x-angle,y-angle)定义 2D 倾斜转换,沿着 X 和 Y 轴。
skewX(angle)定义 2D 倾斜转换,沿着 X 轴。
skewY(angle)定义 2D 倾斜转换,沿着 Y 轴。
perspective(n)定义 3D 转换元素的透视视图。

1.2 animation 动画

w3school animation

animation: [ * animation-name] [ * animation-duration][animation-timing-function] [animation-delay] [animation-iteration-count][animation-direction] [animation-fill-mode] [animation-play-state];
  • animation:动画
    • *animation-name:关键帧的名字,该参数必需。
    • *animation-duration:动画持续的时间,该参数必需。
    • animation-timing-function:定时器函数,默认是ease
    • animation-delay:动画效果多少秒后开始,默认为0
    • animation-iteration-count:动画重复的次数,可以指定为一个整数,表示多少次,默认值是infinite关键字,表示无限次。
    • animation-direction:动画方向,可能的值为forwardbackwardalternating,默认值为normal
    • animation-fill-mode:默认值为none
    • animation-play-state:动画默认是否生效,默认值为running

1.2.1 keyframes

MDN keyframes

  • 关键帧 @keyframes 规则通过在动画序列中定义关键帧(或 waypoints)的样式来控制 CSS 动画序列中的中间步骤。和 转换 transition 相比,关键帧 keyframes 可以控制动画序列的中间步骤。
@keyframes myname {0% {top: 0px;}25% {top: 200px;}50% {top: 100px;}75% {top: 200px;}100% {top: 0px;}
}
keyframes rotation {from {transform: rotate(90deg);}to {transform: rotate(450deg);}
}

1.3 transition 过渡

transition: [ * transition-property] [ * transition-duration][transition-timing-function] [transition-delay];
  • transition: 该状态变至其他状态的过渡过程
    • 单个属性:transition: background-color 2s;
    • 多个属性:
      • transition: background-color 2s, height 1s ease-in-out;
      • transition: width 2s, height 2s, transform 2s;
  • transition-property: 元素的哪一个 CSS 属性需要过渡效果,该参数必需
    • all:全部属性
  • transition-duration: 过渡效果的持续时间,该参数必需
  • transition-timing-function: 定时函数,默认是ease
    • linear:线性运行,各个时刻速度都一样。
    • ease: 快速加速,然后逐渐减速,CSS 的默认值。
    • ease-in:逐渐加速,结尾时变快,适用于退出页面显示的元素。
    • ease-out:开始时速度最快,然后逐渐慢下来,适用于进入页面显示的元素。
    • ease-in-out:主键加速然后变慢,与ease相似,但开始时加速较慢,适合那些在页面有着明确开始和结束的动画。
  • transition-delay: 过渡从多少秒以后开始,默认是0

1.4 比较

  • animation 强调流程与控制,对元素的一个或多个属性的变化进行控制,可以有多个关键帧(animation@keyframes结合使用)

  • transition 强调过渡,是元素的一个或多个属性发生变化时产生的过渡效果,同一个元素通过两个不同的途径获取样式,

    • 而第二个途径当某种改变发生(例如 hover)时才能获取样式,这样就会产生过渡动画。
    • 可以认为它有两个关键帧的 animation
  • 状态 a -> b:

    • width: 100->300
    • transition: width 2s;
  • 状态 b -> a:

    • width: 300->100
    • transition: width 6s;
a {width: 100px;transition: width 2s;
}b {width: 300px;transition: width 6s;
}

2 方式

2.1 css 伪类

w3school css 过渡

  • 常需要应用过渡动画的伪类选择器

    • :hover 当用户悬浮到一个元素之上的时候匹配。
    • :active 在用户激活(例如点击)元素的时候匹配,点击时应用,松开就结束
  • 原选择器:过渡前的状态、过渡的过程(该状态变至其他状态的过渡过程)

  • 伪类选择器:过渡后的状态(可以只写有变更的样式)

/* 把鼠标悬停在 div 元素上,宽度变宽的过渡效果 */
div {width: 100px;height: 100px;background: red;transition: width 2s;
}div:hover {width: 300px;
}

2.2 vue 组件

vue Transition

  • <Transition> 是一个内置组件
  • 进入或离开可以由以下的条件之一触发
    • v-if 所触发的切换
    • v-show 所触发的切换
    • 由特殊元素 <component> 切换的动态组件

在这里插入图片描述

  • v-enter-from:进入动画的起始状态。在元素插入之前添加,在元素插入完成后的下一帧移除。
  • v-enter-active:进入动画的生效状态。应用于整个进入动画阶段。在元素被插入之前添加,在过渡或动画完成之后移除。这个 class 可以被用来定义进入动画的持续时间、延迟与速度曲线类型。
  • v-enter-to:进入动画的结束状态。在元素插入完成后的下一帧被添加 (也就是 v-enter-from 被移除的同时),在过渡或动画完成之后移除。
  • v-leave-from:离开动画的起始状态。在离开过渡效果被触发时立即添加,在一帧后被移除。
  • v-leave-active:离开动画的生效状态。应用于整个离开动画阶段。在离开过渡效果被触发时立即添加,在过渡或动画完成之后移除。这个 class 可以被用来定义离开动画的持续时间、延迟与速度曲线类型。
  • v-leave-to:离开动画的结束状态。在一个离开动画被触发后的下一帧被添加 (也就是 v-leave-from 被移除的同时),在过渡或动画完成之后移除。

2.2.1 默认名称

<button @click="show = !show">Toggle</button>
<Transition><p v-if="show">hello</p>
</Transition>
.v-enter-active,
.v-leave-active {transition: opacity 0.5s ease;
}.v-enter-from,
.v-leave-to {opacity: 0;
}

2.2.2 自定义名称

<Transition name="fade"> ... </Transition>
.fade-enter-active,
.fade-leave-active {transition: opacity 0.5s ease;
}.fade-enter-from,
.fade-leave-to {opacity: 0;
}

2.2.3 自定义 class

<Transitionname="custom-classes"enter-active-class="animate__animated animate__tada"leave-active-class="animate__animated animate__bounceOutRight"
><p v-if="show">hello</p>
</Transition>

2.2.4 配合 animation

<Transition name="bounce"><p v-if="show" style="text-align: center;">Hello here is some bouncy text!</p>
</Transition>
@keyframes bounce-in {0% {transform: scale(0);}50% {transform: scale(1.25);}100% {transform: scale(1);}
}.bounce-enter-active {animation: bounce-in 0.5s;
}
.bounce-leave-active {animation: bounce-in 0.5s reverse;
}

2.2.5 多层

尽管过渡 class 仅能应用在 的直接子元素上,我们还是可以使用深层级的 CSS 选择器,在深层级的元素上触发过渡效果

在这种情况下,你可以通过向 组件传入 duration prop 来显式指定过渡的持续时间 (以毫秒为单位)。总持续时间应该匹配延迟加上内部元素的过渡持续时间

2.2.6 封装

<!-- MyTransition.vue -->
<script>// JavaScript 钩子逻辑...
</script><template><!-- 包装内置的 Transition 组件 --><Transition name="my-transition" @enter="onEnter" @leave="onLeave"><slot></slot><!-- 向内传递插槽内容 --></Transition>
</template><style>/*必要的 CSS...注意:避免在这里使用 <style scoped>因为那不会应用到插槽内容上
*/
</style>

2.3 vue 组件

是一个内置组件,用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。

2.3.1 示例列表

<TransitionGroup name="list" tag="ul"><li v-for="item in items" :key="item">{{ item }}</li>
</TransitionGroup>
.list-move, /* 对移动中的元素应用的过渡 */
.list-enter-active,
.list-leave-active {transition: all 0.5s ease;
}.list-enter-from,
.list-leave-to {opacity: 0;transform: translateX(30px);
}/* 确保将离开的元素从布局流中删除以便能够正确地计算移动的动画。 */
.list-leave-active {position: absolute;
}

2.4 class 变化

过渡动画的 css 可以另起一个 css 文件书写

vue 点击图标旋转

2.4.1 点击旋转

<style lang="css" scoped>.a {transition: all 2s;}.g {transform: rotate(-180deg);transition: all 2s;}
</style>
<template><div><a-icon type="up" :class="[state?'g':'a']" @click="Change" />//class随state的true或者false改变</div>
</template>
<script>export default {data() {return {state: false,};},methods: {Change() {this.state = !this.state;console.log(this.state);},},};
</script>

2.4.2 点击持续旋转

<uni-icons:class="{ rotation: rotation }"type="refreshempty"@click="onRefresh"
/><script>const rotation = ref(false);const onRefresh = () => {rotation.value = !rotation.value;};
</script>
// 持续旋转
.rotation {animation: rotation 2s infinite linear;
}@keyframes rotation {from {transform: rotate(0deg);}to {transform: rotate(359deg);}
}

2.4.3 点击折叠收起

<scroll-view class="scroll" v-if="isShow" scroll-y></scroll-view>

把 v-if 改为两种 class 的转变,再加上过渡

<scroll-viewclass="scroll":class="[isShow ? 'scroll--full' : 'scroll--null']"scroll-y
></scroll-view>
.scroll {box-sizing: border-box;width: 440rpx;font-weight: 300;background: #ffffff;border-radius: 5px;border: 1rpx solid;transition-property: all;transition-duration: 0.1s;
}.scroll--full {border-color: #999999;max-height: 155rpx;
}.scroll--null {border-color: #ffffff;max-height: 0rpx;
}

3 效果

  • 下拉选择
    • 下拉框:展开
    • 下拉箭头:旋转
  • 弹窗:缩放、淡入淡出
  • 增删:移走

3.1 淡入(fade in)

@keyframes fade-in {0% {opacity: 0;}100% {opacity: 1;}
}
.fade-in {animation: fade-in 1s forwards linear;
}
/* 淡入淡出 */
.v-enter-active,
.v-leave-active {transition: opacity 0.5s ease;
}.v-enter-from,
.v-leave-to {opacity: 0;
}

3.2 上浮(fade up)

@keyframes fade-up {0% {opacity: 0;transform: translateY(3em);}100% {opacity: 1;transform: translateY(none);}
}
.fade-up {animation: fade-up 3s cubic-bezier(0.05, 0.98, 0.17, 0.97) forwards;
}

3.3 左右摆动(wiggle)

@keyframes wiggle {0%,7% {transform: rotateZ(0);opacity: 0;}15% {transform: rotateZ(-15deg);opacity: 1;}20% {transform: rotateZ(10deg);}25% {transform: rotateZ(-10deg);}30% {transform: rotateZ(6deg);}35% {transform: rotateZ(-4deg);}40%,100% {transform: rotateZ(0);}
}

3.4 上下弹跳(bounceAround)

.animation {animation: bounceAround 1.1s ease-in-out infinite;
}@keyframes bounceAround {0% {transform:translateY(0);}20% {transform:translateY(-60px) rotate(0deg);}25%{transform:translateY(20px) rotate(0deg);}35%, 55%{transform:translateY(0px) rotate(0deg);}60% {transform: translateY(-20px) rotate(0deg);}100%{transform: translateY(-20px) rotate(360deg);}
}

4 性能考量

CSS 制作动画属性大多是 transform 和 opacity 之类的。用这些属性制作动画非常高效,因为:
他们在动画过程中不会影响到 DOM 结构,因此不会每一帧都触发昂贵的 CSS 布局重新计算。
大多数的现代浏览器都可以在执行 transform 动画时利用 GPU 进行硬件加速。
相比之下,像 height 或者 margin 这样的属性会触发 CSS 布局变动,因此执行它们的动画效果更昂贵,需要谨慎使用。我们可以在 CSS-Triggers 这类的网站查询哪些属性会在执行动画时触发 CSS 布局变动。


http://chatgpt.dhexx.cn/article/fWp3EfOc.shtml

相关文章

【CSS】css转换、css过渡、css动画_09

目录 ❣️ 转换 1.什么是转换 2.转换的属性 3.2D转换 (1) 位移 (2) 缩放 (3) 旋转 (4) 倾斜 4.3D旋转 ❣️ 过度 1. 指定参与过渡的css属性 2.设置过渡的出持续时长 3.设置过渡的时间曲线函数&#xff08;设置过渡的速度&#xff09; 4.过渡的延迟 5.过渡代码的…

使用vue实现css过渡和动画

一、过渡和动画的区别 过渡&#xff1a;通常用来表示元素上属性状态的变化。动画&#xff1a;通常用来表示元素运动的情况。 二、使用Vue实现基础得css过渡与动画 1. 动画 /* css */ keyframes leftToRight {0% {transform: translateX(-100px);}50% {transform: translateX(-…

CSS动画过渡

CSS动画过渡: 过渡transition,我们可以在不使用 Flash 动画或 JavaScript 的情况下&#xff0c;当元素从一种样式变换为另一种样式时为元素添加效果. 要实现这一点&#xff0c;必须规定两项内容&#xff1a;1.规定希望把效果添加到哪个 CSS 属性上&#xff0c;2.规定效果的时长…

CSS 过渡效果

简述: CSS过渡&#xff0c;就是样式发生变化时&#xff0c;可以看上去更自然&#xff0c;更柔和。想让哪个盒子有过渡样式&#xff0c;就把transition属性加在那个盒子上。 语法: 属性描述取值范围transition-property应用过渡效果的 CSS 属性名CSS属性都可以(all, width, co…

css的过渡特效

在web端&#xff0c;我们实现很多有意思的效果&#xff0c;比如&#xff1a;元素的淡入淡出、菜单滑入颜色切换等等效果。 那这些效果最简单的方式就是过渡【transitions】&#xff0c;过渡是一个变化时。css的过渡&#xff0c;可以使用‘ease’来描述这个变化的状态。 trans…

CSS transition(过渡效果)

1. transition-property transition-property 属性用来设置元素中参与过渡的属性名称&#xff0c;语法格式如下&#xff1a; transition-property: none | all | property; 参数说明如下&#xff1a; none&#xff1a;表示没有属性参与过渡效果&#xff1b;all&#xff1a;…

CSS——过渡与动画

1. 缓动效果 给过渡和动画加上缓动效果&#xff08;比如具有回弹效果的过渡过程&#xff09; 回弹效果是指当一个过渡达到最终值时&#xff0c;往回倒一点&#xff0c;然后再次回到最终值&#xff0c;如此往复一次或多次&#xff0c;并逐渐收敛&#xff0c;最终稳定在最终值。…

CSS过渡效果、变形效果以及动画

一、CSS的过渡&#xff1a;&#xff1a;从一个样式变化到另一个样式 1、transition-property&#xff1a;指定过渡的属性 属性值作用none没有任何属性会获得过渡效果all所有属性都将获得过渡效果property定义应用过渡效果的CSS属性名称&#xff0c;多个名称之间以逗号分隔 2…

CSS过渡,转换与动画

目录 过渡(transition) 转换(transform) 什么是转换 二维坐标系 移动&#xff08;translate&#xff09; 用translate实现居中 旋转&#xff08;rotate&#xff09; 设置旋转中心点 缩放&#xff08;scale&#xff09; 使用 设置缩放中心点 动画 用keyframes定义动…

CSS过渡-Transitions

目录 过渡三要素 过渡触发 属性&#xff1a; 实例运用&#xff1a; 1.过渡时间曲线动画 2.文字放大效果 3.手风琴 4. 米兔过渡 CSS transitions 可以决定哪些属性发生动画效果 (明确地列出这些属性)&#xff0c;何时开始 (设置 delay&#xff09;&#xff0c;持续多久 …

CSS过渡动画

css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 transition 是 css3 新增的⼀个功能&#xff0c;可以实现元素不同状态间的平滑过渡&#xff08;当元素从⼀个状态进⼊到另⼀个状态时&#xff09;&#xff0c;经常⽤来制作⼀些动画效果。 之…

CSS中过渡效果(transition)

CSS中过渡效果&#xff08;transition&#xff09; 过渡&#xff08;无继承性&#xff09;1、transition-property属性2、transition-duration属性3、transition-timing-function属性4、transition-delay属性5、transition属性 兼容性练习总结 过渡&#xff08;无继承性&#x…

CSS过渡

CSS过渡 1. 什么是过渡2. 可以参与过渡的属性有哪些3. 缓动效果 1. 什么是过渡 在 CSS 中&#xff0c;过渡属性&#xff1a;transition 过渡可以为一个元素在不同样式之间变化自动添加 ”补间动画“ 相比于用 JavaScript 实现过渡&#xff0c;用 CSS 优点&#xff1a;  …

CSS系列之过渡 transition(CSS3)

文章の目录 1、transition1.1、概述1.2、值的组成 2、transition-property2.1、属性值 3、transition-duration3.1、属性值 4、transition-timing-function4.1、属性值 5、transition-delay5.1、属性值 写在最后 过渡&#xff08;transition)是CSS3中具有颠覆性的特征之一&…

CSS transition(过渡效果)详解

CSS transition&#xff08;过渡效果&#xff09;详解 通常当 CSS 的属性值更改后&#xff0c;浏览器会立即更新相应的样式&#xff0c;例如当鼠标悬停在元素上时&#xff0c;通过 :hover 选择器定义的样式会立即应用在元素上。在 CSS3 中加入了一项过渡功能&#xff0c;通过该…

#HTML5-CSS-transition-过渡特效

CSS过渡特效 概述   在CSS中用于设置过渡特效的属性是 transition&#xff0c;该属性允许CSS的属性值在一定的时间区间内平滑地过渡&#xff0c;这就拜托了我们在CSS3版本标准之前对“JavaScript”和“Flash”的依赖&#xff0c;使页面的性能得以提升。这种效果可以在鼠标悬…

Windows系统_ARM处理器无法打开客户端问题解决

问题现象&#xff1a;客户端无法打开 用户环境&#xff1a;Windows系统 ARM处理器 问题定位&#xff1a;兼容性问题 解决方法&#xff1a; 右键客户端&#xff0c;点击“属性”选择“兼容性”&#xff0c;点击“更改所有用户的设置” 选择“更改仿真设置” 勾选设置如下&a…

每日三问之rem与em区别、Vue Set基本用法与使用场景、手写call、apply、bind方法

rem与em区别 在css中单位长度用的最多的是px、em、rem&#xff0c;这三个的区别是&#xff1a; px是固定的像素&#xff0c;一旦设置了就无法因为适应页面大小而改变。em和rem相对于px更具有灵活性&#xff0c;他们是相对长度单位&#xff0c;意思是长度不是定死了的&#xf…

IntelliJ 代码规范检查设置

IntelliJ → Preferences → Code Style → Inspections 在这里可以设置各种文件格式的规范检查 安装了阿里代码规约插件以后就会多出一项 Ali-Check &#xff08;请先安装阿里的代码规约插件 IntelliJ 代码规范检查插件&#xff09; 为了让大家统一规范规则&#xff0c;我们…

macOS借助vmware隔离运行aTrust,实现宿主机“干净”连入局域网

aTrust是深信服原easyconnect的升级产品&#xff0c;重点打造了一个“零信任”的概念&#xff0c;就是这个概念让我头皮发麻&#xff0c;其在官网直接挂着 终端检测深入&#xff1a;支持进程级检测&#xff0c;可发现和阻止终端上非可信应用进程&#xff1b;在登录时、每一次访…