Как преобразовать цвет HEX в rgba с помощью компилятора Less?
У меня есть следующий код:
@color : #d14836;
.stripes span {
-webkit-background-size: 30px 30px;
-moz-background-size: 30px 30px;
background-size: 30px 30px;
background-image: -webkit-gradient(linear, left top, right bottom,
color-stop(.25, rgba(209, 72, 54, 1)), color-stop(.25, transparent),
color-stop(.5, transparent), color-stop(.5, rgba(209, 72, 54, 1)),
color-stop(.75, rgba(209, 72, 54, 1)), color-stop(.75, transparent),
to(transparent));
Мне нужно преобразовать @color
в rgba(209, 72, 54, 1)
.
Поэтому мне нужно заменить rgba(209, 72, 54, 1)
в моем коде функцией Less, которая генерирует значение rgba()
из моей переменной @color
.
Как я могу сделать это с помощью Less?
Ответы
Ответ 1
На самом деле, язык LESS поставляется со встроенной функцией, называемой fade
. Вы передаете цветной объект, а абсолютная непрозрачность% (более высокое значение означает менее прозрачный):
fade(@color, 50%); // return @color with 50% opacity in rgba
Ответ 2
Если вам не нужен альфа-ключ, вы можете просто использовать шестнадцатеричное представление цвета. Цвет rgba с альфой "1" совпадает с шестнадцатеричным значением.
Вот несколько примеров, чтобы продемонстрировать, что:
@baseColor: #d14836;
html {
color: @baseColor;
//color:#d14836;
}
body {
color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 1);
//color:#d14836;
}
div {
color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 0.5);
//rgba(209, 72, 54, 0.5);
}
span {
color: fade(@baseColor, 50%);
//rgba(209, 72, 54, 0.5);
}
h3 {
color: fade(@baseColor, 100%)
//color:#d14836;
}
Проверьте этот код онлайн: http://lesstester.com/
Ответ 3
Мой меньше миксин:
.background-opacity(@color, @opacity) {
@rgba-color: rgba(red(@color), green(@color), blue(@color), @opacity);
background-color: @rgba-color;
// Hack for IE8:
background: none\9; // Only IE8
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d')", argb(@rgba-color),argb(@rgba-color))); // IE9 and down
// Problem: Filter gets applied twice in IE9.
// Solution:
&:not([dummy]) {
filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); // Only IE9
}
}
Попробуйте.
Редакция:
Как видно на фоне rgba с альтернативой фильтра IE: IE9 отображает оба!
Я добавил несколько строк в mixin.