Menu

Margin CSS : raccourci, margin auto et fusion des marges

La margin est l'espace transparent à l'extérieur de la bordure d'un élément, qui éloigne les autres éléments. Découvrez le raccourci margin, le centrage avec margin: 0 auto, les marges négatives, margin auto en flexbox et pourquoi les marges verticales fusionnent.

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

Ce qu'est la margin

La margin est l'espace à l'extérieur de la bordure d'un élément. Elle est toujours transparente, et son rôle est d'éloigner les autres éléments. Dans l'exemple, le conteneur gris se voit à travers la margin autour de la boîte bleue :

La bande grise ne fait pas partie de la boîte : le fond de la boîte s'arrête à sa bordure. Pour un espace qui prend le fond de l'élément, utilisez le padding.

Le raccourci margin

margin accepte de une à quatre valeurs, dans le même ordre horaire que padding :

DéclarationHautDroiteBasGauche
margin: 10px;10101010
margin: 10px 20px;10201020
margin: 10px 20px 30px;10203020
margin: 10px 20px 30px 40px;10203040

Chaque côté a aussi sa propre propriété (margin-top, margin-right, margin-bottom, margin-left) et des versions logiques qui suivent le sens du texte (margin-inline-start, margin-inline-end, margin-block, margin-inline).

Contrairement à padding, margin accepte auto et les valeurs négatives :

ValeurExempleRemarques
Longueur16px, 1.5remLa plus courante
Pourcentage5%De la largeur du bloc conteneur, pour les quatre côtés
automargin: 0 autoLe navigateur remplit l'espace restant
Négativemargin-top: -10pxRapproche l'élément ou son voisin, peut créer un chevauchement

Centrer avec margin: 0 auto

margin: 0 auto est la façon classique de centrer un bloc horizontalement. auto des deux côtés demande au navigateur de partager l'espace restant à parts égales. Il faut une largeur inférieure à celle du conteneur, sinon il ne reste rien à partager :

Les marges auto ne centrent pas verticalement dans le flux normal (les marges auto verticales valent 0) et n'ont aucun effet sur les éléments inline. Pour une vue d'ensemble du centrage, voir comment centrer une div.

La fusion des marges

Quand deux marges verticales se touchent, elles ne s'additionnent pas. Le navigateur ne garde que la plus grande. Ici, la première boîte a margin-bottom: 30px et la seconde margin-top: 20px, et l'écart entre elles est de 30px, pas de 50px :

La fusion est voulue : elle permet aux paragraphes et aux titres de porter chacun leur espacement sans le doubler là où ils se rencontrent. Elle surprend dans un second cas, quand la marge du haut d'un enfant s'échappe de son parent :

Dans le premier parent, la marge de 30px de l'enfant a fusionné à travers le bord supérieur du parent : elle pousse tout le parent vers le bas au lieu de créer un espace gris à l'intérieur. L'une de ces solutions l'empêche :

  • display: flow-root sur le parent (contrairement à overflow: hidden, il ne rogne rien).
  • Un padding ou une bordure sur le bord supérieur du parent.
  • Un parent flex ou grid : les marges des éléments flex et grid ne fusionnent jamais.

Les marges horizontales ne fusionnent jamais, pas plus que les marges des éléments flottants ou positionnés en absolu.

Les marges négatives

Une marge négative tire dans la direction opposée. Du côté du haut ou du début, elle déplace l'élément lui-même ; du côté du bas ou de la fin, elle rapproche l'élément suivant. Les boîtes peuvent se chevaucher :

margin auto en flexbox

Dans un conteneur flex, une marge auto prend tout l'espace libre de son côté. C'est la façon la plus simple de pousser un élément tout au bout d'une ligne, et en flexbox auto fonctionne aussi verticalement :

margin-inline-start: auto place l'espace libre avant « Log in », en fin de ligne, sur les pages de gauche à droite comme de droite à gauche.

Erreurs courantes

  • margin: 0 auto sur un élément sans largeur. Un bloc remplit déjà son conteneur ; définissez width ou max-width.
  • margin: auto sur un élément inline. Les marges auto d'un span, d'un a ou d'un img resté inline valent 0. Passez-le en display: block.
  • Additionner deux marges verticales en attendant leur somme. Elles fusionnent et seule la plus grande reste ; utilisez gap en flex ou grid, ou une seule direction de marge de façon cohérente.
  • La marge d'un enfant qui pousse son parent. C'est la fusion parent-enfant ; ajoutez display: flow-root au parent.
  • Utiliser la margin pour un espace qui devrait avoir un fond. La margin est transparente ; utilisez le padding.

Questions fréquentes

Qu'est-ce que la margin en CSS ?

La margin est l'espace à l'extérieur de la bordure d'un élément. Elle est transparente et éloigne les éléments voisins. Elle se règle avec margin ou avec les propriétés par côté margin-top, margin-right, margin-bottom et margin-left.

Que fait margin: 0 auto ?

Il met les marges du haut et du bas à 0 et partage à parts égales l'espace horizontal restant entre les marges gauche et droite, ce qui centre horizontalement un élément de type bloc. L'élément doit avoir une largeur inférieure à celle de son conteneur, par exemple max-width: 600px.

Pourquoi margin auto ne centre-t-il pas mon élément ?

Le plus souvent parce que l'élément n'a pas de largeur (un bloc remplit son conteneur, il n'y a donc rien à partager), ou parce qu'il est inline (span, a, img par défaut), et dans ce cas les marges auto valent 0. Donnez-lui une largeur et display: block, ou centrez-le depuis le parent avec flexbox ou grid.

Qu'est-ce que la fusion des marges ?

Quand deux marges verticales se touchent, par exemple la marge du bas d'un paragraphe et la marge du haut du suivant, le navigateur n'utilise que la plus grande au lieu de les additionner. Cela ne concerne que les marges verticales des boîtes de type bloc dans le flux normal, pas les mises en page flex ou grid.

Une margin peut-elle être négative ?

Oui. Une marge négative tire l'élément vers ce côté, ou tire l'élément suivant par-dessus, si bien que les boîtes peuvent se chevaucher. C'est utile pour de petits ajustements d'alignement et pour faire sortir un élément du padding de son conteneur.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER