X

Jour 84 : la @property at-rule


Posté sur

Il est temps de me familiariser avec le CSS moderne. Il y a tellement de nouveautés en CSS que je connais trop peu. Pour changer cela, j’ai lancé #100DaysOfMoreOrLessModernCSS. Pourquoi un CSS plus ou moins moderne ? Parce que certains sujets porteront sur des fonctionnalités de pointe, tandis que d’autres existent depuis un certain temps déjà, mais j’ai juste peu ou pas d’expérience avec cela.


Le @property La règle vous permet d’enregistrer des propriétés personnalisées.

Vous pouvez déjà définir des propriétés personnalisées, mais la différence entre la définition et l’enregistrement est que la règle-at vous permet de spécifier le type et d’autres attributs.

@property --hue {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}

syntaxe

Le syntax descripteur spécifie la syntaxe (ou le type) de la propriété. Vous pouvez trouver une liste des noms de composants de syntaxe pris en charge dans la spécification.

@property --milliseconds {
syntax: '<integer>';
inherits: false;
}

hérite

Le inherits descripteur spécifie si la propriété hérite ou non de son parent.

@property --color-primary {
syntax: '<color>';
inherits: true;
}

valeur initiale

Le initial-value descripteur spécifie la valeur initiale de la propriété personnalisée.

@property --color-primary {
syntax: '<color>';
inherits: true;
initial-value: rgb(0 0 0);
}

Un exemple

Disons que nous avons un <button> et nous voulons faire la transition de la couleur d’arrière-plan sur :hover et :focus-visible.

button {
--h: 176;
--s: 74%;
--l: 60%;

--bg: hsl(var(--h) var(--s) var(--l));

background-color: var(--bg);
transition: background-color 1s;
}

button:is(:hover, :focus-visible) {
--h: 20;
}


Cela fonctionne bien, on obtient une belle transition de la première couleur à la deuxième couleur, mais si on veut animer juste la teinte pour obtenir un effet plus intéressant, on a pas de chance, car la valeur de --h est une chaîne que vous ne pouvez pas animer.

button {
--h: 176;
--s: 74%;
--l: 60%;

--bg: hsl(var(--h) var(--s) var(--l));

background-color: var(--bg);
transition: --h 1s;
}


Avec @property nous pouvons transformer la chaîne en nombre et l’animer.

@property --h {
initial-value: 0;
inherits: true;
syntax: '<number>';
}

button {
--h: 176;
--s: 74%;
--l: 60%;

--bg: hsl(var(--h) var(--s) var(--l));

background-color: var(--bg);
transition: --h 1.6s;
}


Voir sur CodePen.

Mon blog ne prend pas encore en charge les commentaires, mais vous pouvez répondre par e-mail.