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
| Valeur | Résultat |
|---|---|
none (par défaut) | Pas de flottement |
left | Poussé contre le bord gauche |
right | Poussé contre le bord droit |
inline-start | Poussé au début de la ligne : à gauche en français, à droite en arabe ou en hébreu |
inline-end | Poussé à 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 oumargin: 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 conteneurflow-root. leftetrightphysiques sur un site multilingue. Utilisezinline-startetinline-endpour 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.