Qu'est-ce que la balise <summary> en HTML ?

Découvrez la balise HTML <summary> : définition, syntaxe, exemples pratiques et bonnes pratiques pour créer des éléments interactifs dépliables.
9 min de lecture
Believemy logo

Introduction à la balise <summary>

La balise <summary> est un élément HTML qui permet de créer un titre cliquable pour un contenu dépliable. Elle fonctionne toujours en association avec la balise <details> pour offrir une expérience utilisateur interactive sans avoir besoin de JavaScript.

Si vous souhaitez maîtriser HTML et créer des interfaces web modernes et accessibles, notre formation complète sur HTML vous guidera pas à pas dans l'apprentissage de toutes les balises essentielles, y compris les éléments interactifs comme <summary>.

Bon à savoir

💡 La balise <summary> est l'un des rares éléments HTML natifs qui offre une interactivité sans nécessiter de code JavaScript !

Dans ce guide complet, nous allons explorer en profondeur le fonctionnement de la balise <summary>, ses cas d'utilisation, les bonnes pratiques à adopter et les erreurs courantes à éviter. Vous découvrirez comment créer des FAQ interactives, des menus accordéon et bien d'autres composants utiles.

 

Définition et syntaxe de la balise <summary>

Qu'est-ce que la balise <summary> ?

La balise <summary> définit un résumé, un titre ou une légende visible pour le contenu d'un élément <details>. Lorsque l'utilisateur clique sur le <summary>, le contenu caché dans <details> s'affiche ou se masque automatiquement.

Cette balise fait partie de la spécification HTML5 et offre une solution native pour créer des éléments d'interface dépliables, souvent appelés "disclosure widgets" ou "accordéons" en français.

 

Syntaxe de base

Voici la syntaxe fondamentale pour utiliser la balise <summary> :

HTML
<details>
  <summary>Cliquez pour en savoir plus</summary>
  <p>Voici le contenu caché qui s'affiche au clic.</p>
</details>

La balise <summary> doit toujours être le premier enfant de l'élément <details>. Si elle est absente, le navigateur affichera un texte par défaut (généralement "Détails" ou "Details" selon la langue du navigateur).

 

Caractéristiques principales

Voici les caractéristiques essentielles de la balise <summary> :

  • Élément interactif natif : aucun JavaScript requis pour l'interactivité de base
  • Accessible par défaut : les lecteurs d'écran reconnaissent son rôle
  • Personnalisable en CSS : vous pouvez modifier l'apparence du triangle indicateur
  • Contenu flexible : peut contenir du texte, des images ou d'autres éléments HTML
  • Support clavier : fonctionne avec la touche Entrée et la barre d'espace

 

Exemples pratiques d'utilisation

Exemple simple : une FAQ interactive

L'un des cas d'utilisation les plus courants de la balise <summary> est la création de FAQ (Foire Aux Questions) interactives. Voici un exemple complet :

HTML
<section class="faq-believemy">
  <h2>Questions fréquentes sur nos formations</h2>
  
  <details>
    <summary>Combien de temps ai-je accès à la formation ?</summary>
    <p>Vous avez un accès illimité à vie à toutes les formations que vous achetez sur Believemy. Vous pouvez les consulter autant de fois que vous le souhaitez.</p>
  </details>
  
  <details>
    <summary>Puis-je obtenir un certificat ?</summary>
    <p>Oui, un certificat de complétion est délivré automatiquement une fois que vous avez terminé tous les modules de la formation.</p>
  </details>
  
  <details>
    <summary>Y a-t-il un support disponible ?</summary>
    <p>Absolument ! Notre équipe pédagogique est disponible pour répondre à toutes vos questions via le système de commentaires intégré à chaque leçon.</p>
  </details>
</section>

Ce code crée une FAQ où chaque question peut être dépliée individuellement par l'utilisateur, ce qui améliore la lisibilité et l'expérience utilisateur.

 

Exemple avancé : un menu accordéon stylisé

Nous pouvons aller plus loin en créant un menu accordéon avec un style personnalisé. Voici un exemple plus élaboré :

HTML
<nav class="menu-accordeon">
  <details>
    <summary>
      <span class="menu-icon">📚</span>
      Formations HTML & CSS
    </summary>
    <ul>
      <li><a href="/formations/html-debutant">HTML pour débutants</a></li>
      <li><a href="/formations/css-avance">CSS avancé</a></li>
      <li><a href="/formations/responsive-design">Design responsive</a></li>
    </ul>
  </details>
  
  <details>
    <summary>
      <span class="menu-icon">⚡</span>
      Formations JavaScript
    </summary>
    <ul>
      <li><a href="/formations/javascript-bases">Les bases de JavaScript</a></li>
      <li><a href="/formations/dom-manipulation">Manipulation du DOM</a></li>
      <li><a href="/formations/es6-moderne">JavaScript ES6+</a></li>
    </ul>
  </details>
</nav>

Le CSS associé pour styliser ce menu :

CSS
.menu-accordeon details {
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  margin-bottom: 10px;
  overflow: hidden;
}

.menu-accordeon summary {
  padding: 15px 20px;
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  font-weight: 600;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 10px;
}

.menu-accordeon summary:hover {
  background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
}

.menu-accordeon details[open] summary {
  border-bottom: 1px solid rgba(255, 255, 255, 0.2);
}

.menu-accordeon ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.menu-accordeon li a {
  display: block;
  padding: 12px 20px;
  text-decoration: none;
  color: #333;
  transition: background-color 0.2s;
}

.menu-accordeon li a:hover {
  background-color: #f5f5f5;
}

 

Exemple avec l'attribut open

Vous pouvez utiliser l'attribut open sur l'élément <details> pour afficher le contenu déplié par défaut :

HTML
<details open>
  <summary>Section importante - Affichée par défaut</summary>
  <p>Ce contenu est visible dès le chargement de la page car l'attribut "open" est présent sur l'élément details.</p>
</details>

Cette technique est utile lorsque vous souhaitez mettre en avant une information importante tout en gardant la possibilité pour l'utilisateur de la masquer.

 

Personnalisation du style avec CSS

Modifier le triangle indicateur

Par défaut, les navigateurs affichent un petit triangle à côté du texte du <summary>. Vous pouvez personnaliser ou supprimer ce triangle avec CSS :

CSS
/* Supprimer le triangle par défaut */
summary {
  list-style: none;
}

/* Pour Safari */
summary::-webkit-details-marker {
  display: none;
}

/* Ajouter un indicateur personnalisé */
summary::before {
  content: '+';
  display: inline-block;
  width: 20px;
  font-weight: bold;
  color: #667eea;
  transition: transform 0.3s ease;
}

details[open] summary::before {
  content: '−';
}

Vous pouvez également utiliser des icônes ou des chevrons pour créer un indicateur plus moderne :

CSS
summary::after {
  content: '▶';
  float: right;
  transition: transform 0.3s ease;
}

details[open] summary::after {
  transform: rotate(90deg);
}

 

Créer des transitions fluides

Malheureusement, les transitions CSS ne fonctionnent pas directement sur l'ouverture/fermeture du contenu <details>. Cependant, vous pouvez créer des effets visuels sur d'autres propriétés :

CSS
details {
  border-radius: 8px;
  background-color: #f8f9fa;
  transition: box-shadow 0.3s ease;
}

details[open] {
  box-shadow: 0 4px 15px rgba(102, 126, 234, 0.2);
}

details > *:not(summary) {
  animation: fadeIn 0.3s ease;
}

@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

 

Bonnes pratiques d'utilisation

Accessibilité

La balise <summary> est naturellement accessible, mais voici quelques recommandations pour optimiser l'expérience :

  • Texte descriptif : utilisez un texte clair et descriptif qui indique ce que contient la section
  • Évitez les résumés vides : ne laissez jamais un <summary> sans contenu textuel
  • Ne pas imbriquer d'éléments interactifs : évitez de placer des liens ou des boutons directement dans le <summary>
  • Ordre logique : assurez-vous que le contenu caché a du sens dans le flux du document
Attention

Attention : ne placez jamais de titres (h1-h6) à l'intérieur d'un élément <summary>. Cela peut créer des problèmes d'accessibilité et de structure sémantique.

 

Quand utiliser <summary> et <details>

Ces éléments sont particulièrement adaptés pour :

  • Les FAQ et sections de questions-réponses
  • Les menus de navigation pliables
  • Les informations complémentaires ou avancées
  • Les avertissements légaux ou mentions (CGV, politique de confidentialité)
  • Les spoilers ou contenus à révéler
  • Les paramètres avancés dans les formulaires

En revanche, évitez de les utiliser pour :

  • Du contenu essentiel qui doit être visible immédiatement
  • Des éléments de navigation principaux
  • Des informations critiques pour la compréhension de la page

 

Compatibilité navigateurs

La balise <summary> bénéficie d'un excellent support dans les navigateurs modernes :

NavigateurVersion minimaleSupport
Chrome12+✅ Complet
Firefox49+✅ Complet
Safari6+✅ Complet
Edge79+✅ Complet
Opera15+✅ Complet
Internet Explorer-❌ Non supporté

Pour les navigateurs qui ne supportent pas ces éléments (principalement Internet Explorer), le contenu sera simplement affiché en entier, ce qui constitue une dégradation gracieuse acceptable.

 

Erreurs fréquentes à éviter

<summary> sans <details>

La balise <summary> n'a aucun effet si elle n'est pas à l'intérieur d'un élément <details> :

HTML
<!-- ❌ Incorrect : summary seul -->
<summary>Ceci ne fonctionnera pas</summary>
<p>Contenu visible en permanence</p>

<!-- ✅ Correct : summary dans details -->
<details>
  <summary>Ceci fonctionne correctement</summary>
  <p>Contenu dépliable</p>
</details>

 

<summary> mal positionné

La balise <summary> doit être le premier enfant de <details> :

HTML
<!-- ❌ Incorrect : summary pas en premier -->
<details>
  <p>Du texte avant</p>
  <summary>Titre</summary>
  <p>Contenu</p>
</details>

<!-- ✅ Correct : summary en premier -->
<details>
  <summary>Titre</summary>
  <p>Contenu</p>
</details>

 

Contenu interactif dans <summary>

Évitez de placer des éléments interactifs comme des liens ou des boutons dans le <summary> :

HTML
<!-- ❌ À éviter : lien dans summary -->
<details>
  <summary>En savoir plus <a href="/page">ici</a></summary>
  <p>Contenu</p>
</details>

<!-- ✅ Meilleure approche : lien dans le contenu -->
<details>
  <summary>En savoir plus</summary>
  <p>Contenu avec <a href="/page">un lien vers plus d'informations</a>.</p>
</details>

 

Utilisation avec JavaScript

Bien que la balise <summary> fonctionne sans JavaScript, vous pouvez améliorer son comportement avec quelques lignes de code. Par exemple, pour créer un accordéon où une seule section peut être ouverte à la fois :

JAVASCRIPT
// Sélectionner tous les éléments details
const detailsElements = document.querySelectorAll('.accordeon-exclusif details');

detailsElements.forEach(details => {
  details.addEventListener('toggle', function() {
    if (this.open) {
      // Fermer tous les autres éléments details
      detailsElements.forEach(otherDetails => {
        if (otherDetails !== this && otherDetails.open) {
          otherDetails.open = false;
        }
      });
    }
  });
});

L'événement toggle est déclenché chaque fois que l'état d'ouverture de l'élément <details> change, ce qui vous permet de réagir et d'implémenter des comportements personnalisés.

 

Questions fréquentes sur la balise <summary>

Question

La balise <summary> est-elle obligatoire dans un élément <details> ?

Non, la balise <summary> n'est pas techniquement obligatoire. Cependant, si vous ne la fournissez pas, le navigateur affichera un texte par défaut comme "Détails" ou "Details", ce qui n'est généralement pas souhaitable. Nous recommandons fortement de toujours inclure un <summary> explicite avec un texte descriptif pour améliorer l'expérience utilisateur et l'accessibilité.

 

Question

Peut-on mettre des images ou des icônes dans un <summary> ?

Oui, vous pouvez inclure des images, des icônes ou même des éléments avec des classes CSS dans un <summary>. Cela vous permet de créer des en-têtes visuellement attrayants. Assurez-vous simplement que le texte alternatif ou le contenu textuel reste accessible pour les lecteurs d'écran.

 

Question

Comment détecter en JavaScript si un élément details est ouvert ?

Vous pouvez vérifier la propriété open de l'élément <details>. Par exemple : document.querySelector('details').open retournera true si l'élément est ouvert et false s'il est fermé. Vous pouvez également écouter l'événement toggle pour réagir aux changements d'état.

 

Question

Comment puis-je apprendre HTML et CSS de manière approfondie ?

Pour maîtriser HTML et CSS, y compris toutes les balises interactives comme <summary> et <details>, nous vous recommandons de suivre notre formation sur HTML. Cette formation vous guidera pas à pas dans l'apprentissage de toutes les notions essentielles pour créer des sites web professionnels et accessibles.

Termes connexes

Découvrez notre glossaire HTML et CSS

Parcourez les termes et définitions les plus couramment utilisés dans le domaine du développement HTML et CSS.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.