Les mains d'une femme tapant sur le clavier d'un ordinateur portable

Simplifiez vos modales avec l’élément <dialog>

Publié le

Oubliez les z-index, les display: none; et les aria-hidden. L'élément HTML <dialog> est conçu pour faciliter la création de boîtes de dialogue personnalisées et accessibles. En offrant une solution native et sémantique, il contribue à améliorer la qualité des interactions avec l'utilisateur.

Dans cet article, nous allons découvrir comment utiliser <dialog> pour créer des modales conformes aux normes d'accessibilité.

Qu'est-ce que l'élément dialog ?

L'élément <dialog> est une fonctionnalité native d'HTML5 qui vous permet de créer des boîtes de dialogue personnalisées de manière simple et intuitive. Imaginez une petite fenêtre qui s'ouvre par-dessus votre contenu pour afficher un message important, demander une confirmation ou collecter des informations. C'est exactement ce que permet de faire <dialog>

Pour contrôler l'affichage, JavaScript propose trois méthodes principales : show() et showModal() pour ouvrir la boîte de dialogue, close() pour la fermer.

show vs. showModal : Quelle différence ?

show() : Une fenêtre non modale

  • Lorsque vous utilisez show(), le <dialog> s'affiche sans bloquer le reste de la page. L'utilisateur peut continuer à interagir avec les autres éléments de la page tout en ayant la boîte de dialogue ouverte.
  • Cette méthode est idéale pour les boîtes de dialogue qui fournissent des informations supplémentaires sans interrompre le flux de travail de l'utilisateur, comme un panneau d'options ou un menu contextuel.

showModal() : Une fenêtre modale

  • En utilisant showModal(), le <dialog> prend le contrôle exclusif de la page. Le reste de la page est désactivé et l'utilisateur ne peut interagir qu'avec les éléments à l'intérieur de la boîte de dialogue.
  • Cette méthode est adaptée aux situations où vous avez besoin d'une réponse immédiate de l'utilisateur ou lorsque vous voulez attirer son attention sur un message important, comme une boîte de confirmation de suppression ou une fenêtre de login.

Attention à l'attribut open

Bien que l'élément <dialog> puisse être ouvert en utilisant l'attribut HTML open, cette approche est déconseillée car elle contourne les comportements natifs essentiels de l'élément :

Privilégiez toujours l'utilisation de showModal() pour ouvrir vos boîtes de dialogue et garantir une expérience utilisateur optimale et accessible.

Accessibilité

L'accessibilité avec aria-modal

Lors de l'utilisation de showModal(), l'élément <dialog> reçoit automatiquement l'attribut aria-modal="true". Cette gestion native de l'accessibilité informe les technologies d'assistance que le contenu en dehors de la boîte de dialogue est inactif.

<dialog>
<dialog aria-modal="true">

Cet attribut, combiné à la gestion automatique du focus et de la navigation au clavier, fait de <dialog> un choix idéal pour créer des interfaces modales accessibles sans configuration supplémentaire.

Gestion du focus

La gestion appropriée du focus est cruciale pour l'accessibilité des boîtes de dialogue modales. L'élément <dialog> offre plusieurs options pour contrôler le focus :

<dialog autofocus>
<dialog autofocus tabindex="-1">

L'attribut autofocus peut être utilisé de deux manières :

  • Sur le <dialog> lui-même pour maintenir le focus dans la boîte de dialogue
  • Sur un élément spécifique à l'intérieur (comme un bouton "Fermer" ou un champ de formulaire principal)

Cette gestion du focus garantit que :

  • Les utilisateurs de clavier peuvent naviguer efficacement dans la boîte de dialogue
  • Les lecteurs d'écran annoncent correctement l'ouverture de la boîte de dialogue
  • Le focus retourne à l'élément déclencheur lors de la fermeture

Personnaliser l'arrière plan avec ::backdrop

Le pseudo-élément CSS ::backdrop permet de personnaliser l'arrière-plan de la boîte de dialogue modale. Le style affecté à l'élement ::backdrop sera appliqué à tout ce qui est extérieur à la modale, un moyen idéal pour estomper le reste de la page.

Bonnes Pratiques

Pour une utilisation optimale de l'élément dialog :

  • Styles : Utilisez ::backdrop pour l'overlay et personnalisez l'apparence selon votre charte graphique.
  • Contenu : Structurez le contenu de manière sémantique avec des titres et sections appropriés.
  • Message clair : Assurez-vous que le but de la boîte de dialogue est clair pour l'utilisateur.

Exemple d'une boîte de dialogue Modale

Étape 1 : Créer la structure HTML

<dialog id="myDialog">
    <div class="dialog-content">
        <h2>Boîte de dialogue modale</h2>
        <p>Ceci est un exemple de boîte de dialogue modale utilisant l'élément dialog.</p>
        <button class="close-button" onclick="closeModal()">Fermer</button>
    </div>
</dialog>

Étape 2 : Ajouter des styles CSS

/* Style pour le bouton */
.open-button {
    padding: 12px 24px;
    background-color: #3498db;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 16px;
    margin: 20px;
}

/* Style pour la boîte de dialogue */
dialog {
    margin: auto;
    padding: 20px;
    border: none;
    border-radius: 8px;
    max-width: 400px;
}

/* Style pour le fond assombri */
dialog::backdrop {
    background-color: rgba(0, 0, 0, 0.5);
    backdrop-filter: blur(2px);
}

/* Style pour le bouton de fermeture */
.close-button {
    padding: 8px 16px;
    background-color: #e74c3c;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    margin-top: 15px;
}

.dialog-content {
    text-align: center;
}

Étape 3 : Ajouter le JavaScript

const dialog = document.getElementById('myDialog');

function openModal() {
    dialog.showModal();
}

function closeModal() {
    dialog.close();
}

Essayez

Cliquez sur le bouton ci-dessous pour voir la bôite de dialogue s'afficher

Sources

Mots clés

HTML Accessibilité JavaScript

🌟 Boostez vos projets web !

Que ce soit pour intégrer des balises modernes ou pour améliorer l'accessibilité et la performance de vos interfaces, je peux vous aider à passer au niveau supérieur.

Contactez-moi pour des conseils sur mesure

Boîte de dialogue modale

Ceci est un exemple de boîte de dialogue modale utilisant l'élément dialog.