Как сделать так, чтобы sass color сравнивал функцию с несколькими параметрами?
Электрический ток colorcontrast
Функция сравнения только с тремя цветами. В поисках лучшего решения для построения с несколькими параметрами, такими как @function colorcontrast($color, $rest...) {
за color: colorcontrast(yellow, blue, orange, tomato, deekskyblue);
но не уверен, как сравнить все перечисленные цвета.
@function brightness($color) {
@return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
}
@function colorcontrast($color, $dark, $light) {
$color-brightness: brightness($color);
$light-text-brightness: brightness($light);
$dark-text-brightness: brightness($dark);
@return if(abs($color-brightness - $light-text-brightness) > abs($color-brightness - $dark-text-brightness), $light, $dark);
}
.my-div{
padding: 1rem;
background-color: yellow;
color: colorcontrast(yellow, #000, #fff);
}
1 ответ
Все, что вам нужно, это рассчитать контрасты для всех цветов списка в цикле. И выберите цвет с лучшим контрастом по отношению к базовому цвету.
@function brightness($color) {
@return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
}
@function color-contrast($base-color, $colors...) {
// $colors... - means variadic arguments as Chris W says
// Suppose that the best color is the first in the colors list
$best-color: nth($colors, 1);
$best-color-brightness: brightness($best-color);
$base-color-brightness: brightness($base-color);
@each $color in $colors {
$color-brightness: brightness($color);
// If the new color ($color) is more contrast than the previous one,
// remember it as the $best-color
@if(abs($base-color-brightness - $color-brightness) > abs($base-color-brightness - $best-color-brightness)) {
$best-color: $color;
$best-color-brightness: $color-brightness;
}
}
@return $best-color;
}
SassMeister демо.
Документация для @each
директивы.