Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

    • CSS绘制三角形
    • CSS排版上下文
    • CSS伪类
    • CSS伪元素
    • CSS实现列表元素分割线
    • CSS使用skew
    • CSS让物体居中
    • CSS绘制太极图
    • CSS使用实体替代预留符号
    • 动态修改after或before的content
    • CSS旋转border
    • CSS绘制空心五角星
    • CSS时钟
    • CSS图片手风琴伸缩效果
    • CSS的选择器
    • CSS波浪border
    • CSS内切圆角
    • CSS文字环绕
    • CSS outline使用详解
    • CSS使用transform缩放scale不生效
    • CSS使用linear-gradient或生成虚线
    • CSS 图片srcset属性
    • CSS object-fit属性详解
    • CSS 使用filter对颜色就行处理
    • CSS选择器的优先级
    • css与scss文件引入问题
    • CSS实现圆角梯形
    • 使用filter实现聚光灯效果
    • 利用backface-visibility hidden实现3d翻转双面card
    • 正方体3d旋转
    • 修改浏览器自动填充的背景颜色
    • CSS修改选中文字颜色
    • CSS实现打字机效果
    • marquee文字弹跳
    • logo文字图片倒影
    • 纯CSS实现popup弹窗
    • ie兼容inline-block
    • 浏览器默认样式
    • CSS效果-文字
    • CSS效果-按钮
    • css3 transition属性对linear-gradient渐变色无效
    • 不同预处理器下的样式穿透
    • 属性顺序
    • CSS重绘与回流
    • img标签与before和after
    • CSS实现文本两端对齐
    • CSS filter的contrast属性和blur属性奇特的结合
    • CSS不常用属性记录
    • CSS sprite雪碧图制作与使用
  • JavaScript

  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • CSS
kros
2024-05-13

正方体3d旋转

最近在查询webpack文档时发现一个有意思动画,作为程序员既然看到了那么就要研究它是如何实现的。

webpack

很明显,上面的正方体是由不同的div块经过transform变换再拼接形成,所以首先我们要绘制出正方体。 将正方体6个面分成前、后、上、下、左、右,再分别对应其位置,设定正方体边长为120px,具体位置如下:

  • 前:将块在z轴上平移60px
  • 后:将块在z轴上平移-60px
  • 上:将块在y轴上平移-60px再绕x轴旋转90deg
  • 下:将块在y轴上平移60px再绕x轴旋转90deg
  • 左:将块在x轴上平移-60px再绕y轴旋转90deg
  • 有:将块在x轴上平移60px再绕y轴旋转90deg 具体代码实现如下:
<div class="box">
  <div class="front"></div>
  <div class="back"></div>
  <div class="top"></div>
  <div class="bottom"></div>
  <div class="left"></div>
  <div class="right"></div>
</div>
1
2
3
4
5
6
7
8
body {
  background: #2b3a42;
}
.box {
  position: relative;
  margin: 40px;
  width: 120px;
  height: 120px;
  div {
    position: absolute;
    width: 100%;
    height: 100%;
    background: #8dd6f980;
    border: 1px solid white;
  }
  .front {
    transform: translateZ(60px);
  }
  .back {
    transform: translateZ(-60px);
  }
  .top {
    transform: translateY(-60px) rotateX(90deg);
  }
  .bottom {
    transform: translateY(60px) rotateX(90deg);
  }
  .left {
    transform: translateX(-60px) rotateY(90deg);
  }
  .right {
    transform: translateX(60px) rotateY(90deg);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

直接运行上面代码是不能看到正方体的,因为我们没有开启3d视角,默认看到的东西都是在一个平面内

sd

这里需要使用transform-style: preserve-3d;设置元素位于3d空间中,再将box进行简单的旋转使之在空间中更加明显

.box {
  ...
  // 添加属性
  transform-style: preserve-3d;
  transform: rotateX(-30deg) rotateY(-30deg) ;
}

1
2
3
4
5
6
7

zft

到这里我们就得到了一个正方体,剩下的旋转就更加简单了,使用@keyframes制作一个简单的旋转动画即可。

.box {
  ...
  // 添加动画
  animation: 5s infinite rotate;
}
/* 从初始角度-30deg 按照每次旋转90deg设计 */
@keyframes rotate {
  0% {
    transform: rotateX(-30deg) rotateY(60deg);
  }
  
  25% {
    transform: rotateX(-30deg) rotateY(150deg);
  }
  
  50% {
    transform: rotateX(-30deg) rotateY(240deg);
  }
  
  75% {
    transform: rotateX(-30deg) rotateY(330deg);
  }
  
  100% {
    transform: rotateX(-30deg) rotateY(420deg);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

xzzft

到这里最困难的正方体绘制旋转就完了,如果要完全实现webpack的效果只需要调整box的初始旋转角度和重复绘制一个更小的正方体,这里就不再废话了。(o゚▽゚)o

上次更新: 2025/09/05, 8:09:00
利用backface-visibility hidden实现3d翻转双面card
修改浏览器自动填充的背景颜色

← 利用backface-visibility hidden实现3d翻转双面card 修改浏览器自动填充的背景颜色→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev