Это старый вопрос, но большинство ответов требует использования препроцессора или JavaScript для работы, или они влияют не только на цвет элемента, но и цвет элементов, содержащихся в нем. Я собираюсь добавить довольно сложный CSS-способ сделать то же самое. Вероятно, в будущем, с более продвинутыми функциями CSS, это будет легче сделать.
Идея основана на использовании:
- цвета RGB, поэтому у вас есть отдельные значения для красного, зеленого и синего;
- CSS переменные, для хранения значений цвета и темноты; и
- Функция
calc
, чтобы применить изменения.
По умолчанию темнота будет 1 (для 100%, обычный цвет), и если вы умножите число на 0-1, вы сделаете цвет темнее. Например, если вы умножите на 0,85 каждое из значений, вы сделаете цвета на 15% темнее (100% - 15% = 85% = 0,85).
Вот пример, я создал три класса: .dark
, .darker
и .darkest
, которые сделают исходный цвет на 25%, 50% и 75% темнее соответственно:
html {
--clarity: 1;
}
div {
display: inline-block;
height: 100px;
width: 100px;
line-height: 100px;
color: white;
text-align: center;
font-family: arial, sans-serif;
font-size: 20px;
background: rgba(
calc(var(--r) * var(--clarity)),
calc(var(--g) * var(--clarity)),
calc(var(--b) * var(--clarity))
);
}
.dark { --clarity: 0.75; }
.darker { --clarity: 0.50; }
.darkest { --clarity: 0.25; }
.red {
--r: 255;
--g: 0;
--b: 0;
}
.purple {
--r: 205;
--g: 30;
--b: 205;
}
<div class="red">0%</div>
<div class="red dark">25%</div>
<div class="red darker">50%</div>
<div class="red darkest">75%</div>
<br/><br/>
<div class="purple">0%</div>
<div class="purple dark">25%</div>
<div class="purple darker">50%</div>
<div class="purple darkest">75%</div>