教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP

这篇具有很好参考价值的文章主要介绍了教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

现如今网页越来越趋近于动画,相信大家平时浏览网页或多或少都能看到一些动画效果,今天我们来做一个有意思的动画效果,通过 css3 实现 3d 效果的立方体相册,下面一起看看吧。


实现思路

  • 首先我们要确定好 html 的结构以及要使用的标签;
  • 当我们搭建好 html 的结构后,就要想到怎么去实现立体的效果;
  • 最后就是如何实现旋转以及鼠标触摸时变换的效果。

html 布局

<div class="parentBox">
  <div class="contantBox">
    <div class="outerBox">
      <!--======================= 外部正方体 =======================-->
      <!-- 外前图 -->
      <div class="frontImgBox"><img src="../assets/tu1.jpg" /></div>
      <!-- 外后图 -->
      <div class="queenImgBox"><img src="../assets/tu2.jpg" /></div>
      <!-- 外左图 -->
      <div class="liftImgBox"><img src="../assets/tu3.jpg" /></div>
      <!-- 外右图 -->
      <div class="rightImgBox"><img src="../assets/tu4.jpg" /></div>
      <!-- 外上图 -->
      <div class="topImgBox"><img src="../assets/tu5.jpg" /></div>
      <!-- 外下图 -->
      <div class="bottomImgBox"><img src="../assets/tu6.jpg" /></div>
      <!--======================= 内部正方体 =======================-->
      <!-- 内前图 -->
      <p class="inFrontImgBox"><img src="../assets/tu7.jpg" /></p>
      <!-- 内后图 -->
      <p class="inqueenImgBox"><img src="../assets/tu8.jpg" /></p>
      <!-- 内左图 -->
      <p class="inLeftImgBox"><img src="../assets/tu9.jpg" /></p>
      <!-- 内右图 -->
      <p class="inRightImgBox"><img src="../assets/tu10.jpg" /></p>
      <!-- 内上图 -->
      <p class="inTopImgBox"><img src="../assets/tu11.jpg" /></p>
      <!-- 内下图 -->
      <p class="inBottomImgBox"><img src="../assets/tu12.jpg" /></p>
    </div>
  </div>
</div>

立体的效果

立体效果的核心就是运用 css3 中的 transform-style 属性。

transform-style 属性

transform-style 属性用来指定嵌套元素是怎样在三维空间中呈现。当值为 flat 时,表示所有子元素在 2D 平面呈现;值为 preserve-3d 时,表示所有子元素在 3D 空间中呈现。

属性值 描述
flat(默认值) 将设置元素的子元素位于该元素的平面中
preserve-3d 将指示元素的子元素应位于 3D 空间中

注意:

  • 该属性必须与 transform 属性一同使用,否则没效果;
  • 该属性不能被子元素继承;
  • 该属性的效果作用于子元素,不作用于自身。

旋转和变换的效果

旋转及变换的效果我们则需要通过 animation 属性和 hover 伪类属性的配合来实现。

旋转核心代码

	.outerBox{
		-webkit-animation: rotate 10s infinite;
	}
	
	@-webkit-keyframes rotate {
	  from {
	    transform: rotateX(0deg) rotateY(0deg);
	  }
	  to {
	    transform: rotateX(360deg) rotateY(360deg);
	  }
	}

变换核心代码

.outerBox:hover .frontImgBox {
  transform: rotateY(0deg) translateZ(200px);
}
.outerBox:hover .queenImgBox {
  transform: translateZ(-200px) rotateY(180deg);
}
.outerBox:hover .liftImgBox {
  transform: rotateY(90deg) translateZ(200px);
}
.outerBox:hover .rightImgBox {
  transform: rotateY(-90deg) translateZ(200px);
}
.outerBox:hover .topImgBox {
  transform: rotateX(90deg) translateZ(200px);
}
.outerBox:hover .bottomImgBox {
  transform: rotateX(-90deg) translateZ(200px);
}

到这里为止,我们已经将整个功能的核心要点分析完毕,话不多说,下面一起来看完整的源码⤵。


完整源码

<template>
  <div class="parentBox">
    <div class="contantBox">
      <div class="outerBox">
        <!--======================= 外部正方体 =======================-->
        <!-- 外前图 -->
        <div class="frontImgBox"><img src="../assets/tu1.jpg" /></div>
        <!-- 外后图 -->
        <div class="queenImgBox"><img src="../assets/tu2.jpg" /></div>
        <!-- 外左图 -->
        <div class="liftImgBox"><img src="../assets/tu3.jpg" /></div>
        <!-- 外右图 -->
        <div class="rightImgBox"><img src="../assets/tu4.jpg" /></div>
        <!-- 外上图 -->
        <div class="topImgBox"><img src="../assets/tu5.jpg" /></div>
        <!-- 外下图 -->
        <div class="bottomImgBox"><img src="../assets/tu6.jpg" /></div>
        <!--======================= 内部正方体 =======================-->
        <!-- 内前图 -->
        <p class="inFrontImgBox"><img src="../assets/tu7.jpg" /></p>
        <!-- 内后图 -->
        <p class="inqueenImgBox"><img src="../assets/tu8.jpg" /></p>
        <!-- 内左图 -->
        <p class="inLeftImgBox"><img src="../assets/tu9.jpg" /></p>
        <!-- 内右图 -->
        <p class="inRightImgBox"><img src="../assets/tu10.jpg" /></p>
        <!-- 内上图 -->
        <p class="inTopImgBox"><img src="../assets/tu11.jpg" /></p>
        <!-- 内下图 -->
        <p class="inBottomImgBox"><img src="../assets/tu12.jpg" /></p>
      </div>
    </div>
  </div>
</template>
<style lang="less" scoped>
.parentBox {
  height: 100%;
  background: rgb(31, 31, 31);
  padding: 200px;
  .contantBox {
    width: 200px;
    height: 200px;
    margin: 0px auto;
    position: relative;
    .outerBox {
      width: 200px;
      height: 200px;
      margin: 0 auto;
      transform-style: preserve-3d;
      transform: rotateX(-30deg) rotateY(-80deg);
      -webkit-animation: rotate 10s infinite;
      animation-timing-function: linear; //匀速
      // 外部正反体样式
      div {
        position: absolute;
        width: 200px;
        height: 200px;
        opacity: 0.75;
        transition: all 0.4s;
        img {
          width: 100%;
          height: 100%;
        }
      }
      .frontImgBox {
        transform: rotateY(0deg) translateZ(100px);
      }
      .queenImgBox {
        transform: translateZ(-100px) rotateY(180deg);
      }
      .liftImgBox {
        transform: rotateY(90deg) translateZ(100px);
      }
      .rightImgBox {
        transform: rotateY(-90deg) translateZ(100px);
      }
      .topImgBox {
        transform: rotateX(90deg) translateZ(100px);
      }
      .bottomImgBox {
        transform: rotateX(-90deg) translateZ(100px);
      }
      @-webkit-keyframes rotate {
        from {
          transform: rotateX(0deg) rotateY(0deg);
        }
        to {
          transform: rotateX(360deg) rotateY(360deg);
        }
      }
      // 内部正方体样式
      p {
        display: bloack;
        width: 100px;
        height: 100px;
        position: absolute;
        top: 50px;
        left: 50px;
        img {
          width: 100%;
          height: 100%;
        }
      }
      .inFrontImgBox {
        transform: rotateY(0deg) translateZ(50px);
      }
      .inqueenImgBox {
        transform: translateZ(-50px) rotateY(180deg);
      }
      .inLeftImgBox {
        transform: rotateY(90deg) translateZ(50px);
      }
      .inRightImgBox {
        transform: rotateY(-90deg) translateZ(50px);
      }
      .inTopImgBox {
        transform: rotateX(90deg) translateZ(50px);
      }
      .inBottomImgBox {
        transform: rotateX(-90deg) translateZ(50px);
      }
    }
    // 鼠标触摸后样式
    .outerBox:hover {
      cursor: pointer;
    }
    .outerBox:hover .frontImgBox {
      transform: rotateY(0deg) translateZ(200px);
    }
    .outerBox:hover .queenImgBox {
      transform: translateZ(-200px) rotateY(180deg);
    }
    .outerBox:hover .liftImgBox {
      transform: rotateY(90deg) translateZ(200px);
    }
    .outerBox:hover .rightImgBox {
      transform: rotateY(-90deg) translateZ(200px);
    }
    .outerBox:hover .topImgBox {
      transform: rotateX(90deg) translateZ(200px);
    }
    .outerBox:hover .bottomImgBox {
      transform: rotateX(-90deg) translateZ(200px);
    }
  }
}
</style>

实现效果

教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP


拓展

旋转视差效果

<template>
  <div class="box">
    <div class="item">
      <img src="../../img/fj1.png" alt="">
    </div>
    <div class="item">
      <img src="../../img/fj2.png" alt="">
    </div>
    <div class="item">
      <img src="../../img/fj3.png" alt="">
    </div>
    <div class="item">
      <img src="../../img/fj4.png" alt="">
    </div>
    <div class="item">
      <img src="../../img/fj5.png" alt="">
    </div>
  </div>
</template>

<style scoped>
.box {
  width: 300px;
  height: 300px;
  margin: 0 auto;
  margin-top: 100px;
  /* 网格布局 */
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3列 */
  grid-template-rows: repeat(3, 1fr); /* 3行 */
  grid-template:
    "A A B"
    "C D B"
    "C E E";
  gap: 5px; /* 间隙 */
  animation: rotation 10s linear infinite;
}
.item {
  overflow: hidden;
  border: 2px solid;
  display: flex;
  justify-content: center;
  align-items: center;
}
.item img {
  width: 260%;
  height: 260%;
  object-fit: cover;
  animation: rotation2 10s linear infinite;
}
/* 布局到那个区域 */
.item:nth-child(1) {
  grid-area: A;
}
.item:nth-child(2) {
  grid-area: B;
}
.item:nth-child(3) {
  grid-area: C;
}
.item:nth-child(4) {
  grid-area: D;
}

.item:nth-child(5) {
  grid-area: E;
}
/* 外层顺时针旋转 */
@keyframes rotation {
  to {
    transform: rotate(360deg);
  }
}
/* 外层逆时针旋转 */
@keyframes rotation2 {
  to {
    transform: rotate(-360deg);
  }
}
</style>

实现效果

教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP文章来源地址https://www.toymoban.com/news/detail-415071.html

到了这里,关于教你用 CSS 实现超真实的 3D 相册,让你的照片立体感 UPUP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你的Jmeter是不是经常乱码?教你用四种方法解决它

    乱码的原因: 一般情况下jemeter默认设置的编码格式为:ISO-8859-1,而我们程序中经常使用的是UTF-8编码,由于响应页面和jmeter编码格式不统一导致响应结果中经常会乱码,所以需要将jmeter的编码格式设置为UTF-8来解决乱码问题。 下图为中文乱码情况,我们将使用下面四种方式

    2024年02月07日
    浏览(36)
  • 【AI生产力工具】Upscale.media:用AI技术提升照片质量,让你的作品更出色

    在如今的数字时代,图片已经成为我们日常生活中不可或缺的一部分,从社交媒体到电子商务网站,从广告宣传到个人生活,都需要使用各种形式的图片。然而,在实际应用中,我们常常会遇到一些图片分辨率过低、尺寸过小的问题,这时候就需要一些强大的工具来帮助我们

    2024年02月01日
    浏览(29)
  • Web前端:HTML+CSS+JS实现美女照片3D立方体旋转(1),网易资深Web前端架构师

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Web前端全套学习资料》,

    2024年04月23日
    浏览(25)
  • HTML+CSS+JS--3D相册

    🌱博客主页:大寄一场. 🌱系列专栏:前端 😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注 ​ 在本文中,我们将介绍如何使用HTML、CSS和JavaScript创建一个3D相册。这个相册将会展示一系列的照片,并且每个照片都会以3D效果呈现,使得整个相册更加生动和有趣。   先,我们

    2024年02月07日
    浏览(26)
  • 手把手教你基于HTML、CSS搭建我的相册(下)

    经常有一些粉丝咨询前端该从什么开始学,那当然是我们的前端基础三件套开始学起,HTML、CSS、javaScript,前端的大部分框架的底层还是围绕着前端三件套来搭建的,相信大家能够在很多平台中去找到一些前端三件套的体系教程,借着原力计划凉哥也为大家带来前端三件套的

    2024年02月03日
    浏览(20)
  • 手把手教你基于HTML、CSS搭建我的相册(上)

    其实有过一些粉丝咨询前端该从什么开始学,那当然是我们的前端基础三件套开始学起,HTML、CSS、javaScript,前端的大部分框架的底层还是围绕着前端三件套来搭建的,相信大家能够在很多平台中去找到一些前端三件套的体系教程,借着原力计划呢,凉哥也为大家带来前端三

    2024年02月02日
    浏览(22)
  • 【前端领域】3D旋转超美相册(HTML+CSS)

    世界上总有一半人不理解另一半人的快乐。 ——《爱玛》 目录 一、前言 二、本期作品介绍    3D旋转相册 三、效果展示 四、详细介绍  五、编码实现 index.html style.css  img  六、获取源码 公众号获取源码  获取源码?私信?关注?点赞?收藏?         新的一年,我们

    2024年02月02日
    浏览(26)
  • 前端 CSS 3D 照片墙自动旋转案例(详细步骤)

    案例动画 Gif 动画地址,图片太大传不上来! 案例 DEMO 源码地址 ,仅供参考。

    2024年01月18日
    浏览(30)
  • 16个实用的CSS样式之3D照片墙

    对于初学前端的小白来说css样式的设计很考验基本功和创意想法,而在项目开发中我们不可能将大部分的时间用于CSS代码的编写,能复用的就复用。因此我特意总结了16个在项目开发中常用的CSS样式,因为自己也是初学者,所以以小白的视角来记录和学习这16款样式的设计与编

    2024年02月05日
    浏览(16)
  • 【Midjourney】Midjourney Prompt 提示词 ④ ( 纹身设计 | 建筑设图案 | 照片级真实性图像 | 玻璃窗设计图案 | 使用 Blender 制作的 3D 图像 )

    tattoo 提示词 可生成 纹身设计图案 ; 提示词格式 : 描述内容 tattoo design 示例 : /imagine prompt octopus tattoo design 生成效果 : 大图展示 : 使用 architecture / interior design 提示词 可生成 建筑设计图案 ; 适合 建筑设计 , 装修设计 从业者使用 ; 提示词格式 : architecture / interior design 描述内容

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包