之前讲解了css的入门篇,今天将要使用css技术实现动态的样式,本次以旋转3D相册为例进行学习和讲解。效果图如下:

CSS进阶之3D相册_3D相册

首先需要准备7张自己喜欢的图片,并定义一个div,我这里把class类名设置成album,将7张图片使用img标签引入,在选择一张作为中间图片的img中设置class类名为mid,为后面的css设置样式做好铺垫。

CSS进阶之3D相册_css_02

接下来就进入今天的重中之重——css样式实现:还是使用内联式,在style标签中设置样式,为了清除默认数值的干扰,先使用*通配选择器将margin外边距和padding内边距设置为0,再将整个浏览页面背景设置为黑色,由于要呈现3D的效果需要使用perspective属性给父元素设置视距,这里设置为1000px。然后设置盒子的定位方式为相对定位和大小为宽240px、高150px以及3D动画相关的设置。盒子里面的照片设置为绝对定位,大小100%。

CSS进阶之3D相册_动画进阶_03

CSS进阶之3D相册_css_04

由效果图可知外面旋转的6张图片是匀速旋转的,因此它们各自围绕Y轴间隔旋转的角度是一样的,简单计算360/6=60,所以应该设置每张外面的图片Y轴间隔角度为60度,使用结构伪类选择器.album  img:nth-child()对6张照片进行旋转位置的设置。

CSS进阶之3D相册_css_05

然后使用@keyframes创建动画效果,本次效果肯定为旋转,由于如果不设置X轴的角度前面展示的图片会遮挡后排的图片,所以这里X轴也需要进行一定角度的旋转,设置效果从rotateX(-15deg) rotateY(0)到rotateX(-15deg) rotateY(360deg),也就是让图片向前倾斜15度,每张图片旋转360度。

CSS进阶之3D相册_动画进阶_06

最后由于之前设置的是整个盒子所有图片都会旋转,导致中间的图片也会跟着旋转,效果是中间的图片不随其他6张外围图片旋转,则需要对其进行反向设置,本来从0度转到360度,反向设置从360度转回0度,从而抵消掉旋转的效果,并用伪类选择器设置当鼠标移入盒子时动画停止。

CSS进阶之3D相册_动画进阶_07

参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3d相册</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #282c34;
            perspective: 1000px;
            /* 视距要给父元素设置 */
        }
        .album {
            position: relative;
            width: 240px;
            height: 150px;
            margin: 300px auto;
           
            transform-style: preserve-3d;
            animation: rotates 20s linear infinite;
            /* transform: rotateX(-15deg); */
        }
        @keyframes rotates {
            from {
                transform: rotateX(-15deg) rotateY(0)   ;
            }
            to {
                transform: rotateX(-15deg) rotateY(360deg)  ;
            }
        }
        .album img {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            
            
        }

      
        .album  img:nth-child(1) {
            transform: rotateY(0deg)  translateZ(300px);
        }
        .album  img:nth-child(2) {
            transform: rotateY(60deg)  translateZ(300px);
        }
        .album  img:nth-child(3) {
            transform: rotateY(120deg)  translateZ(300px);
        }
        .album  img:nth-child(4) {
            transform: rotateY(180deg)  translateZ(300px);
        }
        .album  img:nth-child(5) {
            transform: rotateY(240deg)  translateZ(300px);
        }
        .album  img:nth-child(6) {
            transform: rotateY(300deg)  translateZ(300px);
        }
        /* .album  img:nth-child(7) {
            transform: rotateY(0deg)  translateZ(0px);
        } */
        .album:hover {
            animation-play-state: paused;
        }
        /* 反向旋转抵消 */
        .album .mid {
            /* reverse为关键字不能使用来做动画名,否则不生效 */
           animation: reverses 20s linear infinite;
        }
        @keyframes reverses {
            from {
                transform: rotateY(360deg);
            }
            to {
                transform: rotateY(0);
            }
        }
       
    </style>
</head>
<body>
    <div class="album">
        
        <img src="./images/mv1.jpg" alt="">
        <img src="./images/mv2.jpg" alt="">
        <img src="./images/mv3.jpg" alt="">
        <img src="./images/mv4.jpg" alt="">
        <img src="./images/mv5.jpg" alt="">
        <img src="./images/mv6.jpg" alt="">
        
        <img class="mid" src="./images/mm.gif" alt="">
    </div>
</body>
</html>

到此关于css进阶的动画3D相册案例就简述完毕了,希望分享的东西可以帮助到大家。