循环div背景颜色逐渐通过所有彩虹色CSS

时间:2016-09-27 13:11:27

标签: html css

如何通过彩虹的所有颜色随时间改变div的背景颜色,然后再将其重新设置为原始颜色并循环进行无限处理?

下面的代码是我想要的结果,但只有一个div逐渐改变颜色。

<div id="rainbow"></div>

.rainbow {
background-color: blue;  
  float:left;
  width: 70px;
  height:70px;
  border: 1px solid white;
 
}
.rainbow:first-child {
background-color: red;  
}
.rainbow:nth-child(2) {
background-color: orange;  
}.rainbow:nth-child(3) {
background-color: yellow;  
}.rainbow:nth-child(4) {
background-color: Chartreuse;  
}.rainbow:nth-child(5) {
background-color: cyan;  
}.rainbow:nth-child(6) {
background-color: blue;  
}.rainbow:nth-child(7) {
background-color: DarkOrchid;  
}.rainbow:nth-child(8) {
background-color: DeepPink;  
}.rainbow:nth-child(9) {
background-color: red;  
}
.rainbow:last-child {
background-color: Chartreuse;  
  float:left;
  border: 1px solid white;
  clear:both;
}
<div class="rainbow">Original color</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div><div class="rainbow">After some time</div><div class="rainbow">After some time</div><div class="rainbow">Come back to red and loop</div>
<br style="clear:both">
All of the above in just one div

4 个答案:

答案 0 :(得分:2)

您可以创建 css动画来更改背景颜色。要制作动画循环,您可以添加infinite并获得可以使用的颜色的平滑过渡linear

div {
  background-color: #FF0000;
  animation: bgColor 5s infinite linear;
  width: 200px;
  height: 100px;
}
@keyframes bgColor {
  12.5% {
    background-color: #FF0000;
  }
  25% {
    background-color: #FFA500;
  }
  37.5% {
    background-color: #FFFF00;
  }
  50% {
    background-color: #7FFF00;
  }
  62.5% {
    background-color: #00FFFF;
  }
  75% {
    background-color: #0000FF;
  }
  87.5% {
    background-color: #9932CC;
  }
  100% {
    background-color: #FF1493;
  }
}
<div></div>

答案 1 :(得分:1)

您需要使用关键帧来动画css

&#13;
&#13;
#rainbow {
background-color: blue;  
  float:left;
  width: 70px;
  height:70px;
  border: 1px solid white;
  -webkit-animation-name: example; /* Chrome, Safari, Opera */
  -webkit-animation-duration: 4s; /* Chrome, Safari, Opera */
  animation-name: example;
  animation-duration: 4s;
  animation-iteration-count: infinite;
}

@keyframes example {
    0%   {background-color: red; }
    25%  {background-color: yellow; }
    50%  {background-color: blue; }
    75%  {background-color: green; }
    100% {background-color: red; }
}

/* Chrome, Safari, Opera */
@-webkit-keyframes example {
    0%   {background-color: red; }
    25%  {background-color: yellow; }
    50%  {background-color: blue; }
    75%  {background-color: green; }
    100% {background-color: red; }
}
&#13;
<div id="rainbow"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你可以通过关键帧实现这一目标

&#13;
&#13;
.rainbow {
  float:left;
  width: 70px;
  height:70px;
  border: 1px solid white;
 
}

.rainbow:last-child { 
  float:left;
  border: 1px solid white;
  clear:both;
}
@keyframes color {
  0% {
    background-color: red; 
  }
  10% {
    background-color: orange; 
  }
  20% {
    background-color: yellow;  
  }
  30% {
    background-color: Chartreuse;  
  }
  40% {
    background-color: cyan; 
  }
  50% {
    background-color: blue; 
  }
  60% {
    background-color: DarkOrchid;  
  }
  70% {
    background-color: DeepPink;
  }
  80% {
    background-color: red; 
  }
  90% {
    background-color: red; 
  }
  100% {
    background-color: red;
  }
}

.rainbow {
   animation: color 8s infinite;
}
&#13;
<div class="rainbow">Original color</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div>
<div class="rainbow">After some time</div><div class="rainbow">After some time</div><div class="rainbow">After some time</div><div class="rainbow">Come back to red and loop</div>
<br style="clear:both">
All of the above in just one div
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我是用纯 Javascript 制作的。 (还有on github

let r = 255
let g = 0
let b = 0

function rgb(r, g, b){
    return "rgb("+r+","+g+","+b+")"
}

function myTimer () {
    if (r < 255 && g == 0 && b == 0) {
        r++
    } else if (r == 255 && g < 255 && b == 0) {
        g++
    } else if (r > 0 && g == 255 && b == 0) {
        r--
    } else if (r == 0 && g == 255 && b < 255) {
        b++
    } else if (r == 0 && g > 0 && b == 255) {
        g--
    } else if (r < 255 && g == 0 && b == 255) {
        r++
    } else if (r == 255 && g== 0 && b > 0) {
        b--
    }
    document.body.style.backgroundColor = rgb(r, g, b)
}

setInterval(myTimer, 10)