程序员

1-2-12【CSS3】CSS的3D转换

2020-11-09  本文已影响0人  Liyager

题外话:懒了好几天了,今天接着肝


文章内容输出来源:拉勾教育大前端就业集训营

1.概述

说明:“近大远小”是透视的精髓,也是在2D屏幕上展示3D效果的必要条件。

2.透视属性perspective

说明:你会发现透视和没有透视好像没有区别?因为图像的z轴方向没有发生任何变化,所以和2D图像看起来一样。

3.3D旋转

属性值 说明
rotateX(angle) 定义沿着X轴的3D旋转
rotateY(angle) 定义沿着Y轴的3D旋转
rotateZ(angle) 定义沿着Z轴的3D旋转

说明:在做3D转换的时候,脑子里一定要有这个坐标系,其实很简单,记住坐标轴正负和方向就好。

一个简单的案例
<!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>
         *{
            margin: 0px;
            padding: 0px;
        }
        div{
            perspective: 1000px;
            margin: 350px auto;
        }
        img{
            /* 为了居中设定的属性 */
            position: relative;
            left: 50%;
            margin-left: -150px;
            width: 300px;
            /* 过渡 */
            transition: all 0.2s linear 0s;
        }
        img:hover{
            transform: rotateX(40deg);
        }
    </style>
</head>
<body>
    <div>
        <img src="cat01.jpeg" alt="">
    </div>
</body>
</html>

说明:因为只对X轴进行了旋转,且X轴的“旋转正方向”为垂直图片向里,所以我们感觉图片上半部分离我们更远了。

透视距离设置过小的结果

说明:上面讲perspective属性时提到,该属性的属性值相当于我们的观察位置,所以距离过小会出现如图所示的情况。
一般来说,我们设定1000px就可以了。

4.3D位移

属性值 说明
translateX(x) 定义沿着X轴的位移
translateY(y) 定义沿着Y轴的位移
translateZ(z) 定义沿着Z轴的位移
一个简单的案例
<!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>
         *{
            margin: 0px;
            padding: 0px;
        }
        div{
            perspective: 1000px;
            margin: 350px auto;
        }
        img{
            /* 为了居中设定的属性 */
            position: relative;
            left: 50%;
            margin-left: -150px;
            width: 300px;
            /* 过渡 */
            transition: all 0.2s linear 0s;
        }
        img:hover{
            transform: translateZ(100px);
        }
    </style>
</head>
<body>
    <div>
        <img src="cat01.jpeg" alt="">
    </div>
</body>
</html>

说明:该案例对图片在Z轴进行了100px的位移,因为Z轴的正方向为垂直于图片向外,所以看起来图片变大了。

一个炫酷的案例
<!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>
    /* 取消默认样式 */
    *{
        margin: 0px;
        padding: 0px;
    }
    /* 父盒子 */
    .f-box{
        position: relative;
        width: 200px;
        height: 200px;
        margin: 200px auto;
        perspective: 5000px;
        transition: all 2.5s ease-in-out 0s;
        /* 这个特殊属性,下面会讲,记住了 */
        transform-style: preserve-3d;
    }
    /* 子盒子统一属性 */
    .f-box div{
        position: absolute;
        width: 200px;
        height: 200px;
        left: 0px;
        top: 0px;
        text-align: center;
        line-height: 200px;
        font-size: 70px;
    }
    /* 子盒子独特属性 */
    .c-box1{
        background-color: rgba(231, 45, 45, 0.521);
        transform: translateZ(100px)
    }
    .c-box2{
        background-color: rgba(231, 150, 45, 0.521);
        transform: rotateX(90deg) translateZ(100px);
    }
    .c-box3{
        background-color: rgba(219, 231, 45, 0.521);
        transform: rotateX(180deg) translateZ(100px);
    }
    .c-box4{
        background-color: rgba(119, 231, 45, 0.521);
        transform: rotateX(270deg) translateZ(100px);
    }
    .c-box5{
        background-color: rgba(45, 88, 231, 0.521);
        transform: rotateY(90deg) translateZ(100px);
    }
    .c-box6{
        background-color: rgba(172, 45, 231, 0.521);
        transform: rotateY(-90deg) translateZ(100px);
    }
    /* 旋转 */
    .f-box:hover {
        transform: rotateX(360deg) rotateY(360deg);
    }
    </style>
</head>
<body>
    <div class="f-box">
        <div class="c-box1">1</div>
        <div class="c-box2">2</div>
        <div class="c-box3">3</div>
        <div class="c-box4">4</div>
        <div class="c-box5">5</div>
        <div class="c-box6">6</div>
    </div>
</body>
</html>

说明:先用定位将6个面放到一起;然后用3D转换,将6个面各自摆放在正确的位置上;最后将父元素进行3D旋转,实现酷炫的3D效果。

transform-style属性

说明:父元素没有设置该属性,则子元素都会像纸片一样。

兼容性

前端文章汇总目录

https://www.jianshu.com/p/6d80dd616ff4


结束语:一花一世界,一木一浮生,愿与诸君共勉

上一篇 下一篇

猜你喜欢

热点阅读