Module CSS.3 – Box Model
Objectif
Maîtriser le Box Model CSS : margin, padding, border, box-sizing pour contrôler précisément l'espacement et les dimensions des éléments.
Théorie
Le Box Model
Box Model = Modèle de boîte qui définit comment les éléments sont dimensionnés.
Structure d'un élément :
┌─────────────────────────────────┐
│ MARGIN (extérieur) │
│ ┌───────────────────────────┐ │
│ │ BORDER (bordure) │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ PADDING (intérieur)│ │ │
│ │ │ ┌───────────────┐ │ │ │
│ │ │ │ CONTENU │ │ │ │
│ │ │ └───────────────┘ │ │ │
│ │ └─────────────────────┘ │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘
Composants :
- Contenu : Le contenu réel (texte, image)
- Padding : Espace intérieur (entre contenu et bordure)
- Border : Bordure
- Margin : Espace extérieur (entre éléments)
Width et Height
Par défaut : width et height s'appliquent au contenu uniquement.
.box {
width: 200px;
height: 100px;
padding: 20px;
border: 5px solid black;
margin: 10px;
}
Largeur totale :
- Contenu : 200px
- Padding : 20px × 2 = 40px
- Border : 5px × 2 = 10px
- Total : 250px (sans margin)
Hauteur totale :
- Contenu : 100px
- Padding : 20px × 2 = 40px
- Border : 5px × 2 = 10px
- Total : 150px (sans margin)
Padding
Padding = Espace intérieur (entre contenu et bordure).
Syntaxe :
/* Tous les côtés */
padding: 20px;
/* Vertical / Horizontal */
padding: 10px 20px; /* top/bottom left/right */
/* Tous les côtés */
padding: 10px 20px 15px 25px; /* top right bottom left */
/* Côtés individuels */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 15px;
padding-left: 25px;
Valeurs :
px,em,rem,%0: Pas de padding
Exemple :
.box {
padding: 20px; /* Tous les côtés */
}
.card {
padding: 15px 25px; /* Vertical Horizontal */
}
.button {
padding: 10px 20px 10px 20px; /* Top Right Bottom Left */
}
Border
Border = Bordure autour de l'élément.
Syntaxe :
border: width style color;
Exemple :
border: 2px solid black;
Styles de bordure :
solid: Ligne continuedashed: Ligne pointilléedotted: Ligne en pointillésdouble: Double lignenone: Pas de bordure
Côtés individuels :
border-top: 2px solid black;
border-right: 3px dashed red;
border-bottom: 1px dotted blue;
border-left: 4px solid green;
Propriétés séparées :
border-width: 2px;
border-style: solid;
border-color: black;
Bordure arrondie :
border-radius: 10px;
border-radius: 50%; /* Cercle */
border-radius: 10px 20px; /* Ellipse */
Margin
Margin = Espace extérieur (entre éléments).
Syntaxe : Identique à padding
margin: 20px;
margin: 10px 20px;
margin: 10px 20px 15px 25px;
margin-top: 10px;
Valeurs spéciales :
auto: Centrage horizontal
.container {
width: 800px;
margin: 0 auto; /* Centré */
}
Margin négatif :
.element {
margin-top: -10px; /* Remonte l'élément */
}
Collapse des margins : Quand deux éléments verticaux ont des margins, seule la plus grande est appliquée.
.element1 {
margin-bottom: 20px;
}
.element2 {
margin-top: 30px;
}
/* Espace réel : 30px (pas 50px) */
Box-sizing
box-sizing = Définit ce que width et height incluent.
content-box (défaut)
width et height = contenu uniquement.
.box {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 5px solid black;
/* Largeur totale : 200 + 40 + 10 = 250px */
}
border-box (recommandé)
width et height = contenu + padding + border.
.box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid black;
/* Largeur totale : 200px (padding et border inclus) */
}
Reset global (recommandé) :
* {
box-sizing: border-box;
}
Avantages de border-box :
- ✅ Plus prévisible
- ✅ Plus facile à calculer
- ✅ Standard moderne
Display
display = Définit comment l'élément est affiché.
Valeurs principales :
block: Bloc (largeur complète, saut de ligne)inline: Ligne (largeur du contenu, pas de saut)inline-block: Ligne mais avec width/heightnone: Caché (pas d'espace réservé)
Box Model selon display :
block: Margin, padding, border appliquésinline: Margin/padding horizontaux seulementinline-block: Tous les aspects du box model
Exercices guidés
Exercice 1 : Padding et margin
Créez des éléments avec :
- Padding de 20px sur tous les côtés
- Margin de 10px
- Observez l'espacement
Exercice 2 : Border
Créez des éléments avec :
- Border solide de 2px
- Border pointillée de 3px
- Border-radius de 10px
Exercice 3 : Box-sizing
Créez deux éléments identiques :
- Un avec
content-box - Un avec
border-box - Comparez les dimensions totales
Exercice 4 : Centrage avec margin
Créez un conteneur :
- Largeur de 800px
- Centré avec
margin: 0 auto
Exercice 5 : Box Model complet
Créez une carte avec :
- Width de 300px
- Padding de 20px
- Border de 2px
- Margin de 15px
- Utilisez
border-box
❌ Erreurs fréquentes
Erreur 1 : Oublier box-sizing
❌ Mauvais :
.box {
width: 200px;
padding: 20px;
/* Largeur totale : 240px (surprise !) */
}
✅ Bon :
* {
box-sizing: border-box;
}
.box {
width: 200px;
padding: 20px;
/* Largeur totale : 200px (prévisible) */
}
Pourquoi : border-box est plus prévisible.
Erreur 2 : Confondre padding et margin
❌ Mauvais :
.element {
padding: 20px; /* Pour espacer de l'extérieur */
}
✅ Bon :
.element {
margin: 20px; /* Espace extérieur */
padding: 20px; /* Espace intérieur */
}
Pourquoi : Padding = intérieur, margin = extérieur.
Erreur 3 : Margin négatif mal utilisé
❌ Mauvais :
.element {
margin: -50px; /* Trop agressif */
}
✅ Bon :
.element {
margin: -5px; /* Subtile si nécessaire */
}
Pourquoi : Margin négatif peut casser la mise en page.
Erreur 4 : Units incohérentes
❌ Mauvais :
.box {
padding: 1em;
margin: 20px;
border: 2rem;
}
✅ Bon :
.box {
padding: 1rem;
margin: 1rem;
border: 2px;
}
Pourquoi : Cohérence dans les unités.
Erreur 5 : Oublier le collapse des margins
❌ Mauvais :
.element1 { margin-bottom: 20px; }
.element2 { margin-top: 30px; }
/* Pense que l'espace sera 50px */
✅ Bon :
.element1 { margin-bottom: 30px; }
.element2 { margin-top: 0; }
/* Espace réel : 30px */
Pourquoi : Comprendre le collapse des margins.
🚀 Mini-projet
Mission : Créer des cartes avec Box Model maîtrisé
Créez une page avec 3 cartes :
Chaque carte :
- Width de 300px (avec border-box)
- Padding de 20px
- Border de 2px solid
- Border-radius de 10px
- Margin de 15px entre les cartes
- Contenu (titre, texte, bouton)
Défis :
- Utiliser
border-boxpour des dimensions prévisibles - Espacer correctement avec margin
- Créer des bordures arrondies
- Centrer les cartes avec margin auto
Critères :
- ✅ Box Model maîtrisé
- ✅ border-box utilisé
- ✅ Espacement cohérent
- ✅ Dimensions prévisibles
Objectif : Maîtriser le Box Model pour contrôler précisément les dimensions et l'espacement.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez margin, padding, border, box-sizing et pouvez créer des layouts avec dimensions prévisibles.