🙋🏿手把手教你打造这么炫酷的七色彩虹,快进来看看

316 阅读3分钟

前言

众所周知,彩虹的颜色顺序从外到内的顺序;红色、橙色、黄色、绿色、蓝色、靛蓝色和紫色。而我们今天要实现的效果,就是通过纯CSS实现这样一个七色彩虹,具体效果可以参考下面的码上掘金。

效果预览

看了效果展示后,接下来我们来一步步实现它。

HTML

首先是HTML部分,毕竟是七色彩虹嘛,所以准备好七个div元素,分别代表七种颜色。

 <figure class="rainbow">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </figure>

这里定义了一个名为rainbowfigure元素,并包含了7个空的div元素作为其子元素。如果想要实现七彩效果,还需要添加相应的CSS样式或来定义每个div元素的颜色和动画效果。下面我们就来介绍一下相关的CSS样式。

CSS

这里是CSS样式部分,首先是rainbow元素,相关代码如下。

 .rainbow {
        width: 20em;
        height: 10em;
        position: relative;
        display: flex;
        justify-content: center;
        align-items: center;
        animation: move 4s linear infinite alternate;
      }
      @keyframes move {
        50% {
          transform: translateY(5em);
        }
      }

rainbow元素上应用名为move的动画效果。这个动画效果在4秒内以线性速度无限循环交替发生。

50% 的进度时,容器会向上移动 5em,通过transform属性的translateY函数来实现垂直方向的平移。

 .rainbow div {
        box-sizing: border-box;
        background-color: currentColor;
        filter: opacity(0.6);
        position: absolute;
        width: calc(100% - 2em * (var(--n) - 1));
        height: calc(200% - 2em * (var(--n) - 1));
        border-radius: 10%;
        animation: change 2s linear infinite;
        animation-delay: calc(0.1s * var(--n));
      }
      @keyframes change {
        50%,
        100% {
          border-radius: 50%;
          background-color: transparent;
          border: 1em solid;
          border-color: transparent currentColor currentColor transparent;
          transform: rotate(225deg);
          filter: opacity(1);
        }
      }

这里我们定义了一个名为change的关键帧动画。在这个关键帧动画中,有两个关键帧,即 50%100%。这意味着在动画的一半和结束时,将应用下面的样式。在 50%100% 的时间点,元素的边框半径变为50%,背景颜色变为透明,边框变为1em宽的实线,边框颜色由透明变为当前颜色,当前颜色再变为透明。同时,元素的旋转角度变为225度,透明度变为1

通过这些属性的变化,元素在动画过程中会从一个正常的矩形形状变为一个倾斜的圆形,并且边框颜色会从透明渐变为当前颜色。

 .rainbow div:nth-child(1) {
        --n: 1;
        color: orangered;
      }
      .rainbow div:nth-child(2) {
        --n: 2;
        color: orange;
      }
      .rainbow div:nth-child(3) {
        --n: 3;
        color: yellow;
      }
      .rainbow div:nth-child(4) {
        --n: 4;
        color: mediumspringgreen;
      }
      .rainbow div:nth-child(5) {
        --n: 5;
        color: deepskyblue;
      }
      .rainbow div:nth-child(6) {
        --n: 6;
        color: #065279;
      }
      .rainbow div:nth-child(7) {
        --n: 7;
        color: mediumpurple;
      }

最后就是为每个div元素赋予颜色值了。每个子元素的颜色和索引值通过CSS变量进行定义。:nth-child(n)选择器用于选择第n个子元素,而--n是一个自定义的CSS变量,用于存储索引值。

具体来说,第一个子元素 (div:nth-child(1)) 的颜色为orangered,索引值为1;第二个子元素 (div:nth-child(2)) 的颜色为orange,索引值为2;依此类推,直到第七个子元素 (div:nth-child(7)) 的颜色为 mediumpurple,索引值为7

总体而言,这里用于实现一个彩虹色效果,每个子元素都有不同的颜色。

总结

以上就是七色彩虹效果的实现过程了,代码比较简单,通俗易懂,纯靠CSS实现。关于该效果如果大家有更好的想法欢迎在评论区分享,互相学习。最后,完整代码在码上掘金里可以查看,如果有什么问题大家在评论区里讨论~