overlay
Disponibilité limitée
Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.
Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.
La propriété CSS overlay définit si un élément apparaissant dans la couche supérieure (par exemple, une fenêtre contextuelle affichée ou un élément <dialog> de fenêtre bloquante) est réellement rendu dans la couche supérieure. Cette propriété n'est pertinente que dans une liste de valeurs transition-property, et uniquement si allow-discrete est défini comme transition-behavior.
Il est important de noter que overlay ne peut être défini que par le navigateur — les styles de l'auteur·ice ne peuvent pas modifier la valeur overlay d'un élément. Vous pouvez, cependant, ajouter overlay à la liste des propriétés de transition définie sur un élément. Cela retarde sa suppression de la couche supérieure afin qu'elle puisse être animée au lieu de disparaître immédiatement.
Note :
Lors de la transition de overlay, vous devez définir transition-behavior: allow-discrete sur la transition afin qu'elle soit animée. Les animations overlay diffèrent des animations discrètes normales en ce que l'état visible (c'est-à-dire auto) sera toujours affiché pendant toute la durée de la transition, que ce soit l'état de départ ou d'arrivée.
Syntaxe
/* Valeurs avec un mot-clé */
overlay: auto;
overlay: none;
/* Valeurs globales */
overlay: inherit;
overlay: initial;
overlay: revert;
overlay: revert-layer;
overlay: unset;
Valeurs
autoExpérimental-
L'élément est rendu dans la couche supérieure s'il est promu dans la couche supérieure.
noneExpérimental-
L'élément n'est pas rendu dans la couche supérieure.
Définition formelle
| Valeur initiale | none |
|---|---|
| Applicabilité | tous les éléments |
| Héritée | non |
| Valeur calculée | comme défini |
| Type d'animation | Comportement discret sauf lors de l'animation vers ou depuis none qui est visible pendant toute la durée |
Syntaxe formelle
overlay =
none |
auto
Exemples
>Transition d'une fenêtre contextuelle
Dans cet exemple, une fenêtre contextuelle est animée lorsqu'elle transitionne de l'état caché à l'état affiché, puis revient à l'état caché.
HTML
Le HTML contient un élément <div> déclaré comme une fenêtre contextuelle à l'aide de l'attribut popover, et un élément <button> désigné comme le contrôle d'affichage de la fenêtre contextuelle à l'aide de son attribut popovertarget.
<button popovertarget="mypopover">Afficher la fenêtre contextuelle</button>
<div popover="auto" id="mypopover">
Je suis une fenêtre contextuelle ! Je devrais être animée.
</div>
CSS
La propriété overlay n'est présente que dans la liste des propriétés de transition. Comme overlay est une propriété contrôlée par l'agent utilisateur, elle n'est pas déclarée dans les états pré-transition ou post-transition.
html {
font-family: "Helvetica", "Arial", sans-serif;
}
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
[popover] {
font-size: 1.2rem;
padding: 10px;
/* État final de l'animation de sortie */
opacity: 0;
transform: scaleX(0);
transition:
opacity 0.7s,
transform 0.7s,
overlay 0.7s allow-discrete,
display 0.7s allow-discrete;
/* Équivalent à
transition: all 0.7s allow-discrete; */
}
/* Doit être inclus après la règle précédente [popover]:popover-open
pour prendre effet, car la spécificité est la même */
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
/* Transition pour le fond de la fenêtre contextuelle */
[popover]::backdrop {
background-color: transparent;
transition:
display 0.7s allow-discrete,
overlay 0.7s allow-discrete,
background-color 0.7s;
/* Équivalent à
transition: all 0.7s allow-discrete; */
}
[popover]:popover-open::backdrop {
background-color: rgb(0 0 0 / 25%);
}
/* Les sélecteurs imbriqués (&) ne peuvent pas représenter des pseudo-éléments, donc cette
règle starting-style ne peut pas être imbriquée. */
@starting-style {
[popover]:popover-open::backdrop {
background-color: transparent;
}
}
Les deux propriétés que nous voulons animer sont opacity et transform : nous voulons que la fenêtre contextuelle apparaisse et disparaisse en fondu tout en grandissant et rétrécissant horizontalement. Nous définissons un état de départ pour ces propriétés sur l'état caché par défaut de l'élément fenêtre contextuelle (sélectionné avec [popover]), et un état final sur l'état ouvert de la fenêtre contextuelle (sélectionné avec la pseudo-classe :popover-open). Nous définissons ensuite une propriété transition pour animer la transition entre les deux.
Comme l'élément animé est promu dans la couche supérieure lorsqu'il est affiché et retiré de la couche supérieure lorsqu'il est masqué, overlay est ajouté à la liste des éléments en transition. Cela garantit que la suppression de l'élément de la couche supérieure est différée jusqu'à la fin de l'animation. Cela ne fait pas une grande différence pour des animations basiques comme celle-ci, mais dans des cas plus complexes, ne pas faire cela peut entraîner la suppression trop rapide de l'élément de la couche supérieure, rendant l'animation non fluide ou inefficace. Notez que la valeur transition-behavior: allow-discrete est également définie dans la propriété abrégée pour activer les transitions discrètes.
Les étapes suivantes sont également nécessaires pour que l'animation fonctionne dans les deux sens :
- Un état de départ pour l'animation est défini à l'intérieur de la règle
@starting-style. Cela est nécessaire pour éviter un comportement inattendu. Par défaut, les transitions ne sont pas déclenchées lors des premières mises à jour de style des éléments, ou lorsque le type dedisplaypasse denoneà un autre type.@starting-stylevous permet de remplacer ce comportement par défaut de manière contrôlée et spécifique. Sans cela, l'animation d'entrée ne se produirait pas et la fenêtre contextuelle apparaîtrait simplement. displayest également ajouté à la liste des éléments en transition afin que l'élément animé soit visible (défini surdisplay: block) pendant toute la durée de l'animation d'entrée et de sortie. Sans cela, l'animation de sortie ne serait pas visible ; en effet, la fenêtre contextuelle disparaîtrait simplement. Là encore,transition-behavior: allow-discreteest requis dans ce cas pour que l'animation ait lieu.
Vous remarquerez que nous avons également inclus une transition sur le ::backdrop qui apparaît derrière la fenêtre contextuelle lorsqu'elle s'ouvre, afin de fournir une animation d'assombrissement agréable. [popover]:popover-open::backdrop est nécessaire pour sélectionner le fond lorsque la fenêtre contextuelle est ouverte.
Résultat
Le code s'affiche comme suit :
Note :
Parce que les fenêtres contextuelles passent de display: none à display: block chaque fois qu'elles sont affichées, la fenêtre contextuelle passe de ses styles @starting-style à ses styles [popover]:popover-open à chaque fois que la transition d'entrée se produit. Lorsque la fenêtre contextuelle se ferme, elle passe de son état [popover]:popover-open à l'état par défaut [popover].
Il est possible que la transition de style à l'entrée et à la sortie soit différente dans de tels cas. Voir notre exemple Démonstration de l'utilisation des styles de départ pour une preuve de cela.
Spécifications
| Spécification |
|---|
| CSS Positioned Layout Module Level 4> # overlay> |
Compatibilité des navigateurs
Voir aussi
- Le module des transitions CSS
- La règle
@starting-style - La propriété
transition-behavior - Quatre nouvelles fonctionnalités CSS pour des animations d'entrée et de sortie fluides (angl.) sur developer.chrome.com (2023)