Sie können einen vorhandenen Farbwert nicht übernehmen und einen Alphakanal darauf anwenden. Sie können nämlich keinen vorhandenen Hex-Wert wie z#f0f0f0
eine Alpha-Komponente angeben und den resultierenden Wert mit einer anderen Eigenschaft verwenden.
Mit benutzerdefinierten Eigenschaften können Sie Ihren Hex-Wert jedoch zur Verwendung in ein RGB-Triplett konvertieren rgba()
, diesen Wert in der benutzerdefinierten Eigenschaft (einschließlich der Kommas!) Speichern, diesen Wert mithilfe var()
in eine rgba()
Funktion mit Ihrem gewünschten Alpha-Wert ersetzen einfach arbeiten:
: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>
Dies scheint fast zu schön, um wahr zu sein. 1 Wie funktioniert es?
Die Magie liegt in der Tatsache, dass die Werte von benutzerdefinierten Eigenschaften wie beim Ersetzen von var()
Referenzen in einem Eigenschaftswert ersetzt werden, bevor der Wert dieser Eigenschaft berechnet wird. Dies bedeutet, dass in Bezug auf benutzerdefinierte Eigenschaften der Wert von --color
in Ihrem Beispiel überhaupt kein Farbwert ist, bisvar(--color)
irgendwo ein Ausdruck erscheint, der einen Farbwert erwartet (und nur in diesem Kontext). Aus Abschnitt 2.1 der CSS-Variablen-Spezifikation:
Die zulässige Syntax für benutzerdefinierte Eigenschaften ist äußerst zulässig. Die Produktion <declaration-value> stimmt mit einer beliebigen Sequenz eines oder mehrerer Token überein, sofern die Sequenz nicht <bad-string-token>, <bad-url-token>, nicht übereinstimmendes <) - Token>, <] - enthält. Token> oder <} - Token> oder <semicolon-token> -Token der obersten Ebene oder <delim-token> -Token mit dem Wert "!".
Das Folgende ist beispielsweise eine gültige benutzerdefinierte Eigenschaft:
--foo: if(x > 5) this.width = 10;
Während dieser Wert als Variable offensichtlich unbrauchbar ist, da er in jeder normalen Eigenschaft ungültig wäre, kann er von JavaScript gelesen und verarbeitet werden.
Und Abschnitt 3 :
Wenn eine Eigenschaft eine oder mehrere var () - Funktionen enthält und diese Funktionen syntaktisch gültig sind, muss angenommen werden, dass die Grammatik der gesamten Eigenschaft zum Zeitpunkt der Analyse gültig ist. Es wird nur zur Zeit des berechneten Werts syntaktisch überprüft, nachdem var () -Funktionen ersetzt wurden.
Dies bedeutet, dass der 240, 240, 240
oben angezeigte Wert direkt in die rgba()
Funktion eingesetzt wird, bevor die Deklaration berechnet wird. Also das:
#element {
background-color: rgba(var(--color), 0.8);
}
rgba()
Dies scheint zunächst kein gültiges CSS zu sein, da nicht weniger als vier durch Kommas getrennte numerische Werte erwartet werden:
#element {
background-color: rgba(240, 240, 240, 0.8);
}
Das ist natürlich vollkommen gültiges CSS.
Wenn Sie noch einen Schritt weiter gehen, können Sie die Alpha-Komponente in einer eigenen benutzerdefinierten Eigenschaft speichern:
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
und ersetzen Sie es mit dem gleichen Ergebnis:
#element {
background-color: rgba(var(--color), var(--alpha));
}
Auf diese Weise können Sie verschiedene Alpha-Werte festlegen, die Sie im laufenden Betrieb austauschen können.
1 Nun, wenn Sie das Code-Snippet in einem Browser ausführen, der keine benutzerdefinierten Eigenschaften unterstützt.