Nie możesz wziąć istniejącej wartości koloru i zastosować do niej kanał alfa. Mianowicie, nie możesz wziąć istniejącej wartości szesnastkowej, takiej jak #f0f0f0
nadać jej składnik alfa i użyć wynikowej wartości z inną właściwością.
Jednak właściwości niestandardowe umożliwiają konwersję wartości szesnastkowej na trójkę RGB do użycia z rgba()
, przechowywanie tej wartości we właściwości niestandardowej (łącznie z przecinkami!), Zastąpienie tej wartości za var()
pomocą rgba()
funkcji żądaną wartością alfa, a po prostu pracuj:
:root {
/* #f0f0f0 in decimal RGB */
--color: 240, 240, 240;
}
body {
color: #000;
background-color: #000;
}
#element {
background-color: rgba(var(--color), 0.8);
}
<p id="element">If you can see this, your browser supports custom properties.</p>
Wydaje się to zbyt piękne, aby mogło być prawdziwe. 1 Jak to działa?
Magia polega na tym, że wartości właściwości niestandardowych są zastępowane tak, jak ma to miejsce podczas zastępowania var()
odniesień w wartości właściwości, zanim wartość tej właściwości zostanie obliczona. Oznacza to, że o ile właściwości niestandardowe są zainteresowane, wartość --color
w przykładzie nie jest wartością koloru w ogóle aż do var(--color)
wypowiedzi pojawia gdzieś, że spodziewa się, że wartość koloru (i tylko w tym kontekście). Z sekcji 2.1 specyfikacji zmiennych css:
Dozwolona składnia właściwości niestandardowych jest wyjątkowo liberalna. Produkcja <declaration-value> pasuje do dowolnej sekwencji jednego lub więcej tokenów, o ile sekwencja nie zawiera <bad-string-token>, <bad-url-token>, unmatched <) - token>, <] - token> lub <} - token> lub tokeny <semicolon-token> najwyższego poziomu lub tokeny <delim-token> o wartości „!”.
Na przykład poniżej przedstawiono prawidłową właściwość niestandardową:
--foo: if(x > 5) this.width = 10;
Chociaż ta wartość jest oczywiście bezużyteczna jako zmienna, ponieważ byłaby nieprawidłowa w każdej normalnej właściwości, może być odczytywana i wykonywana przez JavaScript.
I sekcja 3 :
Jeśli właściwość zawiera jedną lub więcej funkcji var (), a te funkcje są poprawne składniowo, należy założyć, że gramatyka całej właściwości jest prawidłowa w czasie analizy. Sprawdzana jest składnia tylko w czasie obliczania wartości, po podstawieniu funkcji var ().
Oznacza to, że 240, 240, 240
wartość, którą widzisz powyżej, zostanie podstawiona bezpośrednio do rgba()
funkcji przed obliczeniem deklaracji. Więc to:
#element {
background-color: rgba(var(--color), 0.8);
}
który na początku nie wydaje się być prawidłowym CSS, ponieważ rgba()
oczekuje nie mniej niż czterech wartości liczbowych oddzielonych przecinkami, staje się taki:
#element {
background-color: rgba(240, 240, 240, 0.8);
}
co oczywiście jest całkowicie poprawnym CSS.
Idąc o krok dalej, możesz przechowywać komponent alfa we własnej niestandardowej właściwości:
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
i zastąp go, z tym samym wynikiem:
#element {
background-color: rgba(var(--color), var(--alpha));
}
Dzięki temu możesz mieć różne wartości alfa, które możesz wymieniać w locie.
1 Cóż, tak jest, jeśli uruchamiasz fragment kodu w przeglądarce, która nie obsługuje niestandardowych właściwości.