CSS实现旋转钻石背景详解

一、HTML实现

首先我们来构建基本结构,钻石球体的结构还是比较复杂的,需要很多盒子来组合。我们创建了一个具有旋转球体效果的背景。

相关代码如下所示。

<div class="background">
<div class="rotater">
  <div class="sphere">
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
 <span></span>
  </div>
  ......
  此处省略四个类名为sphere的div盒子
</div>
</div>

说明:

(1)最外层的div:用于包含整个背景效果的容器。

(2).rotater:用于旋转的容器,在这个容器内的球体元素会以相同的速度和方向旋转。

(3).sphere:球体元素的容器,在它里面包含了一组<span>元素。

(4)<span>:球体的构成单元,通过旋转和样式设置创建了球体的外观。

以上就是整体的构成,由多个球体组成的旋转钻石效果,每个球体都由一组<span>元素构成。整个背景以相同的速度和方向旋转,营造出动态且有趣的视觉效果。

二、CSS实现

HTML代码本身目前并未为球体元素设置样式,因此接下来为这些元素添加相关样式,来实现具体的外观和表现。

1、为容器.rotater添加关键帧动画

首先我们为旋转球体的容器.rotater添加了样式,添加了关键帧动画。代码如下所示:

.background .rotater{
  position: absolute;
  top: calc(50% - 200px);
  left: calc(50% - 200px);
  width: 400px;
  height: 400px;
  transform-style: preserve-3d;
  animation: rotater 20s linear infinite;
}
@keyframes rotater {
  0%{
    transform: rotateX(0deg) rotateY(0deg);
  }
  100%{
    transform: rotateX(360deg) rotateY(360deg);
  }
}

说明:

(1)rotater定位:

对于 rotater 的样式,我们将容器设置为绝对定位,使其相对于其最近的定位父元素进行定位。启用3D变换,使容器和其中的元素能够在3D空间中进行变换,这里插一句,该属性可以开启CSS硬件加速。最后应用名为rotater的关键帧动画到容器上,持续时间为 20 秒,使用线性的时间曲线,并且无限循环播放。

(2)rotater关键帧动画:

对于rotater的关键帧动画,在 0% 的关键帧中,容器的变换样式为旋转角度为 0 度;在 100% 的关键帧中,容器的变换样式为旋转角度为 360 度,即一圈完整的旋转。将包含球体元素的容器以 20 秒的持续时间和线性的时间曲线进行旋转。通过持续的旋转,球体的外观将以连续平滑的动画效果展示。

2、为球体元素添加样式

接下来为球体容器中的每个球体元素添加样式。相关代码如下:

.background .rotater .sphere{
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform-style: preserve-3d;
}
.background .rotater .sphere:nth-child(2){
  transform: rotate(90deg);
}
.background .rotater .sphere:nth-child(3){
  transform: rotate(45deg);
}
.background .rotater .sphere:nth-child(4){
  transform: rotate(-45deg);
}

说明:

对于.sphere的样式,我们将球体元素设置为绝对定位,使其脱离文档流。然后我们去选择球体容器中的某个球体元素,添加样式。比如将第二个球体元素以 90 度的角度顺时针旋转;将第三个球体元素以 45 度的角度顺时针旋转;将第四个球体元素以 -45 度的角度顺时针旋转。通过这些变换,球体元素在球体容器中呈现出错落有致的位置和旋转角度。

3、为球体元素的子元素span添加样式

最后我们为球体容器内的每个球体元素的子元素<span>添加样式。相关代码如下:

.background .rotater .sphere span:nth-child(1){
  transform: rotateY(0deg);
}
.background .rotater .sphere span:nth-child(2){
  transform: rotateY(30deg);
}
.background .rotater .sphere span:nth-child(3){
  transform: rotateY(60deg);
}
.background .rotater .sphere span:nth-child(4){
  transform: rotateY(90deg);
}
.background .rotater .sphere span:nth-child(5){
  transform: rotateY(120deg);
}
.background .rotater .sphere span:nth-child(6){
  transform: rotateY(150deg);
}

说明:

对于<span>的样式,我们通过nth-child(n)选择器选择球体容器每个.sphere元素下的第n个子元素<span>。transform: rotateY(n deg)表示将该子元素以n度的角度绕Y轴顺时针旋转。通过这些样式,每个球体元素内的<span>子元素将以不同的旋转角度绕Y轴旋转,同时设置了径向渐变背景和圆角样式,从而呈现出具有立体感的球体效果。

三、总结

以上就是整个效果的实现过程了,相比之前的CSS效果,这个会相对复杂一些,可以多花些时间去琢磨一下,或者可以在该效果的基础上做一些其他的改变。总之,这些CSS特效的可扩展性还是很高的。效果请参考旋转钻石背景demo

版权声明:本文为老张的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.webppp.com/view/css_rotater_sphere.html