首页 > 其他分享 >CSS进阶之3D相册

CSS进阶之3D相册

时间:2023-07-19 19:07:14浏览次数:36  
标签:album 进阶 img nth transform rotateY 设置 CSS 3D

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

CSS进阶之3D相册_css

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

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

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

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

CSS进阶之3D相册_3D相册_04

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

CSS进阶之3D相册_3D相册_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相册案例就简述完毕了,希望分享的东西可以帮助到大家。

标签:album,进阶,img,nth,transform,rotateY,设置,CSS,3D
From: https://blog.51cto.com/u_15101214/6779113

相关文章

  • 自学前端-HTML5+CSS-综合案例一-热词
    综合案例一-热词目录综合案例一-热词1、设计需求2、设计所需标签和CSS样式3、设计具体步骤4、遇到的问题设计图如下1、设计需求①需要鼠标放上去有显示透明②需要点击后跳转到相应页面且保留原页面2、设计所需标签和CSS样式所需标签:divCSS样式:伪类hover,颜色color,字大小fo......
  • CSS
    CSSCSS:层叠样式表#就是给HTML增加样式的,让其变得更加美观选择器的语法结构选择器{ 属性名1:属性值1 属性名2:属性值2 属性名3:属性值3 属性名4:属性值4}CSS的注释语法/*内容*/#快捷键:ctrl+?css的引入方式1.在html文档中直接写在style标签中2.单独写一个CS......
  • 要在HTML中让文字居中,可以使用CSS样式来设置文本的对齐方式
    以下是几种常见的居中文本的方法:使用text-align:center;CSS样式:这个方法适用于将文本居中对齐在其父元素内。可以将text-align:center;应用于父元素,这将使其内部的所有文本内容都居中对齐。示例代码:<style>.container{text-align:center;}</style>......
  • html 学习 day3 css 的层叠 父子size 的继承
    今天遇到一个问题,css的父子继承关系在一种case下不生效。:子节点无法继承父节点的 width和height的设定下面代码的原始版本img无法继承div的宽和高的设定。当 img的css设定为:img{height:100%;width:100%;margin-right:1......
  • 前端三剑客之CSS
    一、CSS介绍1、CSS(层叠样式表,CascadingStyleSheets)是一种用于描述网页内容(HTML或XML等)外观样式的标记语言。它是一种样式表语言,用于控制网页的布局、字体、颜色、大小、间距以及其他与显示有关的属性。2、css学习步骤先学习选择器,作用就是如何找到标签找到标签之后,给标签......
  • 伪类选择器,伪元素选择器,选择器的优先级,CSS属性相关
    伪类选择器<style>/*未访问时候显示的*/a:link{color:#FF0000;}/*鼠标移动到链接上*/a:hover{color:#FF00FF}/*选定的链接*/a:active{color:#0000......
  • CSS透视与Z轴
    一.CSS透视通过模拟人眼的视角来创建三维效果(可以理解为看3D电影,需要借助3D眼睛,这个透视就是让了让网页上产生3D的效果)。我们在现实生活中,当物体远离我们时,会看到它们变小变远。透视效果就是基于这个原理。二.改变透视视与改变z轴的不同(一)、改变透视改变透视相当于主动挪动眼......
  • css将多余的字变成...
    display:-webkit-box;/*作为弹性伸缩盒子模型显示*/-webkit-line-clamp:1;/*显示的行数;如果要设置2行加...则设置为2*/overflow:hidden;/*超出的文本隐藏*/text-overflow:ellipsis;/*溢出用省略号*/-webkit-box-orient:vertical;/*伸缩盒子......
  • 色彩解锁:探索革命性的CSS color()函数和新的色彩空间
    Google在6月份发布了一篇新博客,介绍了CSS中的新颜色空间和函数,支持所有主流引擎。下面是文章的链接:NewCSScolorspacesandfunctionsinallmajorengineshttps://web.dev/color-spaces-and-functions/?ref=sidebar该文章展示了一些支持的色彩空间的例子。color()函数介绍:color......
  • Moonlander:利用AI技术开发3D游戏的一人创业公司
    最近,一个新公布的AIGC工具火了:7月1日,专注于利用AI技术开发3D游戏的创业公司Moonlander,发布了基于AI技术的3D游戏研发平台MoonlanderAI。而该平台最大的特点,就是可以用一句话生成3D游戏,是个名副其实的"文生游"平台。按照Moonlander的说法,哪怕你不会任何美......