CSS3学习总结3-3D与动画

前言:这是篇CSS3中关于3D效果与动画相关的内容。

(1)在CSS3的3D效果中,需要结合透视perspective的属性才能看到3d的效果,这个属性在屏幕上实现了元素近大远小的效果,所以要使用CSS3的3d相关属性,需要记得写perspective。

(2)在CSS3的3d坐标系与数学中的坐标系有所区别,主要是在y轴正方向的规定上。

  • x轴正方向:从左往右
  • y轴正方向:从上至下
  • z轴正方向:从里至外

旋转

在C3的2D变换中,rotate代表了元素围绕Z轴旋转一个角度,3d中还有围绕X和Y轴旋转。

1.rotateX:值 单位:deg

让元素围绕着X轴进行旋转

  • 人眼正视X轴正方向,正值是顺时针方向,负值时逆时针方向。
  • 没有透视的3D是看不出来方向
  • 加perspective后看到的效果就是正值元素向屏幕里倒,负值向屏幕外倒。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            perspective: 600px;
        }
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            margin: 100px auto;
            transform: rotateX(45deg);
            transition: all ease .5s;
        }
        .box:hover{
            transform: rotateX(-45deg);
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

2.rotateY:值

围绕着Y轴进行旋转

  • 正数是逆时针 (站在右边推门),负数是顺时针(站在左边推门)
  • 人眼正视y轴正方向,正值是顺时针方向,负值时逆时针方向。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            perspective: 600px;
        }
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            margin: 100px auto;
            transform: rotateY(45deg);
            transition: all ease .5s;
        }
        .box:hover{
            transform: rotateY(-45deg);
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

3.rotate3d(x,y,z,deg);

rotate3d将rotateX,rotateY,rotateZ3个属性结合起来写,它的参数值x、y、z表示了旋转的3个方向,取值是0~1,deg表示了旋转的角度。(这个属性的具体用法目前不太会使用,使用时经常不能出现预期结果,可能使用方式不对,以后研究。)

平移

在2d变换中translateX和translateY,代表沿X轴和Y轴平移,3d中还有translateZ,沿Z轴平移。

translateZ

就是在Z轴上来回移动,但是如果没有透视的情况下,完全看不出效果,所以,一般transform:translateZ()都是配合透视一起使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            perspective: 900px;
        }
        .box{
            width: 200px;
            height: 200px;
            background-color: red;
            margin: 100px auto;
            transition: all 2s;
        }
        .current{
            /*transform: rotateX(360deg) translateZ(500px);*/
            transform:translateZ(500px) rotateX(360deg);
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <button>点我呀</button>
    <script type="text/javascript">
    var btn = document.querySelector(‘button‘);
    var box = document.querySelector(‘.box‘);
    btn.onclick = function(){
        box.classList.add(‘current‘);
    }
    </script>
</body>
</html>

其它:translateZ和rotate结合会产生不一样的3D效果,不同的顺序的效果截然不同,如果先rotate 在translateZ 元素是在空间里面发生旋转 而如果是translateZ在rotate 元素是在直线上发生旋转。

其它3D相关属性

1.透视:perspective:值

距离屏幕的多远看元素,实现近大远小的效果。

说明:透视值越小,透视效果越强,值越大,透视效果越弱,透视添加在父级身上

2.透视点 perspective-origin:值

最后看看到透视消失的地方,值可以是像素,也可以是百分比,还可以是方位名词,默认值是50%,50%(中心点)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{
            width: 155px;
            height: 220px;
            border: 1px solid #000;
            margin: 100px auto;
            /* 说明:透视值越小,透视效果越强,值越大,透视效果越弱,透视添加在父级身上 */
            perspective: 1px;
            perspective-origin: 50% 50%;
        }
        img{
            transition: all 1s;
            transform-origin: bottom;
        }
        .box:hover img{
            transform: rotateX(45deg);
        }
    </style>
</head>
<body>
    <div class="box">
        <img src="image/shu.jpg" alt="">
    </div>
</body>
</html>

3.transform-style

规定被嵌套元素如何在3D空间中显示:flat是默认值,让子元素不保留其3D位置, preserve-3d 让子元素保留其3D位置 ,加在父亲身上.

小总结:透视 灭点 transform-style都是添加在父级身上,当元素发生3D翻转的时候,整个坐标系也跟着发生了翻转。

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            perspective: 900px;
        }
        .box{
            width: 400px;
            height: 400px;
            border: 1px solid #000;
            margin: 100px auto;
            perspective: 900px;
            transform: rotateY(70deg);
            transform-style: preserve-3d;
        }
        .box1{
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 50px auto;
            transform: rotateX(45deg);
            transform-origin: top;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1"></div>
    </div>
</body>
</html>

动画 animation:值

animation属性有8个参数值:

  1. animation-name:自定义动画名
  2. animation-duration:动画的持续时间 单位是s或者ms
  3. animation-timing-function:动画的曲线
  4. animation-delay:动画从何时开始
  5. animation-iteration-count:控制动画执行的次数 没有单位, 一直执行:infinite
  6. aniamtion-direction:控制动画是否逆序播放 默认值normal 逆序:alternate
  7. animation-play-state:控制动画的播放和暂停 默认值是播放:running 暂停:paused
  8. animation-fill-mode:动画最后的停留位置 forwards 让动画停留在最后一帧

动画一定要先写animation 然后搭配@keyframes去写自定义的动画。 注意:animation和@keyframes最好都添加私有前缀。 示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            position: absolute;
            left: 100px;
            top: 100px;
            background-color: pink;
            /* -webkit-animation: feifei 2s linear 0s;
            -moz-animation: feifei 2s linear 0s;
            -ms-animation: feifei 2s linear 0s;
            -o-animation: feifei 2s linear 0s; */
            animation: feifei 2s linear 0s;
        }
        /* 单组动画 */
        @keyframes feifei{
            from{
                width: 200px;
                height: 200px;
                transform: rotate(0deg);
            }
            to{
                width: 400px;
                height: 400px;
                transform: rotate(360deg);
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

如果使用@keyframes规定了多组动画规则,animation也可以同时添加这些组动画,之间只需要用‘,’隔开即可。

时间: 2024-10-10 06:23:54

CSS3学习总结3-3D与动画的相关文章

CSS3学习手记(11) 动画

CSS3 动画 使元素从一种样式逐渐变化为另一种样式的效果 兼容性 IE10.FireFox16+ Chrome43+ Safari9+ OPera30+ Android(-webkit-) animation animation-name属相检索或设置所应用的动画名称 语法 animation-name:keyframename|none 参数说明 keyframename 指定要绑定到选择器的关键帧的名称 none:指定有没有动画 animation-duration属性检索或设置对象动画的

JS框架_(JQuery.js)绚丽的3D星空动画

绚丽的3D星空动画效果(纯CSS) (3D星空动画可以用作网页背景,Gary为文本文字) <!doctype html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name=

CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边框 4.1.border-radius 圆角 4.2.边框图片border-image 五.变形 transform 5.1.rotate()2D旋转 5.2.设置原点 transform-origin 5.3.平移 translate() 5.4.缩放 scale 5.5.斜切扭曲skew 六.渐变

CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边框 4.1.border-radius 圆角 4.2.边框图片border-image 五.变形 transform 5.1.rotate()2D旋转 5.2.设置原点 transform-origin 5.3.平移 translate() 5.4.缩放 scale 5.5.斜切扭曲skew 六.渐变

基于HTML5/CSS3可折叠的3D立方体动画

今天要给大家带来另外一款CSS3 3D立方体动画,尤其在DEMO2中可以看到,鼠标滑过立方体后,它将会被打开,从里面弹出另外一个小立方体,动画效果非常酷,非常逼真. 在线预览   源码下载 实现的代码. html代码: <div class="content bgcolor-1"> <h2 class="center"> Depth Cube</h2> <div style="height: 300px; marg

HTML5与CSS3权威指南之CSS3学习记录

title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) 官方网站: 华章图书 书中所有代码下载链接: 链接:http://pan.baidu.com/s/1c0oGMn2 密码:f7zt 选择器 属性选择器 [att=val]选择器--选择属性att值为val的元素 [att*=val]选择器--选择属性att值包含val的元素 [att^=val]选择器--选

CSS3 skew倾斜、rotate旋转动画

css3出现之前.我们实现一个对象的一组连续动画须要通过JavaScript或Jquery编写,脚本代码较为复杂: 若须要实现倾斜.旋转之类的动画难度将更高(我还没试过用JavaScript或Jquery怎样实现),并且即使能实现预计花的时间代价及维护难度是非常大的,非常多时候仅仅能依靠绘图工具制作此类动画文件: 有时候在想假设不用脚本语言,也不用绘图工作制作动画文件.就能在网页上实现倾斜.旋转之类的动画效果多好. 近期挤出一些业余时间学习CSS3,当中就包括非常多动画演示样例,花了点时间学习和

透过HT for Web 3D看动画Easing函数本质

http://www.hightopo.com/guide/guide/plugin/form/examples/example_easing.html 50年前的这个月诞生了BASIC这门计算机语言,回想起自己喜欢上图形界面这行,还得归功于当年在win98下用QBASIC照葫芦画瓢敲了一段绘制奥运五环的代码,当带色彩的奥运五环呈现在自己面前时我已知道自己这辈子要走的路了.在这个忘本逐新的年代不见多少媒体提及这影响了几代人的BASIC语言的50年庆了. 如今消费者对用户体验的高要求,以远不能以静

CSS3学习笔记

这两天的CSS3学习笔记: 慕课网课程地址: http://www.imooc.com/learn/33 笔记: 边框: 圆角效果border-radius:同border相同的缩写方式: 阴影box-shadow: 参数说明: 说明: 单位除了用px也可以用百分比: 多个阴影:用逗号隔开即可: 模糊半径与扩展半径的区别: 阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊: 阴影扩展半径:此参数可选,其值可以是正负值,如果值为正,则整

透过WebGL 3D看动画Easing函数本质

50年前的这个月诞生了BASIC这门计算机语言,回想起自己喜欢上图形界面这行,还得归功于当年在win98下用QBASIC照葫芦画瓢敲了一段绘制奥运五环的代码,当带色彩的奥运五环呈现在自己面前时我已知道自己这辈子要走的路了.在这个忘本逐新的年代不见多少媒体提及这影响了几代人的BASIC语言的50年庆了. 如今消费者对用户体验的高要求,以远不能以静态平面图形打动人心,动画已是衡量前端产品用户体验不可忽视的重要因素,最近Facebook开源的Pop动画框架已发了iOS业界极大的关注,其实Apple早在