Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Les REGEX

Comprendre le box model CSS facilement

Temps de lecture estimé : 8 minutes
Accueil CSS3 Comprendre le box model CSS facilement

Si vous débutez en CSS, il y a de grandes chances que vous ayez déjà vécu cette situation un peu frustrante : vous donnez une largeur à un élément, vous ajoutez un peu de padding, une bordure… et soudain, tout déborde. Le bouton est trop grand, la carte ne rentre plus dans son conteneur, et vous ne comprenez pas pourquoi : Le box Model CSS est responsable. Rassurez-vous, ce moment fait presque partie du rite de passage de tout développeur web.

  • Comprendre pourquoi les tailles CSS ne correspondent pas toujours à ce qui est affiché à l’écran, et comprendre les comportements parfois déroutants de la mise en page.
  • Savoir anticiper l’impact réel des espacements, bordures et dimensions pour créer des interfaces propres, alignées et sans débordements inattendus.
  • Acquérir un raisonnement clair et durable sur la structure des éléments HTML, utile sur tous les projets CSS, des plus simples aux plus complexes.

La bonne nouvelle, c’est que ce comportement n’a rien de magique ni d’arbitraire. Il est entièrement expliqué par un concept fondamental du CSS : le box model CSS, que l’on appelle aussi très souvent model box CSS. Tant que ce modèle reste flou, le CSS donne l’impression de ne jamais faire exactement ce qu’on lui demande. Dès qu’il devient clair, tout change.

Dans ce chapitre détaillé, nous allons décortiquer ensemble le box model CSS depuis le début, avec des mots simples, des exemples concrets et du code. Prenez le temps de lire, testez les exemples, et vous verrez que ce concept, souvent redouté, va rapidement devenir votre meilleur allié.

Le box model CSS, c’est quoi exactement ?

En CSS, absolument tout est une boîte. Un paragraphe, un titre, un bouton, une image, une div… peu importe l’élément HTML, le navigateur le considère toujours comme un rectangle. C’est cette représentation que l’on appelle le box model CSS.

Cette boîte est composée de plusieurs couches, un peu comme un colis soigneusement emballé. Il y a le contenu au centre, puis différentes zones autour, qui influencent la taille réelle de l’élément à l’écran. Tant que l’on n’a pas cette image en tête, on a tendance à penser uniquement en termes de largeur et de hauteur, ce qui mène rapidement à des incompréhensions.

Le model box CSS décrit précisément comment le navigateur calcule la taille finale d’un élément. Il définit ce qui est inclus dans cette taille, et ce qui s’ajoute autour. Comprendre ce modèle, c’est comprendre pourquoi un élément fait parfois plus que 300 pixels de large alors que vous avez écrit width: 300px.

Les quatre zones du box model CSS

Le box model CSS est toujours composé de quatre parties distinctes. Même si vous ne les définissez pas explicitement, elles existent toujours.

Model box CSS

Le contenu, le cœur de la boîte

Au centre de la boîte, on trouve le contenu. C’est la zone où s’affichent le texte, les images ou les éléments imbriqués. Quand vous définissez une largeur ou une hauteur en CSS avec width ou height, vous agissez, par défaut, uniquement sur cette zone.

Prenons un exemple très simple.

.box {
  width: 300px;
  height: 150px;
}

Ici, le contenu de l’élément fait exactement 300 pixels de large et 150 pixels de haut. Rien de plus, rien de moins. À ce stade, il n’y a encore ni espace intérieur, ni bordure, ni marge.

Le padding, l’espace intérieur

Le padding correspond à l’espace entre le contenu et la bordure de l’élément. C’est une zone transparente, mais qui agrandit visuellement la boîte. On l’utilise très souvent pour éviter que le texte soit collé aux bords.

.box {
  width: 300px;
  padding: 20px;
}

À ce moment précis, beaucoup de débutants s’attendent à ce que la boîte fasse toujours 300 pixels de large. Pourtant, ce n’est pas le cas. Le contenu fait bien 300 pixels, mais on ajoute 20 pixels à gauche et 20 pixels à droite. La largeur totale devient donc 340 pixels.

C’est souvent ici que le box model CSS commence à poser problème quand on ne le maîtrise pas encore.

La bordure, le cadre visible

La bordure entoure le padding et le contenu. Elle est visible à l’écran et fait partie intégrante de la taille finale de l’élément.

.box {
  width: 300px;
  padding: 20px;
  border: 5px solid black;
}

Dans cet exemple, la largeur totale devient encore plus grande. On part de 300 pixels de contenu, on ajoute 40 pixels de padding, puis 10 pixels de bordure. L’élément mesure désormais 350 pixels de large.

Ce calcul est logique, mais tant qu’on ne visualise pas le model box CSS, il donne l’impression que le navigateur n’en fait qu’à sa tête.

La margin, l’espace extérieur

La margin est la dernière couche du box model CSS. Contrairement au padding, elle se situe à l’extérieur de la boîte. Elle sert à créer de l’espace entre les éléments.

.box {
  margin: 30px;
}

La margin n’augmente pas la taille de la boîte elle-même, mais elle influence l’espace qu’elle occupe dans la page. Deux éléments avec une margin importante sembleront éloignés, même si leurs dimensions internes sont petites.

Un point important pour les débutants : les marges verticales peuvent parfois se fusionner entre elles, un comportement appelé « collapsing margins ». Nous y reviendrons plus loin, car il surprend beaucoup lors des premiers pas en CSS.

Comment le navigateur calcule la taille réelle d’un élément

Récapitulons calmement. Avec le box model CSS par défaut, la taille finale d’un élément est calculée ainsi : contenu + padding + bordure. La margin vient ensuite s’ajouter autour, sans modifier la taille interne, mais en occupant de l’espace dans la mise en page.

Prenons un exemple complet et concret.

.card {
  width: 300px;
  padding: 20px;
  border: 4px solid #333;
  margin: 16px;
}

La largeur réelle visible de la carte est de 348 pixels. Le navigateur additionne 300 pixels de contenu, 40 pixels de padding et 8 pixels de bordure. La margin, elle, ajoute 16 pixels tout autour, ce qui fait que l’espace total occupé dans la page est encore plus large.

C’est exactement ce mécanisme que décrit le model box CSS, et c’est lui qui explique la majorité des surprises rencontrées par les débutants.


La première fois que j’ai vraiment compris le box model CSS, c’était après avoir passé presque une heure à essayer d’aligner trois cartes sur une page. Sur le papier, tout était parfait : trois fois 33 % de largeur, un peu de padding, une jolie bordure. En pratique, la troisième carte passait systématiquement à la ligne. Ce n’était ni un bug, ni une erreur de calcul. C’était simplement le box model CSS qui faisait son travail, pendant que moi, je l’ignorais complètement. Depuis ce jour-là, je vérifie toujours ce que contient réellement la largeur d’un élément.

Pourquoi le box model CSS est si important quand on débute

Le box model CSS n’est pas un détail technique réservé aux experts. C’est un socle. Sans lui, il est presque impossible de créer des mises en page propres, prévisibles et faciles à maintenir. Chaque padding ajouté, chaque bordure modifiée, chaque marge ajustée repose sur ce modèle.

Comprendre le box model CSS, c’est aussi comprendre pourquoi certaines méthodes de mise en page modernes, comme Flexbox ou Grid, deviennent beaucoup plus simples à utiliser. Elles reposent toutes sur cette logique de boîtes.

Dans la suite, nous irons encore plus loin. Nous verrons comment le box model CSS peut être modifié avec box-sizing, comment éviter les erreurs classiques, comment lire visuellement une boîte dans les outils de développement du navigateur, et comment utiliser ce modèle intelligemment dans des projets réels.

Modifier le box model CSS avec box-sizing

Jusqu’ici, nous avons décrit le fonctionnement par défaut du box model CSS. Ce comportement porte un nom précis : content-box. Cela signifie que la propriété width ne concerne que le contenu, et que le padding et la bordure viennent s’ajouter ensuite. C’est logique d’un point de vue technique, mais pas toujours intuitif quand on débute.

Heureusement, le CSS nous offre un moyen simple de changer cette logique grâce à la propriété box-sizing. Cette propriété permet de dire au navigateur comment il doit calculer la taille d’un élément.

Le mode content-box, le comportement par défaut

Quand vous ne précisez rien, le navigateur applique automatiquement box-sizing: content-box.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?
.box {
  width: 300px;
  padding: 20px;
  border: 5px solid black;
  box-sizing: content-box;
}

Dans ce cas, la largeur finale dépasse 300 pixels, car le padding et la bordure s’ajoutent au contenu. Ce mode reste utile dans certains contextes précis, mais il est rarement le plus confortable pour structurer une mise en page complète.

Le mode border-box, l’allié des débutants

Avec box-sizing: border-box, la logique change complètement. Cette fois, la largeur définie inclut le contenu, le padding et la bordure. Le navigateur ajuste automatiquement la taille du contenu pour que l’ensemble respecte la largeur indiquée.

.box {
  width: 300px;
  padding: 20px;
  border: 5px solid black;
  box-sizing: border-box;
}

Ici, la boîte fait exactement 300 pixels de large à l’écran, ni plus, ni moins. Le contenu est légèrement réduit pour laisser la place au padding et à la bordure. Pour beaucoup de développeurs, c’est une révélation, car les calculs deviennent enfin intuitifs.

C’est pour cette raison que box-sizing: border-box est aujourd’hui considéré comme une bonne pratique, surtout dans les projets modernes. Il permet d’éviter de nombreuses erreurs et rend le box model CSS beaucoup plus prévisible.

Appliquer box-sizing à toute la page

Dans la majorité des projets, on ne définit pas box-sizing élément par élément. On l’applique globalement, dès le début du CSS.

* {
  box-sizing: border-box;
}

Avec cette seule ligne, tous les éléments de la page utilisent le même model box CSS, plus simple à maîtriser. Certains développeurs préfèrent une version légèrement plus complète pour inclure les pseudo-éléments.

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

Cette approche garantit une cohérence totale, notamment quand on utilise des effets visuels ou des décorations CSS.

Lire le box model CSS dans les outils du navigateur

Même avec une bonne compréhension théorique, il arrive encore de douter. Dans ces moments-là, les outils de développement du navigateur sont vos meilleurs alliés.

Dans Chrome, Firefox ou Edge, il suffit de faire un clic droit sur un élément, puis de choisir “Inspecter”. Dans le panneau de droite, vous trouverez une représentation visuelle du box model CSS. Chaque zone y est clairement indiquée : contenu, padding, bordure et margin.

Model Box depuis devtools

Cette vue est extrêmement pédagogique. Elle permet de comprendre en un coup d’œil pourquoi un élément est plus grand que prévu ou pourquoi il déborde de son conteneur. Pour un débutant, c’est un outil presque indispensable pour progresser sereinement.

Le box model CSS et les éléments inline

Jusqu’à présent, nous avons surtout parlé d’éléments de type bloc, comme les div, les paragraphes ou les sections. Mais le box model CSS s’applique aussi aux éléments inline, comme les span ou les liens.

Cependant, leur comportement est légèrement différent. Les propriétés width et height n’ont aucun effet sur un élément inline classique. Le padding et la bordure sont bien visibles, mais ils ne repoussent pas les éléments voisins de la même manière qu’un bloc.

span {
  padding: 10px;
  border: 2px solid red;
}

Visuellement, le span est entouré d’un cadre, mais la mise en page reste fluide dans la ligne de texte. Pour pouvoir contrôler complètement le box model CSS d’un élément inline, on utilise souvent display: inline-block.

span {
  display: inline-block;
  width: 120px;
  padding: 10px;
}

Avec inline-block, l’élément conserve son comportement en ligne, tout en respectant les règles classiques du model box CSS.

Les marges verticales et le phénomène de fusion

Voici un comportement du box model CSS qui surprend presque tout le monde au début : la fusion des marges verticales. Lorsque deux éléments blocs se suivent verticalement, leurs marges supérieures et inférieures ne s’additionnent pas toujours.

p {
  margin-top: 20px;
  margin-bottom: 30px;
}

Si deux paragraphes se suivent, l’espace entre eux ne sera pas de 50 pixels, mais de 30 pixels. Le navigateur conserve uniquement la plus grande des deux marges. Ce mécanisme vise à améliorer la lisibilité des textes, mais il peut déconcerter lors des premières mises en page.

Ce comportement ne concerne que les marges verticales et uniquement certains contextes. Le padding, la bordure ou les marges horizontales ne sont jamais concernés par cette fusion.

Le box model CSS dans des cas concrets de mise en page

Imaginons une carte classique utilisée sur un site, avec une image, un titre et un texte.

.card {
  width: 320px;
  padding: 16px;
  border: 1px solid #ddd;
  box-sizing: border-box;
}

Grâce à box-sizing: border-box, la carte respecte parfaitement la largeur définie. Vous pouvez ensuite ajouter plusieurs cartes côte à côte sans craindre de dépassement imprévu.

Dans un layout plus complexe, avec des colonnes ou des grilles, le box model CSS devient encore plus central. Chaque padding mal anticipé peut casser un alignement. À l’inverse, un model box CSS bien maîtrisé rend la mise en page presque naturelle.

Erreurs fréquentes quand on découvre le box model CSS

L’erreur la plus courante consiste à oublier que width ne représente pas toujours la taille finale visible. Beaucoup de débutants passent de longues minutes à ajuster des valeurs sans comprendre pourquoi le rendu ne correspond pas à leurs attentes.

Une autre erreur fréquente est d’utiliser des marges pour créer des espaces internes. Le padding est conçu pour cela. Respecter le rôle de chaque zone du box model CSS permet d’écrire un CSS plus lisible et plus logique.

Enfin, ignorer box-sizing revient souvent à se compliquer la vie inutilement. Ce n’est pas une obligation, mais dans la majorité des cas, border-box simplifie énormément le travail.

Le box model CSS et les unités de mesure

Le box model CSS fonctionne de la même manière quelle que soit l’unité utilisée. Que vous travailliez en pixels, en pourcentages, en em ou en rem, le principe reste identique. Seule la valeur change.

Par exemple, un padding en pourcentage est calculé par rapport à la largeur du conteneur parent, ce qui peut produire des effets intéressants, mais parfois déroutants. Là encore, comprendre le model box CSS permet d’anticiper ces comportements.


Le box model CSS n’est pas qu’un concept théorique à apprendre par cœur. C’est une façon de penser la mise en page sur le web. Une fois que vous avez intégré cette logique de boîtes imbriquées, le CSS devient beaucoup plus cohérent, presque rassurant.

Au fil du temps, vous n’aurez plus besoin de refaire les calculs consciemment. Votre cerveau saura instinctivement comment un padding ou une bordure va influencer la taille d’un élément. C’est à ce moment-là que l’on passe du CSS subi au CSS maîtrisé.

Si vous ne deviez retenir qu’une chose, ce serait celle-ci : quand un élément ne se comporte pas comme prévu, le box model CSS est presque toujours la clé de l’énigme. Prenez l’habitude de l’observer, de le questionner, et il vous le rendra au centuple dans tous vos futurs projets web.

Chapitre suivant : Mise en page avec Flexbox CSS