CSS 详细深入理解3D转换模块

什么是2D和3D

2D就是一个平面, 只有宽度和高度, 没有厚度 3D就是一个立体, 有宽度和高度, 还有厚度 默认情况下所有的元素都是呈2D展现的

如何让某个元素呈3D展现

和透视一样, 想看到某个元素的3d效果, 只需要给他的父元素添加一个transform-style属性, 然后设置为preserve-3d即可

2D效果:

3D效果:

对比很明显,3D显示能展现出子元素穿插父元素,而2D显示,把元素都局限在了一个平面上,所以,3D模块让元素有了一个“厚度”属性,而2D模块仅仅只有长度和宽度属性,这就是他们两者的区别。

3D模块写法:

.father{
            width: 200px;
            height: 200px;
            background-color: red;
            border: 1px solid #000;
            margin: 100px auto;
            perspective: 500px;
            /*
          想看到某个元素的3d效果, 只需要给他的父元素添加一个transform-style属性,
            然后设置为preserve-3d即可
            */
            transform-style: preserve-3d;
            transform: rotateY(0deg);
        }

注意是父元素!!!

在平时的应用中,3D模块常常用于做正方体或者长方体,要实现这个,他就要它transform中的translate属性联合使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>108-3D转换模块-正方体终极</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        ul{
            width: 200px;
            height: 200px;
            border: 1px solid #000;
            box-sizing: border-box;
            margin: 100px auto;
            position: relative;
            transform: rotateY(0deg) rotateX(0deg);
            transform-style: preserve-3d;
        }
        ul li{
            list-style: none;
            width: 200px;
            height: 200px;
            font-size: 60px;
            text-align: center;
            line-height: 200px;
            position: absolute;
            left: 0;
            top: 0;
        }
        ul li:nth-child(1){
            background-color: red;
            transform: rotateX(90deg) translateZ(100px);
        }
        ul li:nth-child(2){
            background-color: green;
            transform: rotateX(180deg) translateZ(100px);
        }
        ul li:nth-child(3){
            background-color: blue;
            transform: rotateX(270deg) translateZ(100px);
        }
        ul li:nth-child(4){
            background-color: yellow;
            transform: rotateX(360deg) translateZ(100px);
        }
        ul li:nth-child(5){
            background-color: purple;
            transform: translateX(-100px) rotateY(90deg);
        }
        ul li:nth-child(6){
            background-color: pink;
            transform: translateX(100px) rotateY(90deg);
        }

    </style>
</head>
<body>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
</body>
</html>

这里面需要注意的是,在元素发生旋转之后,它的坐标轴也会随之旋转,自己要模拟一下。

猜你喜欢

转载自blog.csdn.net/mengxianglong123/article/details/84330702
今日推荐