整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「抖音最火」的3D旋转透视酷炫相册,如何用CSS3去

「抖音最火」的3D旋转透视酷炫相册,如何用CSS3去实现

前段时间小编刷抖音的时候,刷到了咱们前端小伙伴制作的3D炫酷相册,居然那么火,细思一下,随着3D动画的普及,广泛的运作在各个平台,各官网都在实现3D页面。它可以更接近于真实的展示我们的产品和介绍,带来极强的视觉冲击感。所以说,为了让自己更加优秀,css3 3D动画必不可少。下面这篇文章,将带你初步了解CSS3实现酷炫的3D旋转透视




要想自己的网页能有3D特效,必须要会透视。

透视 perspective(基础问题,可以在我的推荐书籍中学习到)

  • 在2D平面产生近大远小视觉立体,但是只是效果二维的
  • 如果想在网页产生3D效果需要透视(理解成3D物体投影在2D平面内)。
  • 模拟人类的视觉位置,可认为安排一只眼睛去看
  • 透视我们也称为视距:视距就是人的眼睛到屏幕的距离
  • 距离视觉点越近的在电脑平面成像越大,越远成像越小
  • 透视的单位是像素


图片来源网络

正文:

  • CSS3 3D 转换的常用API介绍
  • CSS3 3D 应用场景
  • CSS3 3D 实现一个立方体
  • 1.CSS3 3D 转换的常用API介绍

    首先先上一张css 3D的坐标系:


    接下来我们来介绍几个常用的api:


    旋转

    • rotateX()
    • rotateY()
    • rotateZ() 以上几个api分别代表绕x,y,z轴旋转,如下例子为绕x轴旋转的例子:



    相关代码如下:

    <style>
    .d3-wrap {
     position: relative;
     width: 300px;
     height: 300px;
     margin: 120px auto;
     /* 规定如何在 3D 空间中呈现被嵌套的元素 */
     transform-style: preserve-3d;
     transform: rotateX(0) rotateY(45deg);
     transform-origin: 150px 150px 150px;
    }
    
    .rotateX {
     width: 200px;
     height: 200px;
     background-color: #06c;
     transition: transform 2s;
     animation: rotateX 6s infinite;
    }
    
    @keyframes rotateX {
     0% {
     transform: rotateX(0);
     }
     100% {
     transform: rotateX(360deg);
     } 
    }
    </style>
    <div class="d3-wrap">
     <div class="rotateX"></div>
    </div>
    复制代码

    位移(Transform)

    • translateX(x) 定义 3D 转化,仅使用用于 X 轴的值
    • translateY(y) 定义 3D 转化,仅使用用于 Y 轴的值
    • translateZ(z) 定义 3D 转化,仅使用用于 Z 轴的值 以上几个api分别代表相对x,y,z轴的位移,如下例子为向z轴位移的例子:


    这里我们需要注意的是为了能看出位移的效果,我们需要在父容器上加如下属性:


    .d3-wrap {
     transform-style: preserve-3d;
     perspective: 500;
     /* 设置元素被查看位置的视图 */
     -webkit-perspective: 500;
    }

    当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。 代码如下:

    .d3-wrap {
     position: relative;
     width: 300px;
     height: 300px;
     margin: 120px auto;
     transform-style: preserve-3d;
     perspective: 500;
     -webkit-perspective: 500;
     transform: rotateX(0) rotateY(45deg);
     transform-origin: center center;
    }
    
    .transformZ {
     width: 200px;
     height: 200px;
     background-color: #06c;
     transition: transform 2s;
     animation: transformZ 6s infinite;
    }
    
    @keyframes transformZ {
     0% {
     transform: translateZ(100px);
     }
     100% {
     transform: translateZ(0);
     } 
    }

    3D缩放

    • scaleX(x) 给定一个 X 轴的3D 缩放转换值
    • scaleY(x) 给定一个 Y 轴的3D 缩放转换值
    • scaleZ(x) 给定一个 Z 轴的3D 缩放转换值 缩放设置和上面的类似,这里就不做过多介绍了。

    理论上说以上三种常见变换已经够用了,值得关注的是我们要想让元素呈现出3D效果,以下不可忽视的API也很重要:


    2.CSS3 3D 应用场景

    css 3D主要应用在网站的交互和模型效果上,比如:

    • 3D轮播图
    • 3D产品介绍
    • 室内3D仿真
    • h5 3D活动页面,比较典型的就是某年淘宝的年终总结H5
    • 3D数据可视化成图
    • 3D模型图 其实如果css 3D用的熟悉了,一些基本的3D模型完全可以用css画出来。

    3.CSS3 3D 实现一个立方体


    核心思路就是用6个面去拼接,通过设置rotate和translate来调整相互之间的位置,如下:



    具体代码如下:

    .container {
     position: relative;
     width: 300px;
     height: 300px;
     margin: 120px auto;
     transform-style: preserve-3d;
     /* 为了让其更有立体效果 */
     transform: rotateX(-30deg) rotateY(45deg);
     transform-origin: 150px 150px 150px;
     animation: rotate 6s infinite;
    }
    .container .page {
     position: absolute;
     width: 300px;
     height: 300px;
     text-align: center;
     line-height: 300px;
     color: #fff;
     background-size: cover;
    }
    .container .page:first-child {
     background-image: url(./my.jpeg);
     background-color: rgba(0,0,0,.2);
    }
    .container .page:nth-child(2) {
     transform: rotateX(90deg);
     transform-origin: 0 0;
     transition: transform 10s;
     background-color: rgba(179, 15, 64, 0.6);
     background-image: url(./my2.jpeg);
    }
    
    .container .page:nth-child(3) {
     transform: translateZ(300px);
     background-color: rgba(22, 160, 137, 0.7);
     background-image: url(./my3.jpeg);
    }
    
    .container .page:nth-child(4) {
     transform: rotateX(-90deg);
     transform-origin: -300px 300px;
     background-color: rgba(210, 212, 56, 0.2);
     background-image: url(./my4.jpeg);
    }
    .container .page:nth-child(5) {
     transform: rotateY(-90deg);
     transform-origin: 0 0;
     background-color: rgba(201, 23, 23, 0.6);
     background-image: url(./my5.jpeg);
    }
    .container .page:nth-child(6) {
     transform: rotateY(-90deg) translateZ(-300px);
     transform-origin: 0 300px;
     background-color: rgba(16, 149, 182, 0.2);
     background-image: url(./my6.jpeg);
    }

    html结构

    <div class="container">
     <div class="page">A</div>
     <div class="page">B</div>
     <div class="page">C</div>
     <div class="page">D</div>
     <div class="page">E</div>
     <div class="page">F</div>
    </div>

    扩展

    我们可以基于上面介绍的,给父元素添加动画或者拖拽效果,这样就可以做成更有交互性的3D方块了,比如置骰子游戏vr场景3D相册等等,具体实现我会抽空依次总结出来,记得关注哦~





    作者:徐小夕_Lab实验室
    链接:https://juejin.im/post/5dd16b39f265da0bca78958e



    喜欢小编的可以点个赞关注小编哦,小编每天都会给大家分享文章。

    我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!

    如果你也想学习前端,那么帮忙转发一下然后再关注小编后私信【1】可以得到我整理的这些前端资料了(私信方法:点击我头像进我主页有个上面有个私信按钮)

    一、项目背景】

    随着HTML5 CSS3的出现和发展,使得我们的网页可以实现更加复杂的效果,也使得我们的浏览体验更加丰富,所以今天我们将制作一个正方体的3D效果。


    【二、项目分析】

    想要利用CSS3实现3D立方体,就要清楚立方体是由六个面组成,分上下左右和前后,考虑这些可以帮助我们更好的融入CSS3的代码。

    因此我设置了6个div,作为立方体的6个面。因为定位的原因,一开始所有的盒子都是面对着屏幕这面的,因此要赋予每个面不一样的值,即不一样的位置它才能展现出来。


    【三、需要的工具】

    Adobe Dreamweaver


    【四、项目目标】

    实现3的l立方体旋转,鼠标移上去实现缩放效果。


    【五、项目实现】

    1、打开Adobe Dreamweaver,新建html文档。把标题改为“3d立方体”。


    2、在body标签,创建一个div盒子 ,给它class属性,在外层div里面在创建6个div表示立方体的六个面,同样给它们 class属性。

    <body>
        <div class="box">
          <div class="box2">
            <div class="box-2">top</div>
            <div class="box-2">btm</div>
            <div class="box-2">left</div>
            <div class="box-2">right</div>
            <div class="box-2">face</div>
            <div class="box-2">back</div>
          </div>
        </div>
    </body>

    3、创建CSS样式

    <style type="text/css">
    .box {
      width: 200px;
      height: 200px;
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      margin: auto;
      transition: all 2s;
      transform-style: preserve-3d;
      transform: rotateX(15deg) rotateY(-15deg);
    }
    .box:hover {
      transform: rotateX(300deg) rotateZ(300deg) rotateY(-300deg) scale(0.5);
    }
    .box .box-2 {
      width: 100px;
      height: 100px;
      text-align: center;
      line-height: 100px;
      font-size: 1.2em;
      position: absolute;
      top: 0;
      left: 0;
    }
    .box .box-2:nth-child(1) {
      /*小立方体第一面*/
      background: rgba(225,0,0,0.5);
      transform: rotateX(90deg) translateZ(50px); #角度 偏移量
    }
    .box .box-2:nth-child(2) {
        /*小立方体第二面*/
      background: rgba(255,255,0,0.5);
      transform: rotateX(-90deg) translateZ(50px);
    }
    .box .box-2:nth-child(3) {
        /*小立方体第三面*/
      background: rgba(225,0,255,0.5);
      transform: rotateY(-90deg) translateZ(50px);
    }
    .box .box-2:nth-child(4) {
         /*小立方体第四面*/
      background: rgba(0,255,0,0.5);
      transform: rotateY(90deg) translateZ(50px);
    }
    .box .box-2:nth-child(5) {
         /*小立方体第五面*/
      background: rgba(225,0,0,0.5);
      transform: translateZ(50px);
    }
    .box .box-2:nth-child(6) {
        /*小立方体第六面*/
      background: rgba(0,0,255,0.5);
      transform: rotateY(180deg) translateZ(50px);
    }
    </style>
      </head>
      <body>
        <div class="box">
          <div class="box2">
            <div class="box-2">top</div>
            <div class="box-2">btm</div>
            <div class="box-2">left</div>
            <div class="box-2">right</div>
            <div class="box-2">face</div>
            <div class="box-2">back</div>
          </div>
        </div>
    </body>
    </html>

    方法说明:

    rotateX() 方法

    通过 rotateX() 方法,元素围绕其 X 轴以给定的度数进行旋转。

    rotateY() 旋转

    通过 rotateY() 方法,元素围绕其 Y 轴以给定的度数进行旋转。

    rotateZ() 旋转

    通过 rotateZ() 方法,元素围绕其 Z 轴以给定的度数进行旋转。

    下表是部分属性所代表的含义:



    4、运行一下看下效果;点击F12运行。


    5、呈现的效果如下图所示。

    可以看到效果基本上可以 ,可是鼠标移上去没有效果。

    6、添加鼠标移上去缩放的效果

    .box:hover{
        transform: rotateX(300deg) rotateZ(300deg) rotateY(-300deg) scale(0.5);
    
      } # scale是缩放倍数


    7、外层再添加一个3d立方体形成叠加效果

    body代码:

    <div class="box">
    <div class="box-1">top</div>
    <div class="box-1">btm</div>
    <div class="box-1">left</div>
    <div class="box-1">right</div>
    <div class="box-1">face</div>
    <div class="box-1">back</div>
    </div>


    CSS样式代码

    <style type="text/css">
    .box .box-1{
        width: 200px;
        height: 200px;
        text-align: center;
        line-height: 200px;
        font-size: 2em;
        position: absolute;
        top: 0;
        left: 0;
      }
      .box .box-1:nth-child(1){
        /*大立方体第一面*/
        background: rgba(225,0,0,0.5);
        transform:rotateX(90deg) translateZ(100px);
    
      }.box .box-1:nth-child(2){
             /*大立方体第二面*/
        background: rgba(255,255,0,0.5);
        transform:rotateX(-90deg) translateZ(100px);
    
      }.box .box-1:nth-child(3){
            /*大立方体第三面*/
        background: rgba(225,0,255,0.5);
        transform:rotateY(-90deg) translateZ(100px);
      }.box .box-1:nth-child(4){
             /*大立方体第四面*/
        background: rgba(0,255,0,0.5);
        transform:rotateY(90deg) translateZ(100px);
    
      }.box .box-1:nth-child(5){
            /*大立方体第五面*/
        background: rgba(225,0,0,0.5);
          transform:translateZ(100px);
      }.box .box-1:nth-child(6){
            /*大立方体第六面*/
        background: rgba(0,0,255,0.5);
        transform:rotateY(180deg) translateZ(100px);
      }
    </style>


    【六、效果展示】

    1、点击运行,效果如下图所示。

    2、鼠标移到立方体上,缩放效果展示,如下图所示。


    【七、总结】

    1、整个效果写出来,还是比较简单的,只要明白各个命令的意思,剩下的就是组织一下逻辑而已。

    2、欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

    3、CSS样式的效果不止这些,还有更加炫酷的效果,值得大家去学习。

    4、实现的方法3d立方体的方法有很多,但这是最简单的一种。

    5、如果需要本文源码,请在公众号后台回复“立方体”四个字获取。


    看完本文有收获?请转发分享给更多的人

    IT共享之家

    入群请在微信后台回复【入群】

    想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/

    内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

    大家好,我是大澈!

    本文约 500+ 字,整篇阅读约需 1 分钟。

    今天分享一段优质 CSS 代码片段,实现了超酷的3D立体文字效果。

    老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

    div {
      color: #ffffff;
      font-size: 60px;
      font-weight: 700;
      text-shadow: 
        1px 0px #ff5500, 1px 2px #ff5500, 3px 1px #ffaa00,
        2px 3px #ff5500, 4px 2px #ffaa00, 4px 4px #ff5500,
        5px 3px #ffaa00, 5px 5px #ff5500, 7px 4px #ffaa00,
        6px 6px #ff5500, 8px 5px #ffaa00, 7px 7px #ff5500,
        9px 6px #ffaa00, 9px 8px #ff5500, 11px 7px #ffaa00
    }


    分享原因

    这段代码展示了如何使用CSS的text-shadow属性创建复杂的多层次阴影效果,为文本添加立体感和视觉深度。

    通过设置多个阴影值,可以实现炫酷的文字效果,非常适合用于标题、横幅或其他需要吸引注意力的文本元素。

    项目中用到时,可直接CV!

    代码解析

    1. 基础文字样式

    color: #ffffff;: 设置文本颜色为白色。

    font-size: 60px;: 设置文本字体大小为60像素。

    font-weight: 700;: 设置文本粗细为700,即加粗。


    2. text-shadow: ...

    设置多个文本阴影。

    阴影值的格式是:x方向偏移量 y方向偏移量 阴影颜色。

    每个阴影值定义一个特定位置和颜色的阴影,多个阴影值组合在一起,创造出复杂的、多层次的3D阴影效果


    - end -