Mam następujący kod:
@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));
Muszę przekonwertować @color
na rgba(209, 72, 54, 1)
.
Dlatego muszę zastąpić rgba(209, 72, 54, 1)
w moim kodzie funkcją Less, która generuje rgba()
wartość z mojej @color
zmiennej.
Jak mogę to zrobić za pomocą Less?
Odpowiedzi:
W rzeczywistości język Less ma wbudowaną funkcję o nazwie
fade
. Przekazujesz obiekt kolorowy i bezwzględny% krycia (wyższa wartość oznacza mniej przezroczystości):fade(@color, 50%); // Return @color with 50% opacity in rgba
źródło
50%
, jest poprawnie zarówno przezroczystość, jak i krycie. :)Jeśli nie potrzebujesz klucza alfa, możesz po prostu użyć szesnastkowej reprezentacji koloru. Kolor rgba z alfą „1” jest taki sam, jak wartość szesnastkowa.
Oto kilka przykładów, które pokazują, że:
@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; */ }
Przetestuj ten kod online: http://lesstester.com/
źródło
error evaluating function 'red': Cannot read property '0' of undefined
@colorGold: color('#C6AF87'); .box { background-color: rgba(red(@colorGold),green(@colorGold),blue(@colorGold),0.3); }
Błąd: - Nie można skompilować pliku CSS (screen.less): oczekiwano koloru dla red (): nie powiodło się przy `background-color: rgba ( czerwony (@colorGold), zielony (@colorGold), niebieski (@colorGold), 0.3);@colorGold: #C6AF87;
Mój mniejszy skład:
.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 Internet Explorer 8 filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d')", argb(@rgba-color),argb(@rgba-color))); // Internet Explorer 9 and down // Problem: Filter gets applied twice in Internet Explorer 9. // Solution: &:not([dummy]) { filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); // Only IE9 } }
Spróbuj.
EDYTOWANO: Jak widać na tle rgba z alternatywnym filtrem IE: IE9 renderuje oba! , Dodałem kilka linii do miksu.
źródło
Wygląda na to, że w najnowszej aktualizacji 3.81 Less możesz użyć tylko dwóch argumentów w funkcji rgba ().
rgba(white, 0.3) or rgba(white, 30%) => rgba(255, 255, 255, 0.3)
U mnie działa, ale nie mogę znaleźć tego w oficjalnej dokumentacji .
źródło