首页 > 其他分享 >CSS实现3D旋转相册效果

CSS实现3D旋转相册效果

时间:2022-12-02 21:12:09浏览次数:38  
标签:webkit 相册 -- transform rotateY 360deg var CSS 3D

效果预览

image


前置知识

  • 透视,perspective

  • 3D位移,translate3d(x,y,z)

  • 3D旋转,rotate3d(x,y,z)

  • 3D呈现,transform-style

  • CSS3动画,@keyframes

  • box-reflect、linear-gradient属性


HTML代码

<!DOCTYPE html>
<html lang="zh-CN">
<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, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
    <title>PhotoWall</title>
    <link rel="stylesheet" href="./index.css">
</head>
<body>
    <div class="stage">
        <img class="piece" src="./images/1.jpg" style="--number: 0;">
        <img class="piece" src="./images/2.jpg" style="--number: 1;">
        <img class="piece" src="./images/3.jpg" style="--number: 2;">
        <img class="piece" src="./images/4.jpg" style="--number: 3;">
        <img class="piece" src="./images/5.jpg" style="--number: 4;">
        <img class="piece" src="./images/6.jpg" style="--number: 5;">
        <img class="piece" src="./images/7.jpg" style="--number: 6;">
        <img class="piece" src="./images/8.jpg" style="--number: 7;">
        <img class="piece" src="./images/9.jpg" style="--number: 8;">
        <img class="piece" src="./images/10.jpg" style="--number: 9;">
        <img class="piece" src="./images/11.jpg" style="--number: 10;">
        <img class="piece" src="./images/12.jpg" style="--number: 11;">
        <img class="piece" src="./images/13.jpg" style="--number: 12;">
        <img class="piece" src="./images/14.jpg" style="--number: 13;">
        <img class="piece" src="./images/15.jpg" style="--number: 14;">
        <img class="piece" src="./images/16.jpg" style="--number: 15;">
        <img class="piece" src="./images/17.jpg" style="--number: 16;">
        <img class="piece" src="./images/18.jpg" style="--number: 17;">
    </div>
    <div class="stage">
        <img class="piece" src="./images/19.jpg" style="--number: 0;">
        <img class="piece" src="./images/20.jpg" style="--number: 1;">
        <img class="piece" src="./images/21.jpg" style="--number: 2;">
        <img class="piece" src="./images/22.jpg" style="--number: 3;">
        <img class="piece" src="./images/23.jpg" style="--number: 4;">
        <img class="piece" src="./images/24.jpg" style="--number: 5;">
        <img class="piece" src="./images/25.jpg" style="--number: 6;">
        <img class="piece" src="./images/26.jpg" style="--number: 7;">
        <img class="piece" src="./images/27.jpg" style="--number: 8;">
        <img class="piece" src="./images/28.jpg" style="--number: 9;">
        <img class="piece" src="./images/29.jpg" style="--number: 10;">
        <img class="piece" src="./images/30.jpg" style="--number: 11;">
        <img class="piece" src="./images/1.jpg" style="--number: 12;">
        <img class="piece" src="./images/2.jpg" style="--number: 13;">
        <img class="piece" src="./images/3.jpg" style="--number: 14;">
        <img class="piece" src="./images/4.jpg" style="--number: 15;">
        <img class="piece" src="./images/5.jpg" style="--number: 16;">
        <img class="piece" src="./images/6.jpg" style="--number: 17;">
    </div>
    <div class="stage">
        <img class="piece" src="./images/7.jpg" style="--number: 0;">
        <img class="piece" src="./images/8.jpg" style="--number: 1;">
        <img class="piece" src="./images/9.jpg" style="--number: 2;">
        <img class="piece" src="./images/10.jpg" style="--number: 3;">
        <img class="piece" src="./images/11.jpg" style="--number: 4;">
        <img class="piece" src="./images/12.jpg" style="--number: 5;">
        <img class="piece" src="./images/13.jpg" style="--number: 6;">
        <img class="piece" src="./images/14.jpg" style="--number: 7;">
        <img class="piece" src="./images/15.jpg" style="--number: 8;">
        <img class="piece" src="./images/16.jpg" style="--number: 9;">
        <img class="piece" src="./images/17.jpg" style="--number: 10;">
        <img class="piece" src="./images/18.jpg" style="--number: 11;">
        <img class="piece" src="./images/19.jpg" style="--number: 12;">
        <img class="piece" src="./images/20.jpg" style="--number: 13;">
        <img class="piece" src="./images/21.jpg" style="--number: 14;">
        <img class="piece" src="./images/22.jpg" style="--number: 15;">
        <img class="piece" src="./images/23.jpg" style="--number: 16;">
        <img class="piece" src="./images/24.jpg" style="--number: 17;">
    </div>
    <div class="stage">
        <img class="piece" src="./images/25.jpg" style="--number: 0;">
        <img class="piece" src="./images/26.jpg" style="--number: 1;">
        <img class="piece" src="./images/27.jpg" style="--number: 2;">
        <img class="piece" src="./images/28.jpg" style="--number: 3;">
        <img class="piece" src="./images/29.jpg" style="--number: 4;">
        <img class="piece" src="./images/30.jpg" style="--number: 5;">
        <img class="piece" src="./images/1.jpg" style="--number: 6;">
        <img class="piece" src="./images/2.jpg" style="--number: 7;">
        <img class="piece" src="./images/3.jpg" style="--number: 8;">
        <img class="piece" src="./images/4.jpg" style="--number: 9;">
        <img class="piece" src="./images/5.jpg" style="--number: 10;">
        <img class="piece" src="./images/6.jpg" style="--number: 11;">
        <img class="piece" src="./images/7.jpg" style="--number: 12;">
        <img class="piece" src="./images/8.jpg" style="--number: 13;">
        <img class="piece" src="./images/9.jpg" style="--number: 14;">
        <img class="piece" src="./images/10.jpg" style="--number: 15;">
        <img class="piece" src="./images/11.jpg" style="--number: 16;">
        <img class="piece" src="./images/12.jpg" style="--number: 17;">
    </div>
</body>
</html>

CSS代码

@charset "UTF-8";

* {
    margin: 0;
    padding: 0;
}

html,
body {
    --z: 900px;
}

body {
    background-color: #000;
    perspective: 880px;
    overflow: hidden;
}

.stage {
    position: relative;
    width: 300px;
    height: 200px;
    margin: 0 auto;
    transform-style: preserve-3d;
    animation: rotate 30s linear infinite;
    -webkit-animation: rotate 30s linear infinite;
}

.stage:nth-child(4) img {
    -webkit-box-reflect: below 10px -webkit-linear-gradient(transparent,transparent 0%,rgba(0,0,0,.8));
}

.stage .piece {
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 300px;
    height: 200px;
    transform: scaleX(-1) rotateY(calc(20deg * var(--number))) translateZ(var(--z));
    -webkit-transform: scaleX(-1) rotateY(calc(20deg * var(--number))) translateZ(var(--z));
    -moz-transform: scaleX(-1) rotateY(calc(20deg * var(--number))) translateZ(var(--z));
    -ms-transform: scaleX(-1) rotateY(calc(20deg * var(--number))) translateZ(var(--z));
    -o-transform: scaleX(-1) rotateY(calc(20deg * var(--number))) translateZ(var(--z));
}

@keyframes rotate {
    0% {
        transform: rotateY(0);
        -webkit-transform: rotateY(0);
        -moz-transform: rotateY(0);
        -ms-transform: rotateY(0);
        -o-transform: rotateY(0);
    }

    100% {
        transform: rotateY(360deg);
        -webkit-transform: rotateY(360deg);
        -moz-transform: rotateY(360deg);
        -ms-transform: rotateY(360deg);
        -o-transform: rotateY(360deg);
    }
}

标签:webkit,相册,--,transform,rotateY,360deg,var,CSS,3D
From: https://www.cnblogs.com/luckest/p/16945611.html

相关文章

  • 前端 css属性设置
    边框/*1.边框样式*/none无边框dotted点状虚线边框dashed矩形虚线边框solid实线边框/*2.统一设置边框属性*/#i1{......
  • 12月2日内容总结——边框属性,display属性,css盒子模型,浮动、溢出、定位、z-index属性和
    目录一、边框二、display属性三、CSS盒子模型概念margin外边距padding内填充四、浮动float三种取值clear清除浮动五、溢出overflow溢出属性六、定位staticrelative(相对定位......
  • css(2)
    边框/*border-left-width:5px;*//*border-left-style:dotted;*//*border-left-color:#0000ff;*//*border-left:3pxsolidblack;*/border:10pxsolid......
  • CSS边框,定位 ,浮动,溢出 盒子模型
    CSS(2)边框标签都有边框,我们可以通过css来调整边框。#左边框border-left-width:3px;边框粗细可以配颜色color样式style粗细width上下左右只需要在border......
  • 前端之css
    目录边框display盒子模型浮动溢出定位z-index简易博客页面搭建边框border-left-width:5px;border-left-style:dotted;dotted-定义点线边框border-left-color:#0......
  • css关系选择器
    父子关系div>span{}祖先后代divspan{}兄弟关系div+span{}标签选择器divspan{}id选择器#span{}class选择器.div{}......
  • CSS3 filter(滤镜) 属性使用整理
    一、CSS3filter(滤镜) 1.定义filter属性定义了元素(通常是<img>)的可视效果(例如:模糊与饱和度)。默认值:none继承:no动画支持:是。详细可查阅 CSS动画......
  • 前端CSS学习(二)
    目录边框画圆小例子displaydisplay属性盒子模型浮动溢出overflow溢出属性圆形头像示例定位fixedz-index顶部导航栏代码展示简易博客页面搭建边框<head><metacharse......
  • 前端 css
    目录今日内容概要今日内容详细边框display盒子模型浮动溢出定位z-index简易博客页面搭建今日内容概要边框盒子模型浮动定位补充说明简易博客页面搭建今日内容详......
  • css基础操作2
    今日内容总结边框/*border-left-width:边框大小(px);*//*border-left-style:边框格式;*//*border-left-color:颜色选择*/简写:border-left:边框大小边框格式......