Web学习路线笔记(八)css3动画

第八天

css3动画

1.变形(transform)
以下是transform 的属性值

translate(x,y) 定义2D转换,沿着X和Y轴移动元素。
即向x 或者 y 轴平移
可以带一个参数,带一个参数则是x轴平移,y轴不动
translateX(n) 定义2D转换,沿着X轴移动元素
translateY(n) 定义2D转换,沿着Y轴移动元素

在这里插入图片描述

scale(x,y) 定义2D缩放转换,改变元素的宽度和高度。
即缩放/放大
可以带一个参数,带一个参数则是x,y轴都放大或缩小这个倍数
可以使用小数,使用小数时,前面的0可以省略
scaleX(n) 定义2D缩放转换,改变元素的宽度
scaleY(n) 定义2D缩放转换,改变元素的高度

在这里插入图片描述

rotate(angle) 定义2D旋转,在参数中规定角度
角度可以使用负数,范围(-360deg-360deg)
rotateX是3D旋转,往往和perspective结合使用,见下一点

在这里插入图片描述

skew(x-angle,y-angle) 定义2D倾斜转换,沿着X轴和Y轴
即扭曲。
可带一个参数,带一个参数时候,x方向扭曲,y方向不扭曲。
skew(x-angle) 定义2D倾斜转换,沿着X轴
skew(Y-angle) 定义2D倾斜转换,沿着Y轴

在这里插入图片描述

在这里插入图片描述

matrix(n,n,n,n,n,n)定义2D转换,使用6个值的矩阵
每次旋转和扭曲都会产生一个新矩阵,最终形成得多个矩阵要做乘法运算.
如果对一个元素同时有旋转、扭曲、缩放和位移,这里需要用到多个矩阵相乘,要优先考虑旋转和缩放!!!!

在这里插入图片描述

在这里插入图片描述

tip:厂商兼容前缀:

谷歌/苹果 -webkit-
火狐 -moz-
IE -ms-
欧朋 -o-

在这里插入图片描述

需求:将div右移100px,下移200px,旋转30度,x轴缩放1.5倍,y轴缩放2倍。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两种方法的大致效果如下:
在这里插入图片描述
2.transform-origin :调整元素的基点

属性值:
x-axis:定义视图被置于X轴的何处。
可能的值:left,center,right,length,%
y-axis:定义视图被置于Y轴的何处
可能的值:top,center,bottom,length,%
z-axis:定义视图被置于Z轴的何处
可能的值:length
eg:
transform-origin: left top;

3.perspective

让子元素获得透视效果。
perspective:number|none;
主流浏览器都不支持,谷歌需要加-webkit-.或在后面加px长度单位

用法:

!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>
    <style>
        .demo {
            margin: 0 auto;
            width: 400px;
            height: 300px;
            border: 1px solid #ccc;
            position: relative;
            padding: 20px;
            perspective: 100px;
        }
        
        .div1 {
            width: 200px;
            height: 300px;
            border: 1px solid #f0f;
            background-color: #0ff;
            position: absolute;
            left: 50%;
            margin-left: -100px;
            transform: rotateX(40deg);
        }
    </style>
</head>

<body>
    <div class="demo">
        <div class="div1"></div>
    </div>
</body>

</html>

4.transform-style

规定如何在3D空间中呈现被嵌套的元素
注释:该属性必须和transform属性一同使用
语法:transform-style:flat|prespective
flat:默认值,子元素不再保留3d位置
preserve-3d:子元素报留3d位置。

例子:
在这里插入图片描述
在这里插入图片描述
5.rotate-Z

3d空间旋转的角度,沿着垂直于Z轴的方向顺时针旋转。

画一个立方体,请看代码实例效果:

<!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">
    </style>
    <title>Document</title>
    <style>
        .container {
            position: relative;
            perspective: 1000px;
            width: 200px;
            height: 200px;
            margin: 200px auto;
        }
        
        .container div {
            position: absolute;
            width: 200px;
            height: 200px;
            border: 1px solid #000;
            text-align: center;
        }
        
        .pre {
            background: rgba(43, 255, 0, 0.5);
            transform: rotateY(0) translateZ(200px);
        }
        
        .back {
            background: rgba(43, 255, 0, 1);
            transform: rotateY(180deg) translateZ(0);
        }
        
        .left {
            left: -100px;
            background: rgb(214, 10, 170);
            transform: rotateY(-90deg) translateX(100px);
        }
        
        .right {
            left: 100px;
            background: rgb(214, 211, 10);
            /* 因为从中心点开始旋转的 所以要往外移动100px */
            transform: rotateY(90deg) translateX(-100px);
        }
        
        .top {
            top: 100px;
            transform: rotateX(90deg) translateY(100px);
            background-color: rgb(49, 12, 211);
        }
        
        .bottom {
            bottom: 100px;
            transform: rotateX(-90deg) translateY(-100px);
            background-color: rgb(6, 15, 92);
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="pre">1</div>
        <div class="back">2</div>
        <div class="left">3</div>
        <div class="right">4</div>
        <div class="top">5</div>
        <div class="bottom">6</div>
    </div>
</body>

</html>

实际效果:
在这里插入图片描述
6. 过渡动画

1.常规用法:
transition-property;
transition-duration
transition-timing-function
transition-delay

2.简洁(复合)用法:
transition:property-name-list|all duration time-function delay;

a.可以使用的属性有:
1)颜色
color background-color border-color outline-color
2)位置
background-position:left right top bottom
3)长度
max-height min-height max-width min-width
height width
border-width margin pading outline-width
outline-offset font-size line-height
text-indent vertical-align border-spacing
letter-spacing word-spacing
4)数字
opacity visibility z-index font-weight zoom
5)组合
text-shadow transform box-shadow clip
6)其他
gradient

b)duration:动画持续时间 ,一般以秒(S)或毫秒(ms)为单位

c) timing-function: 动画函数
1) linear:匀速
2) ease :变速(先慢后快,最后再慢)
3)ease-in :变速(由慢到快)
4)ease-out : 变速(由快到慢)
5)ease-in-out :(慢速开始,慢速结束)
6)cubic-bezier(n,n,n,n):自行设定变速,n的值在0-1之间

d) delay : 动画延时时间,一般以秒(S)或毫秒(ms)为单位

tips:
如果没学js的button,可以用hover暂时代替一下

用法:

transition: all 2s ease 500ms;

在这里插入图片描述

7.帧 动 画

步骤1: 设置关键帧

a)如果只有2个关键帧:
@keyframes 动画名{
0%:{样式表}
100%:{样式表}
}
或:
@keyframes 动画名{
from:{样式表}
to: {样式表}
}

b)如果有多个关键帧
@keyframes 动画名 {
0%:{样式表}
30%:{样式表}

100%:{样式表}
}
注意:这里的百分比一般是升序,可以是0%-100%之间的任意值,也可以是倒叙。

步骤二 : 实施动画

a)常规用法
animation-name:
来自于@keyframes定义的动画名 —无默认值
animation-duration:
动画的持续时间,一般以秒(s)或毫秒(ms)为单位----默认值0
animation-timing-function:
动画函数:
1)linear:匀速 ----默认值匀速
2)ease: 变速(先慢后快,最后再慢)
3)ease-in:变速(由慢到快)
4)ease-out:变速(由快到慢)
5)ease-in-out:变速(慢速开始,慢速结束)
6)cubic-bezier(n,n,n,n):自行设置速度,n的值在0-1之间。
animation-delay:
动画延迟时间,一般以秒(s)或者毫秒(ms)为单位
---------默认值不延迟
animation-iteration-count:
动画重复的次数 ---------默认值0次
1)number:设定重复播放的次数
2)infinite:一直循环播放
animation-direction :
动画播放完后是反向播放
1)normal:不反向 -----默认值不反向
2)alternate: 反向
animation-play-state :
设置播放|暂停
1)paused : 暂停播放
2)running :播放 (默认值)

b) 简洁用法
animate : name duration timing-function delay
iteration-count direction

tips:

animate-play-state 是单独设置的
如果没有用到js,可以暂时使用hover 实现类似的效果
最好使用绝对相对定位以便于使用 left等操作。
也可以使用transform 里的 translate(平移实现2d或者3d操作)

用法示例:

<!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>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }
        
        .container {
            position: relative;
            width: 100%;
            height: 800px;
            border: 1px solid #eee;
        }
        
        @keyframes moverotate {
            0% {
                left: 0;
                transform: rotate(0deg);
            }
            25% {
                left: 200px;
                transform: rotate(90deg);
            }
            50% {
                top: 200px;
                transform: rotate(180deg);
            }
            75% {
                left: 0px;
                transform: rotate(270deg);
            }
            100% {
                top: 0px;
                transform: rotate(360deg);
            }
        }
        
        .div1 {
            margin: 200px auto;
            position: absolute;
            width: 200px;
            height: 200px;
            border: 2px solid skyblue;
            box-shadow: 2px 2px 2px #ccc;
            border-radius: 50%;
            background: url(img/circle.jpg) skyblue;
            background-size: 100% 100%;
            animation: moverotate 5s linear 100ms infinite;
        }
        
        .pause:hover+.div1 {
            animation-play-state: paused;
            -webkit-animation-play-state: paused;
        }
        
        .run:hover+.div1 {
            animation-play-state: running;
            -webkit-animation-play-state: running;
        }
        
        button {
            width: 100px;
            height: 100px;
            margin: 100px auto;
            z-index: 5;
        }
    </style>

</head>

<body>
    <div class="container">
        <button class="pause">暂停</button>
        <button class="run">开始</button>
        <div class="div1"></div>
    </div>
</body>

</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

godlike-icy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值