Menu

Overflow CSS : hidden, scroll, auto, clip et ellipsis

overflow décide de ce qui arrive au contenu qui ne tient pas dans sa boîte : l'afficher, le couper ou ajouter des barres de défilement. Découvrez visible, hidden, scroll, auto et clip, overflow-x et overflow-y, les points de suspension et les effets de bord d'overflow sur la mise en page.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Ce que fait overflow

Quand le contenu est plus grand que sa boîte (une hauteur fixe, un mot long, un tableau large), il déborde. La propriété overflow décide de ce qui arrive à l'excédent :

ValeurCe que vous voyezConteneur de défilement
visible (par défaut)Le contenu sort de la boîte et recouvre ce qui suitNon
hiddenCoupé au bord du padding, sans barre de défilement (un script peut encore le faire défiler)Oui
clipCoupé, sans aucun défilement possible, même par scriptNon
scrollAffiche toujours des barres de défilement, même si le contenu tientOui
autoBarres de défilement seulement si le contenu ne tient pasOui

Sur macOS et sur téléphone, les barres de défilement se superposent au contenu et disparaissent, donc scroll et auto peuvent sembler identiques tant que vous ne faites pas défiler.

Créer une boîte scrollable

Une boîte ne déborde que si quelque chose limite sa taille. Une height ou une max-height, plus overflow-y: auto, transforme une longue liste en panneau déroulant :

max-height est préférable à height ici : une liste courte reste courte, et seule une longue liste défile. Une zone scrollable qui ne contient aucun élément focalisable doit recevoir tabindex="0" pour que les utilisateurs du clavier puissent aussi la faire défiler.

overflow-x et overflow-y

Les deux axes peuvent être réglés séparément. L'usage courant est un tableau large qui défile horizontalement dans son conteneur au lieu d'élargir toute la page :

Une règle à retenir : si un axe vaut hidden, scroll ou auto, une valeur visible sur l'autre axe devient auto. Ainsi, overflow-x: hidden seul peut vous donner une barre de défilement verticale inattendue. overflow-x: clip n'a pas cet effet :

.a { overflow-x: hidden; }  /* overflow-y computes to auto */
.b { overflow-x: clip; }    /* overflow-y stays visible */

Couper le texte avec des points de suspension

text-overflow: ellipsis remplace la fin coupée d'une ligne par « … ». Il faut trois choses ensemble : une largeur limitée, un texte qui ne peut pas passer à la ligne et un débordement masqué :

Le line clamp préfixé -webkit- fonctionne dans Chrome, Firefox et Safari. Les lecteurs d'écran lisent toujours le texte complet, les mots coupés ne sont donc pas perdus pour eux.

Les effets de bord d'overflow

Donner à overflow une autre valeur que visible ou clip change plus que le découpage :

  • Il contient les flottants et les marges des enfants. L'élément forme un nouveau contexte de formatage de bloc et grandit pour englober ses enfants flottants. display: flow-root fait la même chose sans rien couper.
  • Il casse position: sticky en dessous de lui. Un enfant sticky colle au conteneur de défilement le plus proche ; si ce conteneur ne défile pas, rien ne colle.
  • Il coupe les enfants positionnés en absolu (quand l'élément qui déborde est aussi leur bloc conteneur), y compris les menus déroulants et les infobulles, et il coupe aussi les ombres des enfants.

Masquer la barre de défilement

Vous pouvez garder une boîte scrollable tout en masquant sa barre de défilement avec scrollbar-width: none. Utilisez-le avec parcimonie : sans barre de défilement, beaucoup de lecteurs ne comprennent pas qu'il y a plus de contenu. scrollbar-gutter: stable fait l'inverse : il réserve la place de la barre pour que le contenu ne se décale pas quand elle apparaît.

Erreurs courantes

  • Attendre un débordement sans limite de taille. Une boîte sans height ni max-height grandit au lieu de déborder.
  • overflow: hidden sur body pour « corriger » un défilement horizontal. Trouvez plutôt l'élément trop large (souvent une width fixe, une longue URL ou 100vw avec une barre de défilement).
  • Des points de suspension sans white-space: nowrap. Le texte passe à la ligne, rien ne déborde horizontalement et aucun point de suspension n'apparaît.
  • overflow-x: hidden qui crée une barre de défilement verticale. Utilisez clip.
  • Un menu déroulant coupé par sa carte. Le overflow: hidden de la carte le découpe ; déplacez la règle overflow ou affichez le menu en dehors.

Questions fréquentes

Que fait overflow: hidden ?

Il coupe le contenu qui ne tient pas dans la boîte de padding de l'élément, sans barre de défilement. La partie masquée peut quand même être atteinte par un script ou en donnant le focus à un élément qui s'y trouve.

Quelle est la différence entre overflow auto et scroll ?

scroll réserve toujours les barres de défilement, même quand le contenu tient. auto n'affiche une barre de défilement que lorsque le contenu est plus grand que la boîte, ce que l'on veut en général.

Comment rendre une div scrollable ?

Limitez sa taille et autorisez le défilement : max-height: 300px; overflow-y: auto;. Sans limite de hauteur ou de max-height, la div grandit avec son contenu et ne déborde jamais.

Pourquoi overflow-x: hidden ajoute-t-il aussi une barre de défilement verticale ?

Si un axe vaut hidden, scroll ou auto, une valeur visible sur l'autre axe est calculée comme auto. Utilisez plutôt overflow-x: clip, qui ne crée pas de conteneur de défilement et laisse l'autre axe visible.

Comment ajouter des points de suspension (...) à un texte qui déborde ?

Pour une ligne : white-space: nowrap; overflow: hidden; text-overflow: ellipsis; sur un élément de largeur limitée. Pour plusieurs lignes, utilisez display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER