发布于 2026-01-06 0 阅读
0

让我们一起制作一个 CSS 立方体!DEV 的全球展示与分享挑战赛,由 Mux 呈现:展示你的项目!

让我们创建一个 CSS 立方体

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

CSS transform 功能非常强大!本文将介绍如何制作一个 3D 立方体。

首先,我们来创建标记:

<div class="container">
  <div class="cube">
    <div class="face top">Top</div>
    <div class="face bottom">Bottom</div>
    <div class="face left">Left</div>
    <div class="face right">Right</div>
    <div class="face front">Front</div>
    <div class="face back">Back</div>
  </div>
</div>
Enter fullscreen mode Exit fullscreen mode

立方体的每个面都是一个独立的div元素。让我们创建一些初始样式:

.container {
  width: 200px;
  height: 200px;
  perspective: 500px;
  margin: 100px;
}

.cube {
  position: relative;
  width: 200px;
  height: 200px;
  transform-style: preserve-3d;
}

.face {
  width: 200px;
  height: 200px;
  background: skyblue;
  border: 2px solid black;
  position: absolute;
  opacity: 0.5;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: Arial, sans-serif;
  font-size: 2rem;
}
Enter fullscreen mode Exit fullscreen mode

我们对立方体的各个面进行了一些样式设置,并将它们绝对定位,使它们彼此重叠。首先,我们将旋转每个面,使其朝向正确的方向。下一步是将每个面从立方体的中心向边缘移动。

以下是我们目前掌握的信息:

初始定位元素

我们目前正面观察的是立方体。如果我们稍微旋转一下“相机”,观察起来会更容易。让我们rotate3d给立方体添加一个变换:

.cube {
  position: relative;
  width: 200px;
  height: 200px;
  transform-style: preserve-3d;
  transform: rotate3d(1, 1, 0, 45deg);
}
Enter fullscreen mode Exit fullscreen mode

现在这些元素旋转了一定角度,这样我们就能更好地看到3D结构了:

在三维空间中旋转

我们先来处理正面。我们的立方体尺寸为 200px x 200px x 200px。目前所有元素都位于立方体的正中心。正面方向已经正确,我们只需要将其向外移动 100px,使其位于前边缘。让我们为正面添加一条新规则并将其向外移动:

.front {
  transform: translateZ(100px);
}
Enter fullscreen mode Exit fullscreen mode

现在立方体的正面已经就位:

正面朝下

接下来是背面。它已经位于正确的平面上,但我们需要绕 y 轴旋转 180 度,使文字朝外。与正面一样,我们也需要将其向外移动 100 像素:

.back {
  transform: translateZ(-100px) rotateY(180deg);
}
Enter fullscreen mode Exit fullscreen mode

背面现在处于正确位置:

背部朝上

接下来我们处理左右两侧。它们需要绕 y 轴旋转 90 度,使它们分别朝外。左侧需要旋转 -90 度。

然后需要将它们沿 x 轴移动到立方体的边缘:

.left {
  transform: translateX(-100px) rotateY(-90deg);
}

.right {
  transform: translateX(100px) rotateY(90deg);
}
Enter fullscreen mode Exit fullscreen mode

左右位置

最后,我们需要调整顶部和底部的位置。它们需要绕 x 轴旋转 90 度,使它们分别朝上和朝下。同样,顶部需要旋转 90 度,底部需要旋转 -90 度,这样文字方向才正确。

.top {
  transform: translateY(-100px) rotateX(90deg);
}

.bottom {
  transform: translateY(100px) rotateX(-90deg);
}
Enter fullscreen mode Exit fullscreen mode

完成的立方体

看起来像个立方体!

为了展示我们的新立方体,让我们给它加上一个旋转动画:

@keyframes turn {
  from { transform: rotate3d(0, 0, 0, 0); }
  to { transform: rotate3d(1, 1, 0, 360deg); }
}

.cube {
  position: relative;
  width: 200px;
  height: 200px;
  transform-style: preserve-3d;
  animation: turn 5s linear infinite;
}
Enter fullscreen mode Exit fullscreen mode

最后,我们还要考虑可访问性。如果用户在其操作系统中禁用了动画,我们就不要对立方体进行动画处理,而是像之前那样以 45 度角显示它:

@media (prefers-reduced-motion: reduce) {
  .cube {
    animation: none;
    transform: rotate3d(1, 1, 0, 45deg);
  }
}
Enter fullscreen mode Exit fullscreen mode

以下是 CodePen 中的最终效果:

你喜欢这篇文章吗?想了解更多 CSS 知识,请关注我的新书《现代 CSS》!

文章来源:https://dev.to/joeattardi/let-s-make-a-css-cube-1fed