CSS3 3D相册

简介: CSS 3D相册

3D album.gif

今天来做一个基于CSS3 3D属性的3D相册效果。

1 基本布局

首先来完成基本布局,从效果图中可以看到,所有图片一开始均位于同一位置,然后经过不同的角度的旋转以及平移到不同的位置,达到一个"旋转散开"的效果。所以基本的思路就是:

  • 所有图片定位到页面中同一位置
  • 遍历图片,利用transform属性进行旋转、平移,加上transition制造动画效果
  • 调整perspective,改变视角

所有首先来完成基本布局:

<!DOCTYPE html>
<html>
    <head>
        <meta charst="utf-8">
        <title>3D相册</title>

        <style>
            * {
                margin: 0px;
                padding: 0px;
            }
            body {
                background-color: #000;
            }

            .images {
                width: 100px;
                height: 100px;
                margin: 150px auto;
                position: relative;
            }

            .images img {
                position: absolute;
                box-shadow: 0px 0px 8px #eee;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <div id="warp" class="images">
                <img src="images/01.png">
                <img src="images/02.png">
                <img src="images/03.png">
                <img src="images/04.png">
                <img src="images/05.png">
                <img src="images/06.png">
                <img src="images/07.png">
                <img src="images/08.png">
                <img src="images/09.png">
                <img src="images/10.png">
                <img src="images/11.png">
            </div>
        </div>
    </body>
</html>

3d_album1.png

现在所有图片都重叠到了一起。

2 旋转、平移

接下来我们需要对各个图片进行旋转、平移。从图中可以看到,所有的图片都是绕Y轴进行了一定的旋转,所有首先来给各个图片加上一个旋转效果,之于旋转角度则各个图片平分:

<script>
    window.onload = function() {
        var wrap = document.getElementById('wrap');
        var images = document.getElementsByTagName("img");
        var length = images.length;
        var deg = 360 / length;
        for(var i = 0; i < length; i++) {
          var transform = "rotateY(" + deg * i + "deg) ";
          images[i].style.transform = transform;
        } 
    }
</script>

3d_album2.png

可以看到,图片已经出现了不同程度的旋转,但是依然是重叠在一起的。所以接下来就是让各个图片"分开":按Z轴方向进行平移:

    window.onload = function() {
        var wrap = document.getElementById('wrap');
        var images = document.getElementsByTagName("img");
        var length = images.length;
        var deg = 360 / length;
        for(var i = 0; i < length; i++) {
          var transform = "rotateY(" + deg * i + "deg) tranlateZ(240px)";
          images[i].style.transform = transform;
        } 
    }

3d_album3.png

可以看到,图片进行了平移,也达到了"展开"的效果,但由于均处于同一平面,从用户角度观察,依然存在重叠。

3 改变视角

为了解决重叠问题,需要改变视角,这时就需要用到perspective + transform

  • 利用perspective指定视角距离
  • 然后通过旋转改变视角
  • 另外由于视角的改变,在进行transform时需要设定transform-style
.container {
  perspective: 1000px; /*perspective属性指定了观察者与Z=0平面的距离*/

}

.images {
  width: 100px;
  height: 100px;
  margin: 150px auto;
  position: relative;
  transform: rotateX(-50deg) ;
  transform-style: preserve-3d;
}

3d_album4.png

可以看到,图片已经均匀展开了。

4 动画效果

最后我们再来给图片的运动加上动画效果:transition属性上场了。为了然动画看起来不凌乱,我们可以通过transition中的延迟来完成:

window.onload = function() {
  var wrap = document.getElementById('wrap');
  var images = document.getElementsByTagName("img");
  var length = images.length;
  var deg = 360 / length;
  for(var i = 0; i < length; i++) {
    var transform = "rotateY(" + deg * i + "deg) translateZ(240px)";
    var transition = "1s " + 0.2 * i + "s";  // 通过延迟让图片运动排队
    images[i].style.transform = transform;
    images[length - i - 1].style.transition = transition;
  } 
}

大功告成!

相关文章
|
5月前
CSS3自动旋转正方体3D特效
CSS3自动旋转正方体3D特效
49 3
CSS3自动旋转正方体3D特效
|
5天前
|
前端开发 JavaScript API
探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画
本文通过构建一个 3D 翻卡动画深入探讨了 CSS Houdini 的强大功能,展示了如何通过 Worklets、自定义属性、Paint API 等扩展 CSS 的能力,实现高度灵活的动画效果。文章首先介绍了 Houdini 的核心概念与 API,并通过构建一个动态星空背景、圆形进度条以及交互式 3D 翻卡动画的实际示例,展示了如何利用 CSS Houdini 赋予网页设计更多创造力。最后,还演示了如何将这种 3D 翻卡效果集成到公司网站中,提升用户体验。CSS Houdini 的创新能力为网页设计带来了前所未有的灵活性,推动了前端开发迈向新的高度。
14 0
探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画
|
2月前
|
前端开发
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
HTML+CSS动画实现动感3D卡片墙:现代Web设计的视觉盛宴
|
2月前
|
前端开发
视觉冲击:CSS实现相册图片的放大效果,让网站首页更震撼!
视觉冲击:CSS实现相册图片的放大效果,让网站首页更震撼!
|
4月前
|
前端开发 JavaScript UED
CSS进阶-3D变换与透视效果
【6月更文挑战第15天】CSS3的3D变换和透视效果增强了网页的深度感。通过`rotateX/Y/Z`旋转和`translateZ`移动,结合`perspective`属性可创建3D空间。`perspective`定义观察者与Z轴的距离,影响元素的缩放感。常见问题包括过度失真和元素遮挡顺序,可通过调整`perspective`值和使用`z-index`解决。进阶技巧涉及层叠上下文理解和3D卡片翻转效果,通过实践与探索,设计师能更好地利用这些工具创新用户体验。
90 6
|
3月前
|
前端开发 JavaScript
【HTML+CSS+JavaScript】3d-boxes-background
【HTML+CSS+JavaScript】3d-boxes-background
32 0
|
3月前
|
前端开发 JavaScript
前端 CSS 经典:3D Hover Effect 效果
前端 CSS 经典:3D Hover Effect 效果
43 0
|
3月前
|
前端开发 JavaScript
前端 CSS 经典:3D 渐变轮播图
前端 CSS 经典:3D 渐变轮播图
90 0
|
5月前
|
前端开发
纯css实现的3D立体鸡蛋动画视觉效果
纯css实现的3D立体鸡蛋动画视觉效果
63 6
纯css实现的3D立体鸡蛋动画视觉效果
|
5月前
|
UED
css3 2D与3D转换
css3 2D与3D转换
68 0