Вот идея, основанная на этом предыдущем ответе , где вы можете рассмотреть CSS переменные:
.box {
font-size:30px;
padding:5px;
display:inline-block;
font-family:monospace;
overflow:hidden;
color:#fff;
background:
linear-gradient(red,red) 0 0/100% calc((18 - var(--a))*1px),
blue;
}
.box:before {
content:attr(style);
text-indent:-4ch;
display:inline-block;
}
<div style="--a:30" class="box"></div>
<div style="--a:18" class="box"></div>
<div style="--a:9 " class="box"></div>
<div style="--a:17" class="box"></div>
<div style="--a:0 " class="box"></div>
Вы также можете сделать это для окраски текста:
.box {
font-size:30px;
padding:5px;
display:inline-block;
font-family:monospace;
overflow:hidden;
border:5px solid transparent;
background:
linear-gradient(#fff,#fff) padding-box,
linear-gradient(red,red) 0 0/100% calc((18 - var(--a))*1px),
blue;
}
.box:before {
content:attr(style);
text-indent:-4ch;
display:inline-block;
color:transparent;
background:
linear-gradient(red,red) 0 0/100% calc((18 - var(--a))*1px),
blue;
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
<div style="--a:30" class="box"></div>
<div style="--a:18" class="box"></div>
<div style="--a:9 " class="box"></div>
<div style="--a:17" class="box"></div>
<div style="--a:0 " class="box"></div>