Menu

Float et clear en CSS : habiller une image de texte

float pousse un élément d'un côté et laisse le texte l'entourer, comme les magazines placent leurs photos. Découvrez float left, right et inline-start, clear, pourquoi un parent s'effondre autour des flottants et comment display: flow-root le répare, et pourquoi les flottants ne servent plus à la mise en page.

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

Ce que fait float

float pousse un élément d'un côté de son conteneur et laisse le texte qui suit l'entourer :

La margin de la boîte flottante empêche le texte de la toucher. C'est avec les marges que l'on règle cet écart ; le texte lui-même ne peut pas recevoir de marge du côté du flottant.

Les valeurs

ValeurRésultat
none (par défaut)Pas de flottement
leftPoussé contre le bord gauche
rightPoussé contre le bord droit
inline-startPoussé au début de la ligne : à gauche en français, à droite en arabe ou en hébreu
inline-endPoussé à la fin de la ligne

inline-start et inline-end suivent le sens d'écriture : une mise en page construite avec eux s'inverse correctement sur les pages de droite à gauche. Un élément flottant devient aussi un bloc : display: inline est transformé en block, donc width et height s'appliquent même sur un span ou un img.

Faire flotter des images dans le texte

L'usage classique : une image dans un article, avec le texte qui coule autour. Faites-en flotter une de chaque côté :

clear : arrêter l'habillage

clear signifie « commencer sous les flottants précédents de ce côté ». Utilisez-le sur l'élément qui ne doit pas se placer à côté d'un flottant, comme le titre de la section suivante :

Le premier titre se glisse à côté du flottant. Le second commence en dessous. clear accepte left, right, both, inline-start, inline-end et none.

Le parent qui s'effondre, et flow-root

Les flottants sont hors du flux normal, donc un conteneur dont tous les enfants flottent n'a rien dans le flux et s'effondre à une hauteur nulle. Son fond et sa bordure se réduisent à une fine ligne au-dessus des flottants :

display: flow-root crée un nouveau contexte de formatage de bloc, qui englobe toujours ses flottants. L'ancien code utilise un « clearfix » pour le même résultat :

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

overflow: hidden ou auto contient aussi les flottants, avec l'effet de bord de couper le contenu ; voir overflow.

Les flottants ne servent pas à la mise en page

Avant flexbox et grid, des mises en page entières étaient construites avec des colonnes flottantes, des clearfix et des calculs de largeur partout. Cette époque est révolue : les flottants ne savent pas centrer, ne peuvent pas donner la même hauteur aux colonnes et cassent quand la taille du contenu change. Utilisez display: flex ou display: grid pour les lignes et les colonnes, et gardez float pour faire entourer un élément par du texte. Pour centrer une image plutôt que de l'habiller de texte, voir comment centrer une image.

Habiller une forme

shape-outside permet au texte de suivre une forme au lieu du rectangle du flottant. Il ne fonctionne que sur les éléments flottants :

.avatar {
  float: left;
  width: 120px; height: 120px;
  border-radius: 50%;
  shape-outside: circle(50%);
  margin-inline-end: 16px;
}

Erreurs courantes

  • Un parent de hauteur nulle. Tous ses enfants flottent. Ajoutez display: flow-root.
  • Des flottants pour des colonnes ou une navigation. Utilisez flexbox ou grid.
  • Chercher float: center. Cela n'existe pas. Centrez avec flexbox, grid ou margin: 0 auto.
  • Un contenu après un flottant qui l'entoure alors qu'il ne devrait pas. Donnez-lui clear: both, ou placez le flottant et son texte dans un conteneur flow-root.
  • left et right physiques sur un site multilingue. Utilisez inline-start et inline-end pour que la mise en page s'inverse dans les langues de droite à gauche.

Questions fréquentes

Que fait float en CSS ?

Il sort un élément du flux normal et le pousse contre le bord gauche ou droit de son conteneur. Le texte et le contenu inline qui suivent l'entourent.

Que fait clear ?

clear place un élément sous les flottants précédents du côté indiqué : clear: left, clear: right ou clear: both. C'est ainsi que l'on empêche un contenu de s'enrouler à côté d'un flottant.

Pourquoi le parent d'un élément flottant a-t-il une hauteur nulle ?

Les flottants sont hors du flux normal, donc un parent qui n'a que des enfants flottants n'a aucun contenu dans le flux et s'effondre. Ajoutez display: flow-root au parent et il grandit pour contenir ses flottants.

Qu'est-ce qu'un clearfix ?

Une astuce pour qu'un parent contienne ses flottants, traditionnellement un pseudo-élément ::after avec clear: both. Aujourd'hui, display: flow-root sur le parent fait le même travail en une ligne.

Faut-il utiliser float pour la mise en page ?

Non. Les flottants servaient à faire des colonnes avant l'existence de flexbox et grid. Utilisez flexbox ou grid pour la mise en page, et gardez float pour son rôle d'origine : faire entourer une image ou une citation par du texte.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER