3D旋转相册(纯CSS)

最开始想简单一点,不要那么多盒子。就简单除暴的直接用了img。

此时的html代码:

    <div class="photo">
        <div class="cube">
            <img src="img/1.jpg" alt="" class="small">
            <img src="img/2.jpg" alt="" class="small">
            <img src="img/3.jpg" alt="" class="small">
            <img src="img/4.jpg" alt="" class="small">
            <img src="img/5.jpg" alt="" class="small">
            <img src="img/6.jpg" alt="" class="small">
        </div>
        <div class="cube">
            <img src="img/1.jpg" alt="" class="big">
            <img src="img/2.jpg" alt="" class="big">
            <img src="img/3.jpg" alt="" class="big">
            <img src="img/4.jpg" alt="" class="big">
            <img src="img/5.jpg" alt="" class="big">
            <img src="img/6.jpg" alt="" class="big">
        </div>
    </div>

发现效果有些奇怪,当旋转的时候可以看到img的反面。尤其的当图片的透明度为百分百时。(如下图,小盒子的图片看着层叠)
在这里插入图片描述
这个感觉像是层级的问题。可它又是旋转的动态的,一时间不知道怎么办了。但是当我将它换成了div时,又不会出现这样的问题了。于是这个想法又仿佛不对了…
于是我猜测是因为img的颜色暗了,但是我将它所有都换成一个亮色的图片,还是会出现这样的问题,于是这个猜测还是不对的…
(于是这个问题我一直没想明白,暂且搁置)
在这里插入图片描述
然后发现了第二个问题:外面的盒子和里面的盒子有前后关系的(如上图,会出现本该在后面的大图片跑到了小盒子的前面来了)

这时候的html:

    <div class="photo">
        <div class="cube">
            <img src="img/1.jpg" alt="" class="small">
            <img src="img/2.jpg" alt="" class="small">
            <img src="img/3.jpg" alt="" class="small">
            <img src="img/4.jpg" alt="" class="small">
            <img src="img/5.jpg" alt="" class="small">
            <img src="img/6.jpg" alt="" class="small">
        </div>
        <div class="cube">
            <img src="img/1.jpg" alt="" class="big">
            <img src="img/2.jpg" alt="" class="big">
            <img src="img/3.jpg" alt="" class="big">
            <img src="img/4.jpg" alt="" class="big">
            <img src="img/5.jpg" alt="" class="big">
            <img src="img/6.jpg" alt="" class="big">
        </div>
    </div>

于是我调整了HTML代码以及相应样式,得到了以下的模样:
在这里插入图片描述
可以说是完成了最初设想。

css代码:

        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: black;
        }

        .big {
            position: absolute;
            width: 200px;
            height: 200px;
            opacity: 0.6;
        }

        .small {
            position: absolute;
            top: 50px;
            left: 50px;
            width: 100px;
            height: 100px;
        }

        .photo {
            width: 200px;
            height: 200px;
            margin: 200px auto;
            perspective: 800px;
        }

        .cube {
            position: absolute;
            width: 200px;
            height: 200px;
            transform-style: preserve-3d;
            transition: all 1s;
        }

        .cube {
            animation: run 10s linear infinite;
        }

        @keyframes run {
            from {
                transition: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
            }

            to {
                transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
            }
        }

        /* 外面的样式 */
        .top2 {
            background: url(img/1.jpg);
            background-size: 100% 100%;
            transform: rotateX(90deg) translateZ(120px);
        }

        .bottom2 {
            background: url(img/2.jpg);
            background-size: 100% 100%;
            transform: rotateX(-90deg) translateZ(120px);
        }

        .left2 {
            background: url(img/3.jpg);
            background-size: 100% 100%;
            transform: rotateY(90deg) translateZ(120px);
        }

        .right2 {
            background: url(img/4.jpg);
            background-size: 100% 100%;
            transform: rotateY(-90deg) translateZ(120px);
        }

        .front2 {
            background: url(img/5.jpg);
            background-size: 100% 100%;
            z-index: 1;
            transform: translateZ(120px);
        }

        .rear2 {
            background: url(img/6.jpg);
            background-size: 100% 100%;
            transform: translateZ(-120px);
        }

        /* 里面的样式 */
        .top1 {
            background: url(img/1.jpg);
            background-size: 100% 100%;
            transform: rotateX(90deg) translateZ(50px);
        }

        .bottom1 {
            background: url(img/2.jpg);
            background-size: 100% 100%;
            transform: rotateX(-90deg) translateZ(50px);
        }

        .left1 {
            background: url(img/3.jpg);
            background-size: 100% 100%;
            transform: rotateY(90deg) translateZ(50px);
        }

        .right1 {
            background: url(img/4.jpg);
            background-size: 100% 100%;
            transform: rotateY(-90deg) translateZ(50px);
        }

        .front1 {
            background: url(img/5.jpg);
            background-size: 100% 100%;
            z-index: 1;
            transform: translateZ(50px);
        }

        .rear1 {
            background: url(img/6.jpg);
            background-size: 100% 100%;
            transform: translateZ(-50px);
        }

        .cube:hover {
            animation-play-state: paused;
        }

        .cube:hover .top2 {
            transform: rotateX(90deg) translateZ(200px);
        }

        .cube:hover .bottom2 {
            transform: rotateX(-90deg) translateZ(200px);
        }

        .cube:hover .left2 {
            transform: rotateY(90deg) translateZ(200px);
        }

        .cube:hover .right2 {
            transform: rotateY(-90deg) translateZ(200px);
        }

        .cube:hover .front2 {
            transform: translateZ(200px);
        }

        .cube:hover .rear2 {
            transform: translateZ(-200px);
        }

HTML代码:

    <div class="photo">
        <div class="cube">
            <div class="small top1"></div>
            <div class="big top2"></div>
            <div class="small bottom1"></div>
            <div class="big bottom2"></div>
            <div class="small left1"></div>
            <div class="big left2"></div>
            <div class="small right1"></div>
            <div class="big right2"></div>
            <div class="small front1"></div>
            <div class="big front2"></div>
            <div class="small rear1"></div>
            <div class="big rear2"></div>
        </div>
    </div>

然而我在做着做着突然想到的:想让里面的盒子和外面的盒子不同的状态旋转动画,这为了解决前后问题,而改了html的构造无法完成了。有些遗憾,暂且没想到怎么做。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现炫酷抖音女友3D旋转相册特效,需要掌握CSS3的一些基本动画和转换属性。首先需要准备照片,然后将照片放在一个容器中,设置容器的宽度、高度、视距、景深。接下来,需要使用CSS3旋转属性将照片进行旋转,同时使用缩放属性进行3D效果的实现。最后再使用CSS3的动画属性和过渡属性,使照片在旋转的过程中呈现出平滑、连贯的效果。具体实现步骤和样式代码如下所示: 1. 创建一个容器,设置容器的宽度、高度、视距和景深。 ``` .container { width: 600px; height: 400px; perspective: 1000px; -webkit-perspective: 1000px; perspective-origin: 50% 50%; -webkit-perspective-origin: 50% 50%; } ``` 2. 在容器中添加多个照片,将它们定位在正中心,并设置它们的宽度和高度。 ``` .photo { position: absolute; top: 50%; left: 50%; margin-top: -150px; margin-left: -200px; width: 400px; height: 300px; background-size: cover; background-position: center center; transform-style: preserve-3d; -webkit-transform-style: preserve-3d; } ``` 3. 使用CSS3旋转属性,使照片在Z轴上进行旋转,并使用缩放属性使照片产生3D效果。 ``` .photo:nth-child(1) { transform: rotateY(0deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(0deg) translateZ(250px) scale(0.8); } .photo:nth-child(2) { transform: rotateY(60deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(60deg) translateZ(250px) scale(0.8); } .photo:nth-child(3) { transform: rotateY(120deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(120deg) translateZ(250px) scale(0.8); } .photo:nth-child(4) { transform: rotateY(180deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(180deg) translateZ(250px) scale(0.8); } .photo:nth-child(5) { transform: rotateY(240deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(240deg) translateZ(250px) scale(0.8); } .photo:nth-child(6) { transform: rotateY(300deg) translateZ(250px) scale(0.8); -webkit-transform: rotateY(300deg) translateZ(250px) scale(0.8); } ``` 4. 使用CSS3的动画属性和过渡属性,使照片具有平滑、连贯的旋转效果。 ``` .photo:hover { animation: rotate 10s infinite linear; -webkit-animation: rotate 10s infinite linear; transition: all 0.5s ease-in-out; -webkit-transition: all 0.5s ease-in-out; } @keyframes rotate { 0% { transform: rotateY(0deg); } 100% { transform: rotateY(360deg); } } @-webkit-keyframes rotate { 0% { -webkit-transform: rotateY(0deg); } 100% { -webkit-transform: rotateY(360deg); } } ``` 这样就可以实现抖音女友3D旋转相册的特效了。通过使用CSS3旋转、缩放、动画和过渡属性,可以轻松实现多种炫酷的效果,为网页添加生动、有趣的视觉体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值