动画和过渡
先举个例子,动画--实现上下无限跳动

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.arrow {
position: absolute;
bottom: 15%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
margin-left: -1%;
animation-name: beat;
/*动画名称*/
animation-duration: .5s;
/*设置秒数*/
animation-timing-function: linear;
/*速度曲线*/
animation-iteration-count: infinite;
/*播放次数*/
animation-direction: alternate;
/*逆向播放*/
animation-play-state: running;
/*正在运行*/
}
@keyframes beat {
0% {
bottom: 15%;
}
100% {
bottom: 14%;
}
}
.arrow img {
width: 30px;
}
</style>
<body>
<div class="arrow">
<img src="https://sucai.suoluomei.cn/sucai_zs/images/20191107114906-sjt.png" alt="">
</div>
</body>
</html>
animation属性类似于transition,都是随着时间改变元素的属性值。
区别如下:
transition需要触发一个事件才会随着时间改变其CSS属性
animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果
1、动画不需要事件触发,过渡需要
2、过渡只有一组(两个:开始-结束) 关键帧,动画可以设置多个
transition 过渡效果,举个例子:鼠标滑过时字体颜色变红色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
div:hover {
color: red;
}
div {
/*执行过渡的属性,例子设置为颜色color的变化,也可以是width, font-size等,不设置的话默认是all,即所有属性*/
transition-property: color;
/*过渡的时间,单位是秒,如1s, 2.3s,不设置的话默认 0s,即无过渡效果*/
transition-duration: 2s;
/*设置过渡时的变化方式,默认是 ease,即速度由慢到快再到慢,常用的还有 linear,线性变化速度均匀,还有其他几个方式,过渡时间短的话看不出什么区别*/
transition-timing-function: linear;
/*延迟时间,即多少秒后执行过渡效果,默认 0s,不延迟*/
transition-delay: 0;
}
/*过渡简写方式*/
/* div {
transition: color 2s linear 0;
} */
/*或最少指定过渡时间*/
/* div {
transition: 2s;
} */
/*也可以设置每个样式分别过渡*/
/* div {
transition: color 2s linear, font-size 1s, background 1s;
} */
/*由于是新特性,为了兼容性需要加上浏览器厂商前缀*/
div {
transition: 2s;
-webkit-transition: 2s;
-moz-transition: 2s;
-ms-transition: 2s;
-o-transition: 2s;
}
</style>
<body>
<div>鼠标滑过过渡变红</div>
</body>
</html>
例如:鼠标悬停图片放大
#div1 img{ cursor: pointer; transition: all 1.1s; } #div1 img:hover{ transform: scale(1.2); }
例如:元素的旋转和缩放
transfrom是css3里面的属性,主要是运用于元素的2D或3D转换,它可以将元素旋转、缩放、移动和倾斜。
div{ transform:rotate(7deg); //2D旋转,括号参数为角度 }
transfrom属性的默认值为none,意义为不进行转换。
transfrom属性有很多,能够支持我们做一些简单的2d和3d动画,例如:一个不断旋转的立方体
在使用transfrom来制作简单的3D动画之前,得需要了解到transfrom的常用属性:
translateX(x) 定义转换,只是用 X 轴的值,表示在二维平面上水平方向移动元素,括号里的值是移动的像素 单位 px。

translateY(y) 定义转换,只是用 Y 轴的值,表示在垂直方向上移动,括号里面的值和**translateX(x)**里面括号的值是一个意思,不过数值越大越往下走

translateZ(z) 定义 3D 转换,只是用 Z 轴的值
rotateX(angle) 定义沿着 X 轴的 3D 旋转,angle代表的是旋转的角度

rotateY(angle) 定义沿着 Y 轴的 3D 旋转
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转
animation 动画效果,举个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/*定义好关键帧后就直接在需要应用动画的元素标签内使用*/
div {
/*就是之前跟在@keyframea后面的自定义名称,之前设置的是 my-animation*/
animation-name: my-animation;
animation-duration: 3s;
animation-timing-function: ease;
/*和前面一样,默认分别为 0, ease, 0*/
animation-delay: 0;
/*动画播放的次数,默认 1,但一般设置为 infinite,即无限循环*/
animation-iteration-count: 3;
/*动画播放的方向,normal为默认,正向播放,reverse为反向播放,alternate为正向后反向,alternate-reverse为反向后正向*/
animation-direction: normal;
/*播放状态,默认 running,运行,paused为暂停,可以在JavaScript中使用对动画进行控制*/
animation-play-state: running;
}
/*定义的简写方法---animation-name 和 animation-duration为必须设置的属性*/
/* div{
animation: my-animation 3s linear infinite alternate;
} */
/*实现CSS动画也需要设置关键帧 @keyframes*/
@keyframes my-animation {
0% {
color: red;
}
50% {
color: green;
}
100% {
color: blue;
}
}
/*@keyframes后面跟的是自定义的动画名称,后面会用到。里面的0%,50%,100%便是设置的三个关键帧及其对应样式,如果只需要设置首尾两个关键帧,可以这样写*/
@keyframes my-animation {
from {
color: green;
}
to {
color: blue;
}
}
/*最后浏览器兼容*/
div {
transition: 2s;
-webkit-transition: 2s;
-moz-transition: 2s;
-ms-transition: 2s;
-o-transition: 2s;
}
</style>
<body>
<div>css动画</div>
</body>
</html>
demo案例:

类似小狗这种效果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/*定义好关键帧后就直接在需要应用动画的元素标签内使用*/
.walkthrough {
animation-name: walk;
animation-duration: 8s;
animation-timing-function: linear;
animation-delay: 0.5s;
animation-iteration-count: infinite;
}
/*实现CSS动画也需要设置关键帧 @keyframes*/
@keyframes walk {
0% {
position: absolute;
left: 0;
}
48% {
position: absolute;
transform: rotateY(0deg);
}
50% {
position: absolute;
left: 28rem;
transform: rotateY(180deg);
}
100% {
position: absolute;
left: 0;
transform: rotateY(180deg);
}
}
/*最后浏览器兼容*/
.walkthrough {
transition: 2s;
-webkit-transition: 2s;
-moz-transition: 2s;
-ms-transition: 2s;
-o-transition: 2s;
}
/*1.最初写的时候, 在 50%处设置了 rotateY(180deg) ,所以会在 0 -> 50%的时候缓动翻转。为了避免, 选择了使其在快到50%前都还是未翻转的状态。(48%处添加的css)*/
/*2.在50%处翻折过后, 返回的过程中又进行了一次翻折。折腾后发现, 最终状态 100% 也是需要写上图片状态*/
</style>
<body>
<div style="border: 1px solid red;width:50px;height:20px;text-align: center;" class="walkthrough">
动画
</div>
</body>
</html>
浙公网安备 33010602011771号