CSS变形动画
2019-03-22 本文已影响0人
Merbng
过渡动画
css3的特征之一,可以在不使用flash或JavaScript的情况下,当元素从一种样式变换成另一种样式时为元素添加效果。
- 过渡动画:
是从一个状态渐渐的过渡到另一个状态 - 帧动画:
通过一帧一帧的画面按照固定顺序和速度播放,如电影胶片。
transition
- 语法格式:
transition:要过渡的属性 花费时间 运动曲线 何时开始;
如果有多组属性,使用逗号隔开。
1.transition-property
:如果想要所以的属性都变化过渡,写一个all
就可以
2.transition-duration
: 花费时间,单位是秒s
比如:0.5s
这个单位是必须写的,ms
毫秒
3.transition-timing-function
:运动曲线 默认是ease
4.transition-delay
:规定过渡效果何时开始,默认是0
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div{
width: 100px;
height: 100px;
background-color: pink;
/* 多组属性用逗号分隔 */
/* transition: width 0.5s ease 0s ,height 1s ease 0s ; */
transition: all 10s;
/* 过渡写到本身上,谁做过渡动画,就写到谁身上 */
}
div:hover{
width: 800px;
height: 800px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
2D变形(CSS3)transform
transform
是CSS3
具有颠覆性的特征之一,可以实现元素的位移、旋转、倾斜、缩放、甚至支持矩阵方式,配合过渡,可以取代大量之前只能靠Flash
才可以实现的效果。
- 位移 translate(x,y)
x,y可以为负值
translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动)
translateX(x)仅水平方向移动(X轴移动)
translateY(Y)仅垂直方向移动(Y轴移动)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div {
width: 100px;
height: 100px;
background-color: pink;
transition: all .6s;
}
div:hover {
/*transform:位移, 第一个参数 x轴,第二个参数是y轴 */
transform: translate(100px, 200px);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
- 缩放 scale(x,y)
可以对元素进行水平和垂直方向的缩放
scale()
的取值默认值是1
,当值设置为0.01
到0.99
之间的任意值,作用是使一个元素缩小,而任何大于1.01
的值是让元素方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div {
width: 382px;
height: 260px;
border: 1px solid red;
overflow: hidden;
}
div img {
transition: all 1.6s;
}
div:hover img {
transform: scale(1.1);
}
</style>
</head>
<body>
<div><img src="images/1.jpg" alt=""></div>
</body>
</html>
- 旋转 rotate(deg)
可以对元素进行旋转,正值为顺时针,负值为逆时针;
单位是deg
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div img {
width: 100px;
height: 100px;
transition: all .6s;
}
div:hover img {
transform: rotate(720deg);
}
</style>
</head>
<body>
<div><img src="images/fengche.png"></div>
</body>
</html>
transform-origin
可以调整元素转换变形的原点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div img {
width: 100px;
height: 100px;
transition: all .6s;
/* 设置旋转中心点为 右下角 */
transform-origin: right bottom;
}
div:hover img {
transform: rotate(720deg);
}
</style>
</head>
<body>
<div><img src="images/fengche.png"></div>
</body>
</html>
- 倾斜 skew(deg,deg)
可以使元素一定的进度进行倾斜,可以为负值,第二个参数不写默认为0
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
div {
width: 200px;
height: 200px;
margin: 130px auto;
background-color: pink;
transition: all .5s;
}
div:hover {
transform: skew(-720deg, 720deg);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
3D变形(CSS3)transform
2d x y
3d x y z
x左边是负的,右边是正的
y 上面是负的,下面是正的
z 里面是负的,外面是正的
- rotateX()
沿着x 立体旋转
transform:rotateX(180deg)
- rotateY()
沿着Y轴旋转 - rotateZ()
沿着Z轴旋转 - 透视(perspective)
原理:
-- 近大远小
-- 浏览器透视:把近大远小的所有图像,透视在屏幕上
--perspective:视距,表示视点距离屏幕的长短,视点,用于模拟透视时人眼的位置。
设置给父元素,作用于所有用于3D转换的子元素 - translateX()
仅水平方向移动(x轴移动) - translateZ
- backface-visibility
定义当元素不面向屏幕时是否可见
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<style type="text/css">
body {
perspective: 500px;
}
div {
width: 224px;
height: 224px;
margin: 100px auto;
position: relative;
}
div img {
position: absolute;
top: 0;
left: 0;
transition: all 1s;
}
div img:last-child {
/* 当定义的元素不面向屏幕时 是否可见 */
backface-visibility: hidden;
z-index: 1;
}
div:hover img {
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div>
<img src="images/qian.svg" alt="">
<img src="images/hou.svg" alt="">
</div>
</body>
</html>
- @keyframes 动画名称{
from{开始位置 } 0%
to{ 结束} 100%
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
img {
/* 动画名称 花费时间 运动曲线 何时开始 播放次数 是否反方向 */
animation: heart 1s linear 0s infinite alternate;
}
div {
width: 100px;
height: 100px;
background-color: pink;
margin: 50px auto;
animation: heart 1s ease 0s infinite alternate;
}
@keyframes heart {
0% {
transform: scale(1.0);
}
50% {
transform: scale(1.3);
}
100% {
transform: scale(1.0);
}
}
</style>
</head>
<body>
<img src="images/heart.png">
<div></div>
</body>
</html>
参考地址
待续:2019年3月22日18:04:58
新增:2019年3月24日22:02:44