Essayer de coder ← Retour aux sujets

Les quatre couches

box model

Chaque élément est une boîte. Du centre vers l'extérieur : le contenu, le padding (marge intérieure), la bordure et la marge (margin) extérieure.

padding: 1rem;
Espace entre le contenu et la bordure (le fond y est visible)
border: 2px solid #14141a;
Épaisseur, style et couleur de la bordure
margin: 0 auto;
Espace autour de la boîte (transparent) ; auto centre
width: 300px; height: 150px;
Dimensions de la boîte (voir box-sizing)
box-sizing: border-box;
width inclut padding et bordure : bien plus simple
border-radius: 8px;
Coins arrondis
boite.css
* {
  box-sizing: border-box;
}

.carte {
  width: 300px;
  padding: 1rem;
  border: 2px solid #14141a;
  border-radius: 12px;
  margin: 1rem auto;
}
Rendu
Une carte de 300 pixels de large au total (padding et bordure compris), centrée horizontalement, aux coins arrondis, avec 1 rem d'espace au-dessus et en dessous.

Raccourcis et débordement

shorthand

margin, padding et border ont une écriture abrégée. L'ordre est celui des aiguilles d'une montre : haut, droite, bas, gauche.

padding: 10px;
Les quatre côtés
padding: 10px 20px;
Haut et bas 10, gauche et droite 20
padding: 10px 20px 30px;
Haut 10, côtés 20, bas 30
padding: 10px 20px 30px 40px;
Haut, droite, bas, gauche
margin-inline: auto;
Marges gauche et droite automatiques (centre un bloc de largeur fixe)
overflow: auto;
Barres de défilement si le contenu dépasse la boîte
raccourcis.css
.a { margin: 8px; }                      /* 8px partout */
.b { margin: 8px 16px; }                 /* 8px haut et bas, 16px gauche et droite */
.c { margin: 8px 16px 24px; }            /* haut, côtés, bas */
.d { margin: 8px 16px 24px 32px; }       /* haut, droite, bas, gauche */

📦 Le cours : tout est une boîte

Pour le navigateur, tout est une boîte rectangulaire : un paragraphe, un lien, une image. Comprendre cette boîte explique pourquoi un élément est plus large que prévu, pourquoi deux marges ne s'additionnent pas ou pourquoi un fond semble dépasser.

Les quatre couches

┌────────────────────── margin ──────────────────────┐
│                                                    │
│   ┌────────────────── border ──────────────────┐   │
│   │                                            │   │
│   │   ┌───────────── padding ──────────────┐   │   │
│   │   │                                    │   │   │
│   │   │                                    │   │   │
│   │   │      contenu (width × height)      │   │   │
│   │   │                                    │   │   │
│   │   │                                    │   │   │
│   │   └────────────────────────────────────┘   │   │
│   │                                            │   │
│   └────────────────────────────────────────────┘   │
│                                                    │
└────────────────────────────────────────────────────┘
  • Contenu : le texte ou l'image elle-même.
  • Padding : de l'air autour du contenu, à l'intérieur de la boîte ; la couleur de fond s'y étend.
  • Border : le contour.
  • Margin : de l'espace à l'extérieur, qui écarte la boîte de ses voisines ; toujours transparent.

Dans les outils de développement (F12), l'onglet « Éléments » dessine ce schéma coloré pour l'élément sélectionné, avec toutes les dimensions : c'est le meilleur moyen de comprendre un décalage.

width, height et box-sizing

Par défaut (content-box), width ne mesure que le contenu : le padding et la bordure s'y ajoutent, ce qui surprend. Avec box-sizing: border-box, width mesure la boîte complète (contenu, padding et bordure). Toutes les feuilles de style modernes commencent par ce réglage.

Pour width: 300px; padding: 16px; border: 2px solidLargeur totale occupée
box-sizing: content-box (défaut)300 + 2 × 16 + 2 × 2 = 336 px
box-sizing: border-box300 px
reset.css
*,
*::before,
*::after {
  box-sizing: border-box;
}

min-width, max-width, min-height et max-height bornent les dimensions : max-width: 100% empêche une image de dépasser son conteneur.

Les bordures

border est un raccourci pour trois propriétés : l'épaisseur (border-width), le style (border-style : solid, dashed, dotted, double, none) et la couleur (border-color). Sans style, aucune bordure n'apparaît. On peut cibler un côté (border-bottom) et arrondir les coins avec border-radius ; 50% sur un carré donne un cercle.

bordures.css
.pointille {
  border: 2px dashed #0f766e;
}

.souligne {
  border-bottom: 3px solid #ef4a34;
}

.rond {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: #2563eb;
}
Rendu
Un cadre en pointillés verts, un élément souligné d'un trait rouge épais, un disque bleu de 80 pixels.

Marges : fusion et centrage

Les marges verticales de deux blocs voisins ne s'additionnent pas : elles fusionnent et la plus grande l'emporte (deux paragraphes de margin: 20px 0 sont écartés de 20 px, pas de 40). Les marges horizontales, elles, s'additionnent. Pour centrer un bloc horizontalement, donne-lui une largeur et mets des marges latérales automatiques : margin: 0 auto. Sans largeur, un bloc occupe déjà toute la ligne et auto n'a rien à répartir.

centrer.css
.page {
  max-width: 60rem;
  margin: 0 auto;
  padding: 0 1rem;
}

display : comment la boîte se comporte

ValeurComportement
blockoccupe toute la largeur, commence sur une nouvelle ligne ; width, height et marges s'appliquent (div, p, h1)
inlinereste dans la ligne de texte ; width, height et marges verticales sont ignorés (span, a, strong)
inline-blockreste dans la ligne mais accepte width, height et marges (boutons, étiquettes)
nonel'élément disparaît de la page et ne laisse aucune place (visibility: hidden le cache en gardant la place)
flex, griddispositions modernes (voir Flexbox et Grid)

Ombres, contours et débordement

box-shadow: décalage-x décalage-y flou couleur ajoute une ombre qui ne prend aucune place. outline dessine un contour hors de la boîte, sans changer sa taille (c'est le contour du focus). overflow règle ce qui se passe quand le contenu dépasse : visible (par défaut), hidden (coupé), auto (barres de défilement si besoin), scroll.

ombre.css
.carte {
  box-shadow: 0 4px 12px rgb(0 0 0 / 15%);
}

.zone {
  max-height: 12rem;
  overflow: auto;
}

⚠️ Erreurs fréquentes

Un élément à 100 % qui déborde

À éviter
faux.css
.champ {
  width: 100%;
  padding: 1rem;      /* content-box : 100 % + 2 rem, ça déborde ! */
}
Correct
correct.css
* { box-sizing: border-box; }

.champ {
  width: 100%;
  padding: 1rem;      /* le padding est inclus dans les 100 % */
}

Des marges qui « disparaissent »

Deux marges verticales qui se touchent fusionnent : margin-bottom: 30px sur un bloc et margin-top: 20px sur le suivant donnent 30 px, pas 50. Pour un espacement prévisible, n'utilise que margin-bottom (ou gap dans un conteneur flex / grid).

Centrer sans largeur

À éviter
faux.css
.boite { margin: 0 auto; }                    /* inefficace : le bloc fait déjà 100 % */
Correct
correct.css
.boite { width: 20rem; margin: 0 auto; }     /* centré */

Des dimensions sur un élément en ligne

width, height et margin-top sont sans effet sur un <span> ou un <a> (display inline). Passe-les en display: inline-block ou block.

Oublier le style de la bordure

border: 3px red; n'affiche rien : sans solid (ou dashed…), le style est none. Écris border: 3px solid red;.

Un nombre sans unité

padding: 10; est invalide : il faut 10px, 1rem, 5%… Seul 0 se passe d'unité.

Une hauteur en pourcentage qui ne marche pas

height: 50% n'a d'effet que si le parent a lui-même une hauteur définie. Pour occuper la hauteur de l'écran, utilise min-height: 100vh.

📋 Aide-mémoire

  • Boîte = contenu + padding + border + margin ; commence ta feuille par * { box-sizing: border-box; }.
  • Ordre des raccourcis : haut, droite, bas, gauche ; margin: 0 auto (avec une largeur) centre un bloc.
  • border: 2px solid couleur (le style est obligatoire) ; border-radius: 50% pour un cercle.
  • Marges verticales voisines : elles fusionnent (la plus grande gagne) ; les marges horizontales s'additionnent.
  • display : block (pleine largeur), inline (ignore width / height), inline-block, none (disparaît).
  • box-shadow n'occupe pas de place ; overflow: auto ajoute des barres de défilement ; inspecte la boîte avec F12.