Modèles de menus déroulants et fenêtres contextuelles
Créez des menus déroulants et des fenêtres contextuelles accessibles à l’aide du positionnement CSS et de l’API Popover.
Modèles de menus déroulants et fenêtres contextuelles est une leçon CSS Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage CSS Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours CSS Academy comprend 4 leçons au total.
L’API des fenêtres contextuelles
L’API des fenêtres contextuelles HTML (Chrome 114+, largement prise en charge) fournit un comportement déclaratif d’affichage et de masquage : l’attribut popover sur la cible et popovertarget sur le bouton déclencheur. Aucun JavaScript n’est nécessaire pour les ouvertures et fermetures de base, y compris la fermeture au clic extérieur et la gestion de la touche Échap.
Mise en forme des fenêtres contextuelles
Ciblez les éléments de fenêtre contextuelle avec [popover] ou :popover-open. Le pseudo-élément ::backdrop est disponible pour assombrir l’arrière-plan. Les fenêtres contextuelles sont rendues dans la couche supérieure comme les boîtes de dialogue : aucun problème d’empilement lié au z-index.
Positionnement des listes déroulantes par ancrage
Le positionnement par ancrage CSS (Chrome 125+) positionne une fenêtre contextuelle par rapport à son déclencheur sans JavaScript : anchor-name: --btn sur le déclencheur, position-anchor: --btn sur la fenêtre contextuelle, puis top: anchor(bottom); left: anchor(left) pour l’aligner sous le déclencheur.
Solution de repli avec un positionnement absolu
Sans positionnement par ancrage, utilisez un conteneur parent positionné : position: relative sur le conteneur et position: absolute; top: 100%; left: 0 sur la liste déroulante. Cette solution fonctionne dans tous les navigateurs, mais exige que le déclencheur et la liste déroulante soient des éléments frères dans un conteneur positionné.
CSS des listes déroulantes
Mettez la liste déroulante en forme avec position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Les éléments du menu utilisent une marge intérieure, un arrière-plan au survol et un affichage pleine largeur.
Animation
Animez l’ouverture et la fermeture des fenêtres contextuelles avec @starting-style pour l’entrée et transition-behavior: allow-discrete pour animer le changement de la propriété display. Cela permet de créer uniquement en CSS des animations d’entrée et de sortie liées à l’état ouvert ou fermé de la fenêtre contextuelle.
Accessibilité au clavier
Les menus déroulants doivent prendre en charge le clavier : les touches fléchées permettent de parcourir les éléments du menu, Entrée ou Espace active l’élément focalisé, et Échap ferme le menu et rend le focus au déclencheur. L’API des fenêtres contextuelles gère automatiquement la touche Échap ; la navigation avec les touches fléchées nécessite une gestion des événements en JavaScript.
ARIA pour les listes déroulantes personnalisées
Pour une liste déroulante personnalisée (sans utiliser l’API des fenêtres contextuelles), ajoutez aria-haspopup="listbox" et aria-expanded au déclencheur, role="listbox" à la liste, ainsi que role="option" et aria-selected à chaque élément. Les lecteurs d’écran annoncent l’état déployé et le nombre d’éléments.
Débordement et collision avec la fenêtre d’affichage
Une liste déroulante positionnée sous son déclencheur peut déborder de la fenêtre d’affichage par le bas. Détectez ce cas avec IntersectionObserver ou getBoundingClientRect, puis placez la liste déroulante au-dessus du déclencheur. Le positionnement par ancrage CSS gère cela avec position-try-fallbacks.
Listes déroulantes à plusieurs niveaux
Les listes déroulantes imbriquées (sous-menus) ajoutent de la complexité. Positionnez les sous-menus à droite de leurs éléments parents. Ajoutez un délai avant le masquage lors de la sortie de la souris (avec transition-delay en CSS ou un délai d’expiration en JS) afin d’empêcher la fermeture des sous-menus pendant un déplacement diagonal de la souris.
Considérations pour les appareils tactiles
Les listes déroulantes déclenchées par le survol échouent sur les appareils tactiles : ceux-ci n’ont pas d’état de survol. Utilisez partout des déclencheurs par clic ou par appui. La fermeture lors d’un appui extérieur fonctionne grâce à la fermeture au clic extérieur de l’API des fenêtres contextuelles ou à un écouteur de clic sur le document qui ferme les listes déroulantes ouvertes.
Vérification des connaissances
Que fournit automatiquement l’API des fenêtres contextuelles, alors qu’il fallait auparavant l’implémenter avec du JavaScript personnalisé ?
Résumé
L’API des fenêtres contextuelles et le positionnement par ancrage CSS permettent ensemble de créer des modèles déclaratifs de listes déroulantes et de fenêtres contextuelles nécessitant très peu de JavaScript. Pour une compatibilité plus large avec les navigateurs, les modèles fondés sur des conteneurs positionnés fonctionnent de manière fiable. L’accessibilité au clavier, les attributs ARIA, la gestion des collisions avec la fenêtre d’affichage et la prise en charge des appareils tactiles complètent des composants de liste déroulante prêts pour la production.
Questions Fréquemment Posées
La leçon « Modèles de menus déroulants et fenêtres contextuelles » est-elle gratuite ?
Oui — le texte complet de « Modèles de menus déroulants et fenêtres contextuelles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours CSS Academy, passe à CoddyKit PRO. Le cours CSS Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèles de menus déroulants et fenêtres contextuelles » ?
Créez des menus déroulants et des fenêtres contextuelles accessibles à l’aide du positionnement CSS et de l’API Popover. Tu pratiques CSS Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer CSS Academy ?
Aucune expérience préalable n'est requise. CSS Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Modèles de menus déroulants et fenêtres contextuelles » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon CSS Academy ?
Oui. Chaque leçon CSS Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Composant carte avec des propriétés personnalisées CSS
- Styles des fenêtres modales et boîtes de dialogue
- Modèles de menus déroulants et fenêtres contextuelles
- Composant d’onglets avec :checked ou JS