只使用CSS制作彩虹文本动画

14
我受到了这个彩虹文字动画rainbow-text-animation的启发,我想仅使用CSS来实现它,而不是所有那些复杂的SCSS代码。
到目前为止,我已经得到了我喜欢的东西,现在我只想让它从左到右移动并且在一整行中有多种颜色,而不是一次只有一种颜色。 运行代码片段以查看我在说什么。 所以,正如您所看到的,我希望在一行中拥有尽可能多的颜色,而不是一次只有一种颜色。

#shadowBox {
  background-color: rgb(0, 0, 0);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.2);
  /* Black w/opacity/see-through */
  border: 3px solid;
}

.rainbow {
  text-align: center;
  text-decoration: underline;
  font-size: 32px;
  font-family: monospace;
  letter-spacing: 5px;
  animation: colorRotate 6s linear 0s infinite;
}

@keyframes colorRotate {
  from {
    color: #6666ff;
  }
  10% {
    color: #0099ff;
  }
  50% {
    color: #00ff00;
  }
  75% {
    color: #ff3399;
  }
  100% {
    color: #6666ff;
  }
}
<div id="shadowBox">

  <h3 class="rainbow">COMING SOON</h3>

</div>

2个回答

28
使用移动的渐变背景,颜色到透明,并使用背景剪辑到文本,可以实现此效果。

#shadowBox {
    background-color: rgb(0, 0, 0);
    /* Fallback color */
    background-color: rgba(0, 0, 0, 0.2);
    /* Black w/opacity/see-through */
    border: 3px solid;
}

.rainbow {
    text-align: center;
    text-decoration: underline;
    font-size: 32px;
    font-family: monospace;
    letter-spacing: 5px;
}
.rainbow_text_animated {
    background: linear-gradient(to right, #6666ff, #0099ff , #00ff00, #ff3399, #6666ff);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    animation: rainbow_animation 6s ease-in-out infinite;
    background-size: 400% 100%;
}

@keyframes rainbow_animation {
    0%,100% {
        background-position: 0 0;
    }

    50% {
        background-position: 100% 0;
    }
}
<div id="shadowBox">
    <h3 class="rainbow rainbow_text_animated">COMING SOON</h3>
</div>


太好了,现在我该如何将其从右到左改为从左到右,并更改速度呢? - Azazel
3
你可以通过调整.rainbow_text_animated动画的持续时间来自由改变速度。(例如将6s更改为12s以使速度减慢一倍)目前它正在将渐变背景向右移动,然后向左移动,然后再向右移动等等。这创造了“循环”效果。 - Austen Holland
1
哦,太好了!感谢您的澄清!还有感谢您的帮助!这正是我需要的,让我的生活变得更简单。SCSS 对我来说仍然很难。我已经买了一本书来学习使用 SASS 进行响应式设计,但我宁愿先学习媒体查询,以便更容易地理解响应式设计,然后再进一步学习。 - Azazel
1
提示:将速度设置为1秒,效果更酷炫! - Halo

2

#shadowBox {
  background-color: rgb(0, 0, 0);
  /* Fallback color */
  background-color: rgba(0, 0, 0, 0.2);
  /* Black w/opacity/see-through */
  border: 3px solid;
}

.rainbow {
  text-align: center;
  text-decoration: underline;
  font-size: 32px;
  font-family: monospace;
  letter-spacing: 5px;
  animation: colorRotate .5s linear 0s infinite;
}

@keyframes colorRotate {
  from {
    color: #6666ff;
  }
  10% {
    color: #0099ff;
  }
  50% {
    color: #00ff00;
  }
  75% {
    color: #ff3399;
  }
  100% {
    color: #6666ff;
  }
}
<div id="shadowBox">

  <h3 class="rainbow">VERB</h3>

</div>


3
请勿仅以代码作为答案发布,还需解释您的代码的作用以及如何解决问题。附带解释的答案通常更有帮助、更高质量,并更容易赢得赞同。 - Tyler2P
1
这并没有解决提问者的问题。提问者想知道如何同时呈现多种颜色,而不是逐个循环显示颜色。 - Austen Holland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接