📚 Modèle de boîte et positionnement
Le modèle de boîte (Box Model)
Concept de base
Chaque élément HTML est représenté comme une boîte rectangulaire composée de 4 zones:
Les 4 composantes du modèle de boîte
Content (Contenu)
- Zone où apparaissent le texte, les images, etc.
- Contrôlée par
width
etheight
max-width
limite la largeur maximale (utile pour le design adaptatif)
.element {
width: 300px; /* Largeur fixe */
max-width: 100%; /* Ne dépassera jamais 100% du parent */
height: 200px; /* Hauteur fixe */
}
Padding (Espacement interne)
- Espace entre le contenu et la bordure
- Toujours transparent
- Propriétés:
padding-top
,padding-right
,padding-bottom
,padding-left
.element {
padding: 10px; /* Tous les côtés */
padding: 10px 20px; /* Vertical | Horizontal */
padding: 10px 20px 15px 25px; /* Top | Right | Bottom | Left */
}
Border (Bordure)
- Entoure le padding et le contenu
- Visible par défaut
- Propriétés:
border-width
,border-style
,border-color
.element {
border: 2px solid #333; /* width style color */
border-top: 1px dashed red; /* Bordure spécifique */
border-radius: 5px; /* Coins arrondis */
}
Border-radius: Arrondit les coins de la bordure
.element {
border-radius: 10px; /* Tous les coins */
border-radius: 50%; /* Cercle parfait */
border-radius: 10px 20px; /* Top-left/bottom-right | Top-right/bottom-left */
}
Margin (Marge externe)
- Espace autour de l'élément
- Toujours transparent
- Peut avoir des valeurs négatives
.element {
margin: 20px; /* Tous les côtés */
margin: 10px auto; /* Centrage horizontal */
margin-bottom: -10px; /* Valeur négative */
}
La propriété display
display: block
- Prend toute la largeur disponible
- Commence sur une nouvelle ligne
- Accepte
width
,height
,margin
,padding
.block-element {
display: block;
width: 50%; /* Fonctionne */
height: 100px; /* Fonctionne */
}
Exemples d'éléments block: div
, p
, h1-h6
, section
, article
display: inline
- Prend seulement l'espace nécessaire
- Reste sur la même ligne
- N'accepte PAS
width
,height
,margin
vertical (mais ok pour horizontal)
.inline-element {
display: inline;
width: 200px; /* IGNORÉ */
height: 50px; /* IGNORÉ */
margin: 10px 20px; /* Seul le margin horizontal fonctionne */
padding: 10px; /* Padding fonctionne mais peut créer des chevauchements */
}
Exemples d'éléments inline: span
, a
, strong
, em
, img
display: inline-block
- Combine les avantages des deux
- Reste sur la même ligne MAIS accepte width/height
.inline-block-element {
display: inline-block;
width: 200px; /* Fonctionne */
height: 50px; /* Fonctionne */
margin: 10px; /* Fonctionne complètement */
}
Exemples du comportement des propriétés display
display: none
et visibility: hidden
- Élément complètement retiré du contenu
- Comme s'il n'existait pas
.hidden {
display: none; /* Invisible ET ne prend pas d'espace */
}
/* Comparaison avec visibility */
.invisible {
visibility: hidden; /* Invisible MAIS prend encore son espace */
}
Exemples de display: none
vs visibility: hidden
Le positionnement (position
)
position: static
(par défaut)
- Position normale dans le flux du document
- Les propriétés
top
,right
,bottom
,left
sont ignorées
.static-element {
position: static; /* Valeur par défaut */
top: 50px; /* IGNORÉ */
}
position: relative
- Positionné par rapport à sa position normale
- L'espace original est conservé dans le flux
.relative-element {
position: relative;
top: 20px; /* Décalage de 20px vers le bas */
left: 30px; /* Décalage de 30px vers la droite */
}
Usage typique: Créer un contexte de positionnement pour des éléments position: absolute
position: absolute
- Positionné par rapport au premier parent relative (display: relative)
- Retiré du flux normal (ne prend plus d'espace)
.parent {
position: relative; /* Crée le contexte */
}
.absolute-element {
position: absolute;
top: 0; /* 0px du haut du parent */
right: 0; /* 0px de la droite du parent */
}
position: fixed
- Positionné par rapport à la fenêtre du navigateur
- Reste en place lors du scroll
.fixed-header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: white;
z-index: 1000;
}
position: sticky
- Hybride entre relative et fixed
- "Colle" quand l'utilisateur scroll
.sticky-nav {
position: sticky;
top: 20px; /* Distance du haut avant de "coller" */
}
Note: Nécessite un parent avec une hauteur définie
Exemples des types de positionnement
z-index
et empilement
Concept
La propriété z-index
contrôle l'ordre d'empilement des éléments (quel élément apparaît au-dessus).
Règles importantes
- Fonctionne seulement avec
position
autre questatic
- Plus la valeur est élevée, plus l'élément est au-dessus
- Valeurs négatives possibles
.background {
position: absolute;
z-index: 1;
}
.content {
position: relative;
z-index: 10; /* Au-dessus de background */
}
.modal {
position: fixed;
z-index: 1000; /* Au-dessus de tout */
}
Exemples de z-index
Propriété overflow
et débordement
overflow: visible
(par défaut)
Le contenu déborde de son conteneur s'il est plus grand que le conteneur.
.container {
width: 200px;
height: 100px;
overflow: visible; /* Contenu visible même s'il dépasse */
}
overflow: hidden
Le contenu qui dépasse est coupé et non visible.
.container {
overflow: hidden; /* Contenu coupé, pas de scroll */
}
overflow: scroll
Ajoute toujours des barres de défilement.
.container {
overflow: scroll; /* Barres de scroll toujours présentes */
}
overflow: auto
Ajoute des barres de défilement seulement si nécessaire.
.container {
overflow: auto; /* Barres de scroll si contenu dépasse */
}
overflow-x
et overflow-y
: contrôle par axe
Les propriétés overflow-x
et overflow-y
contrôlent le dépassement par axe.
.container {
overflow-x: hidden; /* Horizontal caché */
overflow-y: auto; /* Vertical automatique (barre de défilement si nécessaire) */
}
Exemples des propriétés overflow
float
(historique, rarement utilisé de nos jours)
Float était utilisé pour les layouts avant Flexbox/Grid, concepts que nous verrons prochainement. Aujourd'hui, on l'utilise beaucoup moins.
float: left
, float: right
, float: none
.element {
float: left; /* Flotte à gauche */
float: right; /* Flotte à droite */
float: none; /* Pas de flottement (défaut) */
}
float: clear
Pour empêcher les éléments de flotter autour
.clear-both {
clear: both; /* Empêche le flottement des deux côtés */
}