css3 光线-用CSS3制作一个球体

2023-08-26 0 8,892 百度已收录

元素内。 这个div.stage非常有用。 我们可以给它设置一些角度和阴影位置,让3D球看起来更加3D。

对它们应用一些样式代码:

.stage {
  width: 300px;
  height: 300px;
  display: inline-block;
  margin: 20px;
  perspective: 1200px;
  perspective-origin: 50% 50%;
}
.ball .shadow {
  position: absolute;
  width: 100%;
  height: 100%;
  background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.1) 40%, rgba(0, 0, 0, 0) 50%);
  transform: rotateX(90deg) translateZ(-150px);
  z-index: -1;
}

请注意,这里演示的代码没有浏览器前缀,但 Codepen 上的示例都带有前缀。 在前面的示例中,div.stage 的透视值为 1200px。 这种透视属性对于 3D 变形至关重要。 此属性设置观看者的位置并将视觉内容映射到视锥体上,视锥体又被投影到 2D 观看平面上。 如果没有指定透视,则Z轴空间中的所有点都将平铺到同一个2D观察平面中,并且变换结果上将没有白平衡的概念。 简而言之,透视使舞台看起来像是在 3D 场景中。

关于perspective属性的详细介绍,可以阅读《Transform-style与Perspective属性》。

然后使用渐变为球制作阴影,并对其设置变换效果以变换阴影位置。 您可以使用旋转、缩放、平移或倾斜来更改 3D 空间中的阴影位置。 球体的阴影在 X 轴上旋转 90 度,然后在 Z 轴上向上推 150 像素。

我们给stage容器舞台设置一个透视值,往下看就可以看到一个椭圆形。

现在效果看起来比以前好多了,所以给它添加更多材质效果,让它看起来更像一个 3D 球。

染色

在现实世界中,您很难从某个角度找到物体。 表示光从其他表面反射并最终与不同光源混合。 使用伪元素添加两个渐变效果,使其看起来像是两个光源组合在一起,创建了一个更真实的球体。

.ball {
  display: inline-block;
  width: 100%;
  height: 100%;
  margin: 0;
  border-radius: 50%;
  position: relative;
  background: radial-gradient(circle at 50% 120%, #81e8f6, #76deef 10%, #055194 80%, #062745 100%);
}
.ball:before {
  content: "";
  position: absolute;
  top: 1%;
  left: 5%;
  width: 90%;
  height: 90%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 0px, #ffffff, rgba(255, 255, 255, 0) 58%);
  filter: blur(5px);
  z-index: 2;
}

上面使用了两个稍微复杂的渐变。

在球元素上使用渐变来创建低光效果,渐变的中心位于元素的 (50% 120%) 位置。 这样做可以使最终颜色不那么明显,并且渐变看起来更平滑。

第二个渐变位于底部,更亮,并且是球体宽度和高度的 90%。 渐变以圆心为中心,向下逐渐消失。

这里我们使用 :before 创建阴影而不是创建新元素。

由于渐变有锐利的边缘效果,我们过去常常用模糊来柔化锐利的边缘,不让它看起来那么突出。 不幸的是,到目前为止,这个属性只有Webkit核心浏览器(Chrome和Safari)支持,但其他浏览器将来可能会支持它。

将两种渐变效果结合起来后,效果看起来更好了:

希尼尔

到目前为止,效果看起来很暗,让我们为效果添加一些光泽并创建一个九球。

为了实现这一点,我们将借助柔和的灯光调整突出物的底面。 我们需要使用两个伪元素来实现此效果。

.ball {
  display: inline-block;
  width: 100%;
  height: 100%;
  margin: 0;
  border-radius: 50%;
  position: relative;
  background: radial-gradient(circle at 50% 120%, #323232, #0a0a0a 80%, #000000 100%);
}
.ball:before {
  content: "";
  position: absolute;
  background: radial-gradient(circle at 50% 120%, rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0) 70%);
  border-radius: 50%;
  bottom: 2.5%;
  left: 5%;
  opacity: 0.6;
  height: 100%;
  width: 90%;
  filter: blur(5px);
  z-index: 2;
}
.ball:after {
  content: "";
  width: 100%;
  height: 100%;
  position: absolute;
  top: 5%;
  left: 10%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8) 14%, rgba(255, 255, 255, 0) 24%);
  transform: translateX(-80px) translateY(-90px) skewX(-20deg);
  filter: blur(10px);
}

这里球体的初始颜色发生了毫秒的变化。 还要在:before伪类上写一个更突出的效果,它再次将光从球体顶部反射到球体表面。

接下来css3 光线,添加一个新的伪类:之后,在该伪类上使用从红色到透明(约 24%)的径向渐变。 这会产生红色闪光效果,为了使其看起来更像反射 3D 对象,我们在前面使用了 CSS 变换。

使用变换属性,将元素向左移动 80 像素 (translateX(-80px)),向下移动 90 像素 (translateY(-90px)),同时在 X 轴上将其扭曲 -20 度 (skewX(-20 度))。 这样一来,整个疗效看起来更像是一个发光的球。

8球

打9球的朋友都知道,最后必须打8球。 让我们再降低一步,创建一个 8 号球。

我们需要添加一个额外的元素来使这8的疗效:

.ball .eight { width: 110px; height: 110px; margin: 30%; background: white; border-radius: 50%; transform: translateX(68px) translateY(-60px) skewX(15deg) skewY(2deg); position: absolute; } .ball .eight:before { content: "8"; display: block; position: absolute; text-align: center; height: 80px; width: 100px; left: 50px; margin-left: -40px; top: 44px; margin-top: -40px; color: black; font-family: Arial; font-size: 90px; line-height: 104px; }

为这个新创建的元素添加 border-radius:100% 样式,创建一个圆,并将圆放置在球的右上角,并为其添加一些变换样式以获得更合适的效果。 为了在球上显示数字8,您需要使用伪类:在内容之前,将其值设置为8,然后应用一些CSS样式。 最后它的效果是这样的:

添加耳朵

CSS不仅有强大的transform属性,还有animation属性,可以做出一些动画效果。 使用 CSS 关键帧,您可以为变换添加一些动画效果。 为了更好地探索这一点,让我们创建一双会旋转的眼睛。

第一步是根据上面的 8 号球示例调整一些颜色。 让它看起来更像一双眼睛。 修改后的 HTML 如下所示:

大多数 CSS 类似于制作 8 号尺寸,除了一只眼睛的膜和瞳孔。

.iris {
  width: 40%;
  height: 40%;
  margin: 30%;
  border-radius: 50%;
  background: radial-gradient(circle at 50% 50%, #208ab4 0%, #6fbfff 30%, #4381b2 100%);
  transform: translateX(68px) translateY(-60px) skewX(15deg) skewY(2deg);
  position: absolute;
  animation: move-eye-skew 5s ease-out infinite;
}
.iris:before {
  content: "";
  display: block;
  position: absolute;
  width: 37.5%;
  height: 37.5%;
  border-radius: 50%;
  top: 31.25%;
  left: 31.25%;
  background: black;
}
.iris:after {
  content: "";
  display: block;
  position: absolute;
  width: 31.25%;
  height: 31.25%;
  border-radius: 50%;
  top: 18.75%;
  left: 18.75%;
  background: rgba(255, 255, 255, 0.2);
}

在虹膜上创建红色渐变,使其看起来像眼睛的膜,并使用伪类创建耳朵的瞳孔,使用样式使它们更亮一点。 并为其添加动画效果:

animation: animation-name 5s ease-out infinite;

本例中创建了一个名为animation-name的动画,动画持续5s,并且该动画的效果一直循环。 为了让动画看起来更自然,给动画添加ease-out功能,让动画由快变慢。

如果没有动画,我们所创建的只是一只不会转动的耳朵,如下所示:

接下来,使用关键帧创建眼球的移动方式。

@keyframes move-eye-skew {
  0% {
    transform: none;
  }
  20% {
    transform: translateX(-68px) translateY(30px) skewX(15deg) skewY(-10deg) scale(0.95);
  }
  25%, 44% {
    transform: none;
  }
  50%, 60% {
    transform: translateX(68px) translateY(-40px) skewX(5deg) skewY(2deg) scaleX(0.95);
  }
  66%, 100% {
    transform: none;
  }
}

CSS 动画中的关键帧乍一看可能很棘手。 描述元素的不同状态通过一系列阶段正在做什么。 每个状态都由一个比率控制。 在这个例子中,它主要用于改变iris中的变换。 从 20% 开始使用变换来连接眼球。 0%和20%之间的差异是由浏览器控制的,浏览器会手动估计并让这两点实现平滑过渡。

继续控制每个帧上的变换,如上所述。 并让整个动画持续5s。

为了更好地兼容浏览器,在创建关键帧动画帧时不要忘记添加相应的浏览器前缀。

气泡

将盒子阴影和动画结合起来可以产生各种有趣的效果,例如气泡效果。

创建一个看起来与之前的球体类似的气泡效果,只是使用更透明的颜色并向伪类添加光泽效果。

同时对气泡进行变换,利用动画让整个气泡向上摆动。

@keyframes bubble-anim {
  0% {
    transform: scale(1);
  }
  20% {
    transform: scaleY(0.95) scaleX(1.05);
  }
  48% {
    transform: scaleY(1.1) scaleX(0.9);
  }
  68% {
    transform: scaleY(0.98) scaleX(1.02);
  }
  80% {
    transform: scaleY(1.02) scaleX(0.98);
  }
  97%, 100% {
    transform: scale(1);
  }
}

动画应用于整个气泡,具有以下效果:

使用图像

到目前为止我们看到的球体处理都没有使用任何图像。 如果使用背景图片来做球形效果,需要添加更多细节,需要使用伪元素的内阴影。 就拿下面听到的例子来说吧。

添加一些渐变效果,并添加一些光泽效果来创造一些幻觉。

地球

动画还可以用于控制背景图像的位置。 这样我们就可以创建一个旋转的地球仪效果。

例如,我们以世界地图的平面ltju作为背景:

为了更好地营造3D空间,效果中添加了一些阴影和动画。 下图疗效是@@Sidoruk_SV写的旋转地球仪:

总结

本文通过示例逐步告诉您如何使用 CSS 创建 3D 球形效果。 以及如何使用CSS box-shadow和渐变为3D球添加一些光泽效果,使球更像3D空间。 并配合CSS动画让整个小球向上移动。 前面的例子再次证明了使用box-shadow和渐变可以产生多种效果。 如果你有兴趣的话,自己尝试一下,说不定能得到更有趣的疗效。 同时,我也希望分享您所做的案例。

本文根据@Donovan 的《Spheres》翻译。 整个翻译包含了我们自己的理解和想法。 如果翻译的不好或者有错误的地方,请各位同仁不吝赐教。 如需转载此译文css3 光线,请注明中文出处://cssanimation.rocks/spheres/。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 css3 css3 光线-用CSS3制作一个球体 https://www.wkzy.net/game/159333.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务