Variables CSS
(ou de leur vrai nom Custom Properties)
- Avantages
- Dynamiques et modifiables après le chargement de la page
- Modifiables dans un scope "enfant" (chose qu'on ne peut pas faire en LESS)
- Récupérables et modifiables en JS
- Inconvénients
- Pas possible d'attacher une unité (ex: px) à la variable lors de son utilisation, il faut soit mettre l'unité dans la variable, soit utiliser calc()
- La cible d'une media query ne peut pas être variabilisée
Idées d'utilisation
Utilisation en tant que booléen
--xs-width: var(--media-xs) 100%;
--sm-width: var(--media-sm) 49%;
width: var(--xs-width, var(--sm-width, var(--md-width, var(--lg-width))));
Par défaut la valeur du booléen va être à initial, pour rendre la valeur invalide par défaut :
html {
--media-xs: initial;
}
Et la media query va actionner le booléen en mettant un espace, ce qui rend la deuxième propriété valide
@media (max-width: 37.499em) {
html {
--media-xs: ;
}
}
Attention à la minification du css qui peut enlever les espaces par défaut !
Réduire les animations
(Source : Implementing a reduced-motion mode)
Avec prefers-reduced-motion
:root {
--duration: 1;
}
.myElt {
transition: transform calc(var(--duration) * 250ms);
}
@media (prefers-reduced-motion: reduce) {
:root {
--duration: 0;
}
}
Autres utilisations
- Standardisation du style de focus, cf snippet