La mise à jour va prendre effet ! L'une des fonctionnalités que j'attends le plus avec impatience vient d'être déployée sur tous les navigateurs modernes et fait officiellement partie de la référence 2024. Cette fonctionnalité est l'API Popover. Les pop-ups offrent de nombreuses primitives et affordances pour les développeurs afin de créer des interfaces multicouches telles que des info-bulles, des menus, des UI pédagogiques, etc.
Voici quelques-unes des fonctionnalités des popovers:
- Promotion vers la couche supérieure. Les pop-ups s'affichent dans la couche supérieure au-dessus du reste de la page. Vous n'avez donc pas besoin de jouer avec
z-index
. - Fonctionnalité de fermeture rapide. Cliquez en dehors de la zone du pop-up pour le fermer et rétablir la sélection.
- Gestion de la mise au point par défaut Lorsque vous ouvrez le pop-up, le prochain arrêt d'onglet se trouve dans le pop-up.
- Associations de clavier accessibles Appuyer sur la touche
esc
ou activer/désactiver deux fois le bouton permet de fermer le pop-up et de rétablir la sélection. - Liaisons de composants accessibles. Connecter sémantiquement un élément de popover à un déclencheur de popover
Créer des popovers
La création de popovers est assez simple. Pour utiliser des valeurs par défaut, il vous suffit d'un button
pour déclencher le popover et d'un élément à déclencher.
- Commencez par définir un attribut
popover
sur l'élément qui va servir de popover. - Ajoutez ensuite un
id
unique à l'élément popover. - Enfin, pour connecter le bouton au popover, définissez le
popovertarget
du bouton sur la valeur duid
de l'élément popover.
Ce processus est illustré dans le code suivant :
<button popovertarget="my-popover">Open Popover</button>
<div id="my-popover" popover>
<p><p>I am a popover with more information. Hit <kbd>esc</kbd> or click away to close me.<p></p>
</div>
Pour un contrôle plus précis du pop-up, vous pouvez définir explicitement des types de pop-ups. Par exemple, utiliser un attribut popover
sans valeur est équivalent à popover="auto"
. La valeur auto
active le comportement de fermeture légère et ferme automatiquement les autres popovers. Utilisez popover="manual"
et vous devrez ajouter un bouton de fermeture. Les popovers manuels ne ferment pas les autres popovers et ne permettent pas aux utilisateurs de les fermer en cliquant ailleurs dans l'UI. Vous créez un pop-up manuel à l'aide des éléments suivants:
<button popovertarget="my-popover" class="trigger-btn"> Open Popover </button>
<div id="my-popover" popover=manual>
<p>I am a popover with more information. Hit the close button or toggle to close me.<p>
<button class="close-btn" popovertarget="my-popover" popovertargetaction="hide">
<span aria-hidden="true">❌</span>
<span class="sr-only">Close</span>
</button>
</div>
Pop-up par rapport à la boîte de dialogue modale
Vous vous demandez peut-être si vous avez besoin d'un pop-up lorsqu'une boîte de dialogue existe. La réponse est que vous n'en avez peut-être pas besoin.
Il est important de noter que l'attribut popover ne fournit pas de sémantique par lui-même. Bien que vous puissiez désormais créer des expériences semblables à des boîtes de dialogue modales à l'aide d'un popover, il existe quelques différences clés entre les deux:
Élément <dialog>
modal
- Ouvrir avec
dialog.showModal()
- Résolu avec
dialog.close()
. - Rend le reste de la page inerte.
- Ne prend pas en charge le comportement de fermeture de la lumière.
- Vous pouvez styliser l'état ouvert à l'aide de l'attribut
[open]
. - Représente sémantiquement un composant interactif qui bloque l'interaction avec le reste de la page.
Attribut [popover]
- Peut être ouvert avec un invocateur déclaratif (
popovertarget
). - Fermé avec
popovertarget
(popover automatique) oupopovertargetaction=hide
(popover manuel). - Ne rend pas le reste de la page inerte.
- Compatible avec le comportement de fermeture de la lumière.
- Vous pouvez styliser l'état ouvert à l'aide de la pseudo-classe
:popover-open
. - Aucune sémantique inhérente.
Conclusion et lectures complémentaires
popover
apporte de nombreuses fonctionnalités intéressantes à la plate-forme. Pour en savoir plus sur cette API, y compris sur l'accessibilité de la fonctionnalité et la documentation sur l'ensemble de fonctionnalités, consultez les ressources suivantes: