html5css3项目6:3D的项目有两面翻转的盒子、3D导航栏、旋转木马

1、两面翻转的盒子

思路:
先设置一个父盒子,然后添加两个子盒子,这两个子盒子都要设置为定位,因为这样这两个才能重叠起来,如果想要实现翻转的效果,需要实现将一个盒子旋转180度,不过这样是不够的,因为父盒子默认孩子盒子是关闭3d效果的,只要父亲一转,孩子就恢复原样,所以解决方法是在父盒子里设置transform-style,然后最后给父亲盒子旋转,即可。不过要给父盒子添加过渡的效果。

<!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>
        body {
            perspective: 300px;
        }
        
        .box {
            position: relative;
            width: 200px;
            height: 200px;
            margin: 100px auto;
            transition: all 1s;
            /* 这个必须要写,否则子盒子的3D效果显示不出来。 */
            transform-style: preserve-3d;
        }
        
        .front,
        .back {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            line-height: 200px;
            text-align: center;
            border-radius: 50%;
        }
        
        .front {
            background-color: pink;
            z-index: 1;
        }
        
        .back {
            background-color: purple;
            transform: rotateY(180deg)
        }
        
        .box:hover {
            transform: rotateY(180deg)
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="front">黑马程序员</div>
        <div class="back">我在这里等你</div>
        </div我在这里等你>
</body>

</html>

html5css3项目6:3D的项目有两面翻转的盒子、3D导航栏、旋转木马_第1张图片
2、3D导航栏

思路:
先设置一个父盒子,里面放两个孩子,都采用定位,这样两个会重叠起来到中心处,然后将一个盒子x轴负向旋转90deg面向地面,然后再移动盒子,不过这里有两个方法:
法1:将面向底的盒子向后移动高的一半,虽然是可以的,可以这样整个大的盒子的中心点就往后移动了,整个位置就偏了。
法2:将前面的盒子向前移动高的一半,这样中心点的位置还是在原来的平面上,位置仍然没有变化,那么中心点为什么没变呢?
因为原来是两个盒子都是定位的,然后在xy平面上。是2维的,中心点在xy面上。然后移动后变成立体长方体,长方体的中心点又在xy轴上,所以没变。

<!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>
        ul {
            margin: 100px auto;
        }
        
        ul li {
            float: left;
            margin-right: 100px;
            list-style: none;
            width: 100px;
            height: 30px;
            perspective: 300px;
        }
        
        .box {
            position: relative;
            width: 100%;
            height: 100%;
            transform-style: preserve-3d;
            transition: all 0.8s;
        }
        
        .front,
        .bottom {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            color: #fff;
        }
        
        .front {
            background-color: pink;
            transform: translateZ(15px);
        }
        
        .bottom {
            background-color: purple;
            transform: translateY(15px) rotateX(-90deg);
        }
        
        .box:hover {
            transform: rotateX(90deg);
        }
    </style>
</head>

<body>
    <ul>
        <li>
            <div class="box">
                <div class="front">黑马程序员</div>
                <div class="bottom">在这里等你</div>
            </div>
        </li>
        <li>
            <div class="box">
                <div class="front">黑马程序员</div>
                <div class="bottom">在这里等你</div>
            </div>
        </li>
        <li>
            <div class="box">
                <div class="front">黑马程序员</div>
                <div class="bottom">在这里等你</div>
            </div>
        </li>
    </ul>
</body>

</html>

html5css3项目6:3D的项目有两面翻转的盒子、3D导航栏、旋转木马_第2张图片
3、旋转木马

思路:
简单的想,就是一个父亲盒子,里面放了6个孩子盒子,并且这6个孩子都定位,都在中心处,然后将每个盒子y轴旋转60deg,并且还向z轴移动一样的位置,然后将父亲旋转起来。不能忘的是要设置透视和transform-style

<!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>
        body {
            perspective: 700px;
        }
        
        section {
            position: relative;
            width: 300px;
            height: 200px;
            margin: 300px auto;
            transform-style: preserve-3d;
            animation: rotate 10s linear infinite;
            background: url(media/pig.jpg) no-repeat;
        }
        
        section:hover {
            animation-play-state: paused;
        }
        
        div {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: url(media/dog.jpg) no-repeat;
        }
        
        section div:nth-child(1) {
            transform: translateZ(300px);
        }
        
        section div:nth-child(2) {
            transform: rotateY(60deg) translateZ(300px);
        }
        
        section div:nth-child(3) {
            transform: rotateY(120deg) translateZ(300px);
        }
        
        section div:nth-child(4) {
            transform: rotateY(180deg) translateZ(300px);
        }
        
        section div:nth-child(5) {
            transform: rotateY(240deg) translateZ(300px);
        }
        
        section div:nth-child(6) {
            transform: rotateY(300deg) translateZ(300px);
        }
        
        @keyframes rotate {
            0% {}
            100% {
                transform: rotateY(360deg)
            }
        }
    </style>
</head>

<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>

</html>

实现这类效果的思路:
1)先设置一个父亲盒子,再设置几个孩子盒子,然后将孩子盒子定位。
2)要对谁进行透视,就对这个人的对象进行设置透视。
3)如果孩子发生平移、旋转的效果,父亲发生变化时,孩子会恢复原状,所以要给父亲加上transform-style

你可能感兴趣的:(html5css3)