Menu

Modèle de boîte CSS : contenu, padding, bordure, margin

Chaque élément est une boîte faite de quatre couches : contenu, padding, bordure et margin. Découvrez comment chaque couche s'ajoute à la taille, comment box-sizing: border-box change le calcul, et voyez chaque couche mesurée en direct.

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

Les quatre couches de chaque boîte

Chaque élément d'une page est dessiné comme un rectangle fait de quatre couches, de l'intérieur vers l'extérieur :

  1. Contenu : le texte, l'image ou les éléments enfants, dimensionnés par width et height.
  2. Padding : l'espace à l'intérieur de la boîte, entre le contenu et la bordure. Il affiche le fond de l'élément.
  3. Bordure : la ligne autour du padding.
  4. Margin : l'espace à l'extérieur de la bordure, qui éloigne les autres boîtes. Toujours transparente.

Dans l'exemple, chaque couche a sa couleur : contenu bleu, padding vert, bordure foncée, et une zone ambre autour de la boîte qui représente la margin (dessinée par un conteneur, car une margin est elle-même transparente).

La ligne sous la boîte est mesurée par le navigateur : 160 + 20 + 20 + 10 + 10 = 220px. La margin ajoute encore 24px de chaque côté, mais elle est à l'extérieur de la boîte et ne fait donc pas partie des 220.

Le calcul de la largeur : content-box ou border-box

Par défaut (box-sizing: content-box), width ne règle que le contenu. Le padding et la bordure s'ajoutent par-dessus, et la boîte finit plus large que le nombre écrit. Avec box-sizing: border-box, width désigne toute la boîte, et le contenu rétrécit pour laisser la place au padding et à la bordure.

content-box (par défaut)border-box
width désigneLe contenuContenu + padding + bordure
width: 200px; padding: 20px; border: 5px250px de large200px de large
Zone de contenu dans ce cas200px150px
MarginÀ l'extérieur, non comptéeÀ l'extérieur, non comptée

La remise à zéro border-box

Comme border-box rend les tailles cohérentes, presque toutes les feuilles de style modernes commencent par cette règle :

*,
*::before,
*::after {
  box-sizing: border-box;
}

Elle compte surtout avec les pourcentages. Deux colonnes width: 50% avec du padding ne tiennent pas sur une ligne en content-box, car chacune fait 50 % plus son padding :

(Les commentaires HTML suppriment l'espace entre les colonnes inline-block, qui ajouterait sinon quelques pixels.)

Voir le modèle de boîte dans les DevTools

Tous les navigateurs dessinent le modèle de boîte pour vous. Faites un clic droit sur un élément, choisissez Inspecter, puis ouvrez l'onglet Calculé (Mise en page dans Firefox) : un schéma montre la taille du contenu au centre, entourée des valeurs de padding, de bordure et de margin. Survoler un élément dans le panneau Éléments colore aussi la page : contenu en bleu, padding en vert, margin en orange.

Les boîtes inline suivent d'autres règles

Le modèle de boîte ci-dessus décrit les boîtes de type bloc comme <div> et <p>. Les éléments inline comme <span>, <a> et <strong> s'insèrent dans une ligne de texte et traitent l'espace vertical différemment :

PropriétéSur un élément inline
width, heightIgnorées
Padding, bordure et margin horizontauxAppliqués, et repoussent les voisins sur les côtés
Padding et bordure verticauxDessinés, mais ne repoussent pas les lignes au-dessus et en dessous
Margin verticaleIgnorée

display: inline-block donne à un élément placé dans une ligne le modèle de boîte complet : sa largeur, sa hauteur, son padding et sa margin occupent tous de la place. Voir padding CSS et margin CSS pour chaque couche en détail.

Erreurs courantes

  • Ajouter du padding à une boîte de largeur fixe et s'étonner qu'elle grandisse. En content-box, le padding et la bordure s'ajoutent à width. Utilisez border-box.
  • S'attendre à ce que la margin prenne la couleur de fond. La margin est toujours transparente ; utilisez le padding pour un espace coloré.
  • Définir height ou une margin verticale sur un élément inline. Rien ne se passe ; utilisez display: inline-block ou block.
  • Oublier les bordures dans le calcul. Une bordure de 1px sur un élément width: 100% le rend 2px trop large en content-box, ce qui peut faire apparaître une barre de défilement horizontale.
  • Confondre margin et padding. En bref : le padding est à l'intérieur de la bordure, la margin à l'extérieur. La page margin vs padding les compare côte à côte.

Questions fréquentes

Qu'est-ce que le modèle de boîte CSS ?

La règle selon laquelle chaque élément s'affiche comme une boîte rectangulaire de quatre couches : le contenu, le padding autour, la bordure autour du padding et la margin à l'extérieur de la bordure. En CSS, la largeur, la hauteur et les espacements se règlent tous sur ces couches.

Que fait box-sizing: border-box ?

Il fait inclure le padding et la bordure dans width et height. Une boîte avec width: 200px, padding: 20px et une bordure de 5px fait alors exactement 200px de large, et la zone de contenu se réduit à 150px pour tenir. La valeur par défaut, content-box, ajoute le padding et la bordure par-dessus, ce qui donne 250px.

Comment se calcule la largeur totale d'un élément ?

Avec content-box (par défaut) : width + padding gauche et droit + bordure gauche et droite. Avec border-box : seulement width. Dans les deux cas, la margin est à l'extérieur de la boîte : elle s'ajoute à l'espace occupé par l'élément, pas à sa propre largeur.

La margin fait-elle partie du modèle de boîte ?

Oui, c'est la couche la plus externe, mais elle est toujours transparente et n'entre jamais dans la largeur ni dans le fond de l'élément. Elle ne fait qu'éloigner les boîtes voisines.

Faut-il mettre box-sizing: border-box partout ?

La plupart des projets le font, avec *, *::before, *::after { box-sizing: border-box; } en haut de la feuille de style. Les largeurs en pourcentage et le padding s'additionnent alors comme on s'y attend, et des frameworks comme Bootstrap et Tailwind livrent la même remise à zéro.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER