Color every character differently

css, javascript, jquery

Solution

I want to add a background colour to each letter inside that span.

Using an array of colors:

const colors = ["#0bf", "#f0b", "#fb0", "#b0f"];

$('.kkc').find('span').each(function() {

  const text = $(this).text();
  const len = text.length;
    
  const newCont = [...text].reduce((a, ch, i) => 
    a + `<span style="background:${colors[i % colors.length]}">${ch}</span>`, ""
  );

  $(this).html(newCont);

});
.kkcountdown-box>span>span {
  background: red;
}
<div class="kkc">
  <span class="kkc-dni">169</span>
  <span class="kkc-dni-text">DAYS </span>
  <span class="kkc-godz">23</span>
  <span class="kkc-godz-text"> </span>
  <span class="kkc-min">19</span>
  <span class="kkc-min-text"> </span>
  <span class="kkc-sec">48</span>
  <span class="kkc-sec-text">HOURS</span>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

The above will, wrapping every single letter into a separate `span` will also add a background color from your Array list of colors. Once the colors list end is reached will start from the first one and so on.

Using a random color:

$('.kkc').find('span').each(function() {

  const text = $(this).text();
  const len = text.length;
    
  const newCont = [...text].reduce((a, ch, i) => {
    const color= '#'+ (Math.random() * 0xffffff).toString(16).substr(-6); 
    return a + `<span style="background:${color}">${ch}</span>`
  }, "");

  $(this).html(newCont);

});
.kkcountdown-box>span>span {
  background: red;
}
<div class="kkc">
  <span class="kkc-dni">169</span>
  <span class="kkc-dni-text">DAYS </span>
  <span class="kkc-godz">23</span>
  <span class="kkc-godz-text"> </span>
  <span class="kkc-min">19</span>
  <span class="kkc-min-text"> </span>
  <span class="kkc-sec">48</span>
  <span class="kkc-sec-text">HOURS</span>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

The above will get every letter inside a `<span>` and wrap it into a new `span` with a randomly generated background color.

Problem

I am using KK Countdown to countdown to Xmas for a site. I have a design which I have to follow that has each letter of the day countown with a blue background and border radius. Right now the html is output like this ``` <span class="kkcount-down" data-time="1387929600"> <span class="kkcountdown-box"> <span class="kkc-dni">169</span> <span class="kkc-dni-text">DAYS </span> <span class="kkc-godz">23</span> <span class="kkc-godz-text"> </span> <span class="kkc-min">19</span> <span class="kkc-min-text"> </span> <span class="kkc-sec">48</span> <span class="kkc-sec-text">HOURS</span> </span> </span> ``` The class kkc-dni is the part I am trying to target here. I want to add a background colour to each letter inside that span. Preferably with CSS. Is this possible? I have used CSS before to style the first letter of paragraphs before but this is quite different and I cannot find any information on it. Any suggestions? Note: Because I am using a plugin to do this countdown I am not sure if I can change the way it outputs the spans and html. If I could wrap each letter in a span I would.

Original source