首页 前端知识 CSS(8)空间转换 动画

CSS(8)空间转换 动画

2024-04-29 12:04:29 前端知识 前端哥 988 51 我要收藏

空间转换:

注:z轴与视线方向相同        别名:3D转换        属性:transform

平移与视距:

因为电脑是二维平面,所以默认下:z轴不可见

因此需要加视距:perspective: ;

视距perspective:

作用:指定了观察者与z=0这一平面的距离,为元素添加透视效果

透视效果:近大远小,近实远虚

属性:(直接添加给父级,取值范围(800~1200))

perspective: 视距;过小变化不明显,过大变化太强烈

平移:

    1.transform: translate3d(x,y,z);
    2.transform: translateX();
    4.transform: translateY();
    5.transform: translateZ();
    6.取值正负均可:1.像素单位数值  2.百分比:参照盒子自身尺寸

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father {
perspective: 1000px;
}
.box {
width: 200px;
height: 200px;
margin: 100px auto;
background-color: pink;
transition: all .5s;
}
.box:hover {
/* 因为电脑是二维平面,因此默认状况下,z轴不可见 */
/* 缺一不生效 */
transform: translate3d(100px,200px,300px);
}
</style>
</head>
<body>
<div class="father">
<div class="box"></div>
</div>
</body>
</html>
复制

旋转:

transform: rotatez():以z轴为轴旋转

transform: rotatex():以x轴为轴旋转

transform: rotatey():以y轴为轴旋转

左手法则:(根据旋转方向确定取值正负)左手握住旋转轴,大拇指指向正值方向,其余4指弯曲方向为旋转正值方向

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
width: 300px;
margin: 100 auto;
/* 视距 */
perspective: 1000px;
}
img {
width: 300px;
transition: all .5s;
}
.box img:hover {
transform: rotateX(60deg);
transform: rotateY(60deg);
}
</style>
</head>
<body>
<div class="box">
<img src="../早柚.gif" alt="">
</div>
</body>
</html>
复制

立体呈现:

transform-style: ;

作用:决定元素的子元素是存在平面中还是立体空间中

属性:flat:子级存在平面中;preserve-3d:子级存于3d空间中

使用方法:

1.直接父级添加transform-style: preserve-3d;

2.子级通过定位到自己应到的位置上

3.调整盒子位置(位移或旋转)

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.cube {
width: 200px;
height: 200px;
margin: 100px auto;
/* background-color: pink; */
transition: all 1s;
transform-style: preserve-3d;
position: relative;
/* 观察Z轴的移动效果 */
/* transform: rotateY(88deg); */
}
.cube div {
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
}
.front {
background-color: orange;
transform: translateZ(100px);
}
.back {
background-color: green;
transform: translateZ(-100px);
}
.cube:hover {
transform: rotateY(90deg);
}
</style>
</head>
<body>
<div class="cube">
<div class="front">前面</div>
<div class="back">后面</div>
</div>
</body>
</html>
复制

缩放:

transform: scaleX();        transform: scaleY();        transform: scaleZ();

z轴缩放要悬停下才能观察到

单位:无,等于1不变,大于1放大,小于1缩小

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
list-style: none;
margin: 0;
padding: 0;
}
.nav {
width: 300px;
margin: 20px auto;
}
.nav ul {
display: flex;
}
.nav li {
width: 100px;
height: 40px;
line-height: 40px;
transition: all .5s;
/* 转3D空间存储 */
transform-style: preserve-3d;
/* 旋转观察 */
/* transform: rotateY(30deg) rotateX(-20deg); */
/* 定位 */
position: relative;
}
.nav li a{
/* 定位 */
position: absolute;
top: 0;
left: 0;
display: block;
width: 100%;
height: 100%;
/* 文本居中 */
text-align: center;
/* 去除下划线 */
text-decoration: none;
color: #fff;
}
/* 立方体的每个面都有独立的坐标轴,互不影响 */
.nav li a:first-child {
background-color: green;
transform: translateZ(20px);
}
.nav li a:last-child {
background-color: orange;
transform: translateY(-20px) rotateX(90deg);
/* 或 */
/* 旋转会改变轴向 */
/* transform: rotateX(90deg) translateZ(20px); */
}
.nav li:hover {
/* 旋转 缩放 */
transform: rotateX(-90deg) scaleX(0.2);
}
</style>
</head>
<body>
<div class="nav">
<ul>
<li>
<a href="#">首页</a>
<a href="#">Index</a>
</li>
<li>
<a href="#">登入</a>
<a href="#">Login</a>
</li>
<li>
<a href="#">注册</a>
<a href="#">Register</a>
</li>
</ul>
</div>
</body>
</html>
复制

动画:

动画属性:animation:动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时状态;

注:
    动画名称和动画时长必须赋值
    取值不分先后顺序
    如果有两个时间值,第一个表示动画时长,第二个表示延长时间
    开始代码和默认样式一样时,开始代码可以省略

实现步骤:1.定义动画    2.使用动画

    1.定义动画:(百分比表示动画时长的百分比)
        @keyframes 动画名称 {               @keyframes 动画名称 {
            from {当前状态的CSS}                 0% {当前状态的CSS}
            to {当前状态的CSS}                   10% {当前状态的CSS}
        }                                                       ····
                                                                100% {当前状态的CSS}
                                                            }
    2.使用动画:
        animation: animation:动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时状态;

例子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 30px;
height: 40px;
background-color: skyblue;
animation: change 3s;
transform-style: preserve-3d;
perspective: 800px;
/* transform: rotateY(20deg); */
}
/* 动画一 */
/* @keyframes change {
from {transform: translateX(0);}
to {transform: translateX(1000px) rotateX(360deg);}
} */
/* 动画二 */
@keyframes change {
0% {transform: translateX(0);}
50% {transform: translateX(500px) scale(1.5) rotateX(360deg);}
100% {transform: translate(500px) scale(1) rotateX(360deg);}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
复制

属性详解:

    动画名称:animation-name

    动画时长:animation-duration

    速度曲线:animation- time-function
        linear:匀速           
        steps(3):分3步完成(配合精灵图完成精灵动画)         
        ease:默认值,动画以低速开始,然后加快,在结束前变慢
        ease-in:动画以低速开始     
        ease-out:动画以低速结束    
        ease-in-out:动画以低速开始,并以低速结束
                补间动画:平滑运动
                逐帧动画:一下一下=》steps(数字)====配合精灵图使用做成精灵动画
                精灵动画:
                    1.准备显示区域
                        盒子尺寸与一张精灵小图尺寸相同
                    2.定义动画
                        移动背景图(移动距离=精灵图宽度)
                    3.使用动画
                        steps(N),N与精灵小图个数相同
    
    延迟时间:animation-delay
        可以为正值也可以为负值。参数值为正时,表示延迟指定时间开始播放;参数为负时,表示跳过指定时间,并立即播放动画。
        例如:animation: change 1s 2s;

    重复次数:animation-iteration-count
        例如:animation: change 1s 3;表示重复3次        infinite一直重复

    播放方向:animation-direction
        normal    以正常的方式播放动画
        reverse    以相反的方向播放动画
        alternate    播放动画时,奇数次(1、3、5 等)正常播放,偶数次(2、4、6 等)反向播放
        alternate-reverse    播放动画时,奇数次(1、3、5 等)反向播放,偶数次(2、4、6 等)正常播放

    结束时的状态:animation-fill-mode
        forwards:动画执行完毕时停在结束状态
        backwards:动画执行完毕时停在开始状态(默认值)

    暂停动画:animation-play-stale: paused(暂停,配合hover使用)

动画与过渡的区别:

过渡:实现两个状态的变化过程

动画:实现多个状态的变化过程,并且过程可控(重复播放,最终画面,是否暂停)

无缝动画——走马灯:

复制开头动画到结尾位置(图片累加宽度=区域宽度)

代码:(用不了的图片可以自己去找一找)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
list-style: none;
margin: 0;
padding: 0;
}
.box {
width: 600px;
height: 112px;
margin: 100px auto;
border: 5px solid #000;
overflow: hidden;
}
ul {
display: flex;
animation: 雷神 5s linear infinite;
}
img {
display: block;
width: 200px;
}
/* 定义动画,给ul使用,鼠标悬停停止 */
@keyframes 雷神 {
from {transform: translateX(0);}
to {transform: translate(-800px);}
}
ul:hover {
animation-play-state: paused;
}
</style>
</head>
<body>
<div class="box">
<ul>
<li><img src="../雷电影.jpg" alt=""></li>
<li><img src="../雷电影3.0.jpg" alt=""></li>
<li><img src="https://pic2.zhimg.com/v2-45249e82081900c9ec94cd1a3ec1ab5e_r.jpg?source=12a79843" alt=""></li>
<li><img src="https://ts1.cn.mm.bing.net/th/id/R-C.6e9f91afdd894711e30aaabcf6e56ae6?rik=NaSOd50Hx9odXg&riu=http://i1.hdslb.com/bfs/archive/3cb9c5fb3fb8f07b13cff8369d4c6c0f38ed26ba.jpg&ehk=Uf74zwTJt9h+fg8FDXuTJW5wzJaz6SV2MGaUcs7LbWo=&risl=&pid=ImgRaw&r=0" alt=""></li>
<!-- 替身,填补露白 -->
<li><img src="../雷电影.jpg" alt=""></li>
<li><img src="../雷电影3.0.jpg" alt=""></li>
<li><img src="https://pic2.zhimg.com/v2-45249e82081900c9ec94cd1a3ec1ab5e_r.jpg?source=12a79843" alt=""></li>
</ul>
</div>
</body>
</html>
复制

精灵动画(动图):

 用速度steps(N)

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.d1 {
width: 140px;
height: 140px;
border: 1px solid #000;
background-image: url(../跑动精灵图.png);
animation: move 1s infinite steps(12);
}
@keyframes move {
from {background-position: 0 0;}
to {background-position: -1680px 0;}
}
.d2 {
width: 50px;
height: 50px;
border: 1px solid #000;
background-image: url(../原神七大元素图标.gif);
animation: run 7s infinite steps(7);
}
@keyframes run {
from {background-position: -50px -20px;}
to {background-position: -550px -20px;}
}
</style>
</head>
<body>
<div class="d1"></div>
<div class="d2"></div>
</body>
</html>
复制

多组动画(跑动的精灵图):

代码:给一个元素用多个动画

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.d1 {
width: 140px;
height: 140px;
/* border: 1px solid #000; */
background-image: url(../跑动精灵图.png);
animation: run 1s infinite steps(12),move 3s forwards;
}
@keyframes run {
from {background-position: 0 0;}
to {background-position: -1680px 0;}
}
@keyframes move {
from {transform: translate(0);}
to {transform: translate(800px);}
}
</style>
</head>
<body>
<div class="d1"></div>
</body>
</html>
复制

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6409.html
标签
less
评论
还可以输入200
共0条数据,当前/页
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!