不加过渡动画,变化不太流畅
MDN css transitions
w3school transform
w3school animation
animation: [ * animation-name] [ * animation-duration] [animation-timing-function] [animation-delay] [animation-iteration-count] [animation-direction] [animation-fill-mode] [animation-play-state];
MDN 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);
}
}
transition: [ * transition-property] [ * transition-duration] [transition-timing-function] [transition-delay];
animation 强调流程与控制,对元素的一个或多个属性的变化进行控制,可以有多个关键帧(animation 和 @keyframes结合使用)
transition 强调过渡,是元素的一个或多个属性发生变化时产生的过渡效果,同一个元素通过两个不同的途径获取样式,
状态 a -> b:
状态 b -> a:
a {
width: 100px;
transition: width 2s;
}
b {
width: 300px;
transition: width 6s;
}
w3school css 过渡
常需要应用过渡动画的伪类选择器
原选择器:过渡前的状态、过渡的过程(该状态变至其他状态的过渡过程)
伪类选择器:过渡后的状态(可以只写有变更的样式)
/* 把鼠标悬停在 div 元素上,宽度变宽的过渡效果 */
div {
width: 100px;
height: 100px;
background: red;
transition: width 2s;
}
div:hover {
width: 300px;
}
vue Transition

hello
.v-enter-active,
.v-leave-active {
transition: opacity 0.5s ease;
}
.v-enter-from,
.v-leave-to {
opacity: 0;
}
...
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
hello
Hello here is some bouncy text!
@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;
}
尽管过渡 class 仅能应用在 的直接子元素上,我们还是可以使用深层级的 CSS 选择器,在深层级的元素上触发过渡效果
在这种情况下,你可以通过向 组件传入 duration prop 来显式指定过渡的持续时间 (以毫秒为单位)。总持续时间应该匹配延迟加上内部元素的过渡持续时间
是一个内置组件,用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。
- {{ item }}
.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;
}
过渡动画的 css 可以另起一个 css 文件书写
vue 点击图标旋转
//class随state的true或者false改变
// 持续旋转
.rotation {
animation: rotation 2s infinite linear;
}
@keyframes rotation {
from {
transform: rotate(0deg);
}
to {
transform: rotate(359deg);
}
}
把 v-if 改为两种 class 的转变,再加上过渡
.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;
}
@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;
}
@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;
}
@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);
}
}
.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);}
}
CSS 制作动画属性大多是 transform 和 opacity 之类的。用这些属性制作动画非常高效,因为:
他们在动画过程中不会影响到 DOM 结构,因此不会每一帧都触发昂贵的 CSS 布局重新计算。
大多数的现代浏览器都可以在执行 transform 动画时利用 GPU 进行硬件加速。
相比之下,像 height 或者 margin 这样的属性会触发 CSS 布局变动,因此执行它们的动画效果更昂贵,需要谨慎使用。我们可以在 CSS-Triggers 这类的网站查询哪些属性会在执行动画时触发 CSS 布局变动。