Stas Melnikov, l'auteur du cours HTML HTML Layout, a parlé des nuances qui peuvent compliquer le travail avec des propriétés CSS personnalisées.Règles de syntaxe des noms de propriété personnalisés
Nous sommes habitués au fait que les propriétés CSS en ligne ne respectent pas la casse. Par conséquent, les méthodes suivantes de déclaration d'une propriété
border
donneront le même résultat:
button { BORDER: 2px solid
Les propriétés personnalisées, en revanche, sont sensibles à la casse, donc l'exemple suivant crée deux propriétés personnalisées différentes:
button { --NETOLOGY-BRAND-COLOR:

Maintenant, le cadre est devenu # 800080 (violet) et le texte est devenu # 27ae60 (vert).
Valeurs valides pour les propriétés personnalisées
Pour une propriété CSS régulière, vous ne pouvez définir que les valeurs autorisées par la norme. Selon la norme de propriété personnalisée, toute valeur CSS valide existante peut être utilisée comme valeur. Par exemple, comme pour toutes les propriétés personnalisées suivantes:
.element::before { --color: rgba(0, 0, 0, 1); --hex:
Par exemple, définissons le cadre avec la couleur # 800080 pour le bouton:
button { --netologyBrandColor:

En plus des valeurs standard, vous pouvez définir une propriété personnalisée comme valeur pour une autre.
button { --netologyBrandColor:
Le résultat n'est pas différent du précédent, et le bouton a toujours un cadre de couleur # 800080.
Si la propriété personnalisée
--netologyBrandColor
a une valeur incorrecte pour la propriété
border-color
, par exemple 18px, le cadre devient noir.
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); }

Le fait est qu'avant que le navigateur applique la valeur de la propriété utilisateur pour la propriété intégrée, il vérifiera son exactitude. Si la valeur est disponible pour la propriété inline, le navigateur l'appliquera. Sinon, il définira la valeur par défaut de la propriété intégrée.
Dans notre cas, 18px est une valeur incorrecte pour la propriété intégrée
border-color
, et donc le navigateur définira la valeur par défaut, c'est-à-dire
currentColor
. Ceci est très facile à vérifier en définissant la propriété
color
sur # 800080:
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); color:

Comme vous pouvez le voir, le navigateur a appliqué la valeur # 800080 pour le cadre. Dans cet exemple, j'ai utilisé la syntaxe complète pour définir le cadre. Mais nous pouvons en utiliser une courte, à savoir la propriété
border
.
button { --netologyBrandColor: 18px; --buttonBorderColor: var(--netologyBrandColor); border: 2px solid var(--buttonBorderColor); color:

Ici, nous attendons une autre nuance. Il existe une section distincte dans la norme qui décrit le comportement des propriétés personnalisées dans une telle situation. Selon lui, si une propriété utilisateur a une valeur incorrecte pour une propriété en ligne, cette propriété utilisateur n'est pas valide, donc le navigateur ignorera la propriété en ligne.
Dans notre exemple, la propriété de
border
intégrée a l'une des valeurs définies sur la propriété personnalisée
--buttonBorderColor
avec une valeur non valide de 18 pixels. Selon l'algorithme décrit, le navigateur a simplement ignoré la propriété
border
, donc l'élément a perdu la bordure.
La valeur par défaut pour les propriétés personnalisées
Lorsque nous avons examiné l'exemple de la fonction
var
, nous n'avons utilisé qu'un seul paramètre - le nom de la propriété personnalisée.
button { --netologyBrandColor:
Mais en plus, la fonction
var
peut accepter la seconde - la valeur par défaut. Pour déclarer une valeur par défaut, vous devez mettre une virgule après le nom de la propriété personnalisée et écrire la valeur elle-même.

Lorsque le navigateur se rend compte que le développeur n'a pas déclaré de valeur pour la propriété personnalisée, il utilise la valeur par défaut. Par exemple, la valeur # 800080 (violet) pour une propriété personnalisée est
--netologyBrandColor
.
button { border: 2px solid var(--netologyBrandColor,


Nous voyons le cadre et le texte devenir violets. Mais si vous déplacez le bouton, ils deviendront verts. Cela indique que le navigateur a appliqué la valeur # 27ae60 à la propriété utilisateur, remplaçant ainsi la valeur par défaut.
Mais ce ne sont pas toutes les possibilités de la fonction
var
. Dans l'exemple précédent, la propriété personnalisée
--netologyBrandColor
utilisée deux fois, respectivement, j'ai donc défini la valeur par défaut deux fois.
Mais cela peut être fait différemment. La fonction
var
vous permet de passer une autre fonction
var
, vous pouvez donc définir une autre propriété personnalisée comme valeur par défaut. Je vais réécrire l'exemple précédent en utilisant la propriété personnalisée
--defaultButtonColor
:
button { --defaultButtonColor:
Extérieurement, le résultat ne changera pas. Mais maintenant, pour modifier la valeur par défaut, vous devez le faire uniquement à un endroit, et non à plusieurs, comme auparavant.
Héritage de propriétés personnalisées
CSS possède un mécanisme d'héritage qui permet aux éléments d'hériter des propriétés des éléments parents. À cet égard, les propriétés personnalisées ne sont pas différentes d'eux. Pour un exemple, j'écrirai le code dans lequel la propriété personnalisée
--netologyBrandColor
héritée de l'élément de
body
parent.
body { --netologyBrandColor:

En regardant l'inspecteur, vous pouvez remarquer l'inscription «Hérité du corps», qui nous montre que la propriété personnalisée a été prise de l'élément
body
. Mais si nous ajoutons la propriété personnalisée
--netologyBrandColor
pour l'élément
button
, elle remplace déjà la propriété de l'élément
body
.
body { --netologyBrandColor:

L'inspecteur montre que la propriété personnalisée
--netologyBrandColor
l'élément
button
remplace la propriété
--netologyBrandColor
, que nous avons spécifiée pour l'élément
body
.
Valeurs globales
Dans la norme CSS, les propriétés personnalisées ont introduit une pseudo-
root
spéciale qui vous permet de spécifier des propriétés personnalisées qui s'appliquent à l'élément racine du document. Par exemple, dans un document HTML pour un élément
html
.
:root { --netologyBrandColor:

Dans l'inspecteur, nous pouvons voir que la propriété personnalisée déclarée est appliquée à l'élément html. Mais, en plus du document HTML, la pseudo-
root
fonctionne dans les documents SVG. Par exemple, je déclarerai des propriétés personnalisées dans la balise de
style
.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28" width="50" height="50"> <style> :root{ --iconColor:

Et nous voyons ici que la pseudo-
root
racine
root
été ajoutée à l'élément racine SVG. En conséquence, cela prouve que la pseudo-classe racine s'applique non seulement à la balise
html
, mais à tout élément racine.
Conclusion
Dans cet article, nous avons rencontré des écueils de propriétés personnalisées qui peuvent prêter à confusion. Et en conséquence, nous pouvons commencer à les utiliser. Par conséquent, dans le prochain article, je parlerai des astuces pratiques que j'utilise dans mes projets.
Des éditeurs
Cours de netologie sur le sujet: