Le CSS
Le CSS (Cascading Style Sheets ou Feuilles de Style en Cascade) est le langage qui permet de mettre en forme les pages HTML. Il gère les couleurs, les polices, les espacements, la disposition des éléments, etc.
Qu'est-ce que le CSS ?
Le CSS n'est pas un langage de programmation, c'est un langage de mise en forme. Il vient compléter le HTML :
- HTML = Structure et contenu (le squelette)
- CSS = Présentation et apparence (l'habillage)
Pourquoi séparer HTML et CSS ?
- Maintenabilité : Modifier l'apparence sans toucher au contenu
- Réutilisabilité : Un même fichier CSS pour plusieurs pages
- Performances : Le CSS est mis en cache par le navigateur
- Clarté : Code plus lisible et organisé
Intégrer du CSS
Il existe trois façons d'ajouter du CSS à une page HTML :
1. CSS en ligne (inline) - À éviter
Directement dans l'attribut style d'une balise :
Inconvénient : Mélange contenu et présentation, difficile à maintenir.
2. CSS interne (dans le head)
Dans une balise <style> dans le <head> :
Utilité : Pour des styles spécifiques à une seule page.
3. CSS externe (fichier séparé) - Recommandé
Dans un fichier .css séparé, lié avec <link> :
Fichier style.css :
Avantage : Séparation claire, réutilisable, mise en cache.
Syntaxe CSS
Une règle CSS est composée de :
Exemple
- Sélecteur :
h1(cible tous les titres h1) - Propriétés :
color,font-size,text-align - Valeurs :
blue,32px,center
Important : Chaque déclaration se termine par un point-virgule
;
Les sélecteurs
Les sélecteurs permettent de cibler les éléments HTML à styliser.
Sélecteurs de base
| Sélecteur | Exemple | Cible |
|---|---|---|
| Élément | p |
Tous les <p> |
| Classe | .rouge |
Tous les éléments avec class="rouge" |
| ID | #menu |
L'élément avec id="menu" |
| Universel | * |
Tous les éléments |
Exemples
<p>Paragraphe normal</p>
<p class="important">Paragraphe important</p>
<p id="intro">Introduction unique</p>
/* Tous les paragraphes */
p {
font-family: Arial;
}
/* Éléments avec la classe "important" */
.important {
color: red;
font-weight: bold;
}
/* L'élément avec l'id "intro" */
#intro {
font-size: 20px;
background-color: yellow;
}
Sélecteurs combinés
/* Descendant : p à l'intérieur de div */
div p {
color: blue;
}
/* Enfant direct : p directement dans div */
div > p {
color: green;
}
/* Plusieurs sélecteurs, mêmes styles */
h1, h2, h3 {
font-family: Georgia;
}
/* Élément avec une classe spécifique */
p.important {
border: 1px solid red;
}
Pseudo-classes
Les pseudo-classes ciblent un état particulier d'un élément :
/* Lien non visité */
a:link {
color: blue;
}
/* Lien visité */
a:visited {
color: purple;
}
/* Au survol de la souris */
a:hover {
color: red;
text-decoration: underline;
}
/* Lors du clic */
a:active {
color: orange;
}
/* Premier enfant */
li:first-child {
font-weight: bold;
}
/* Dernier enfant */
li:last-child {
color: gray;
}
Les couleurs
Différentes notations
/* Nom de couleur */
color: red;
color: blue;
color: darkgreen;
/* Hexadécimal (#RRGGBB) */
color: #FF0000; /* Rouge */
color: #00FF00; /* Vert */
color: #0000FF; /* Bleu */
color: #FFFFFF; /* Blanc */
color: #000000; /* Noir */
/* Hexadécimal court (#RGB) */
color: #F00; /* Rouge (#FF0000) */
/* RGB (Red, Green, Blue) : 0-255 */
color: rgb(255, 0, 0); /* Rouge */
color: rgb(128, 128, 128); /* Gris */
/* RGBA (avec transparence : 0-1) */
color: rgba(255, 0, 0, 0.5); /* Rouge semi-transparent */
/* HSL (Teinte, Saturation, Luminosité) */
color: hsl(0, 100%, 50%); /* Rouge */
Propriétés utilisant les couleurs
color: red; /* Couleur du texte */
background-color: yellow; /* Couleur de fond */
border-color: black; /* Couleur de bordure */
Le texte
Police de caractères
/* Famille de police */
font-family: Arial, Helvetica, sans-serif;
/* Taille */
font-size: 16px;
font-size: 1.2em; /* Relatif à la taille parente */
font-size: 1.2rem; /* Relatif à la taille racine (html) */
/* Graisse (épaisseur) */
font-weight: normal; /* 400 */
font-weight: bold; /* 700 */
font-weight: 300; /* Léger */
/* Style */
font-style: normal;
font-style: italic;
Alignement et décoration
/* Alignement horizontal */
text-align: left;
text-align: center;
text-align: right;
text-align: justify;
/* Décoration */
text-decoration: none; /* Supprime le soulignement */
text-decoration: underline; /* Souligne */
text-decoration: line-through; /* Barré */
/* Transformation */
text-transform: uppercase; /* MAJUSCULES */
text-transform: lowercase; /* minuscules */
text-transform: capitalize; /* Première Lettre En Majuscule */
Espacement
/* Interligne */
line-height: 1.5;
line-height: 24px;
/* Espacement entre les lettres */
letter-spacing: 2px;
/* Espacement entre les mots */
word-spacing: 5px;
/* Retrait de première ligne */
text-indent: 30px;
Le modèle de boîte (Box Model)
Tout élément HTML est considéré comme une boîte rectangulaire composée de plusieurs couches :
┌─────────────────────────────────────┐
│ margin │ ← Marge externe
│ ┌───────────────────────────────┐ │
│ │ border │ │ ← Bordure
│ │ ┌─────────────────────────┐ │ │
│ │ │ padding │ │ │ ← Marge interne
│ │ │ ┌───────────────────┐ │ │ │
│ │ │ │ content │ │ │ │ ← Contenu
│ │ │ └───────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
Les propriétés
/* Contenu */
width: 300px;
height: 200px;
/* Marge interne (padding) */
padding: 20px; /* Les 4 côtés */
padding: 10px 20px; /* Vertical | Horizontal */
padding: 10px 20px 15px 25px; /* Haut | Droite | Bas | Gauche */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 15px;
padding-left: 25px;
/* Bordure */
border: 1px solid black; /* Épaisseur | Style | Couleur */
border-width: 2px;
border-style: solid; /* solid, dashed, dotted, double... */
border-color: red;
border-radius: 10px; /* Coins arrondis */
/* Marge externe (margin) */
margin: 20px; /* Les 4 côtés */
margin: 10px 20px; /* Vertical | Horizontal */
margin: 0 auto; /* Centrer horizontalement */
margin-top: 10px;
Box-sizing
Par défaut, width et height ne concernent que le contenu. Pour inclure padding et border :
Les dimensions et unités
Unités absolues
| Unité | Description |
|---|---|
px |
Pixels |
cm, mm |
Centimètres, millimètres |
pt |
Points (1pt = 1/72 inch) |
Unités relatives
| Unité | Description |
|---|---|
% |
Pourcentage du parent |
em |
Relatif à la taille de police du parent |
rem |
Relatif à la taille de police de <html> |
vw |
1% de la largeur de la fenêtre |
vh |
1% de la hauteur de la fenêtre |
Exemples
/* Largeur fixe */
width: 300px;
/* Largeur relative au parent */
width: 50%;
/* Largeur relative à la fenêtre */
width: 80vw;
/* Largeur maximale */
max-width: 1200px;
/* Largeur minimale */
min-width: 300px;
Les bordures et arrondis
/* Bordure simple */
border: 2px solid black;
/* Bordure par côté */
border-top: 3px dashed red;
border-bottom: 1px dotted blue;
/* Coins arrondis */
border-radius: 10px; /* Tous les coins */
border-radius: 10px 20px; /* Haut-gauche/Bas-droite | Haut-droite/Bas-gauche */
border-radius: 50%; /* Cercle parfait (si carré) */
/* Ombre de boîte */
box-shadow: 5px 5px 10px rgba(0,0,0,0.3);
/* Décalage-X | Décalage-Y | Flou | Couleur */
Les arrière-plans
/* Couleur de fond */
background-color: lightblue;
/* Image de fond */
background-image: url('image.jpg');
/* Répétition */
background-repeat: no-repeat;
background-repeat: repeat-x;
background-repeat: repeat-y;
/* Position */
background-position: center;
background-position: top right;
background-position: 50% 50%;
/* Taille */
background-size: cover; /* Couvre tout l'élément */
background-size: contain; /* Image entière visible */
background-size: 100px 200px;
/* Raccourci */
background: url('image.jpg') no-repeat center/cover;
L'affichage (display)
La propriété display contrôle le comportement d'affichage :
/* Bloc : prend toute la largeur, retour à la ligne avant/après */
display: block; /* div, p, h1... */
/* En ligne : prend juste la place du contenu, pas de retour à la ligne */
display: inline; /* span, a, strong... */
/* En ligne-bloc : comme inline mais accepte width/height */
display: inline-block;
/* Masquer un élément */
display: none;
Différences block vs inline
| Propriété | Block | Inline |
|---|---|---|
| Largeur | 100% du parent | Contenu seulement |
| Hauteur | Ajustable | Contenu seulement |
| Retour à la ligne | Oui | Non |
| Margin/Padding | Tous les côtés | Gauche/Droite seulement |
Le positionnement
Position static (par défaut)
Position relative
L'élément reste dans le flux mais peut être décalé :
position: relative;
top: 20px; /* Décale de 20px vers le bas */
left: 10px; /* Décale de 10px vers la droite */
Position absolute
L'élément sort du flux et se positionne par rapport à son parent positionné :
.parent {
position: relative; /* Référence pour l'enfant */
}
.enfant {
position: absolute;
top: 0;
right: 0; /* Coin supérieur droit du parent */
}
Position fixed
L'élément reste fixe par rapport à la fenêtre :
Position sticky
Hybride entre relative et fixed :
Flexbox (disposition flexible)
Flexbox permet de créer des mises en page flexibles facilement.
Conteneur flex
Direction des éléments
flex-direction: row; /* En ligne (défaut) */
flex-direction: row-reverse; /* En ligne inversée */
flex-direction: column; /* En colonne */
flex-direction: column-reverse; /* En colonne inversée */
Alignement horizontal (axe principal)
justify-content: flex-start; /* Au début */
justify-content: flex-end; /* À la fin */
justify-content: center; /* Au centre */
justify-content: space-between; /* Espace entre les éléments */
justify-content: space-around; /* Espace autour des éléments */
justify-content: space-evenly; /* Espace égal partout */
Alignement vertical (axe secondaire)
align-items: stretch; /* Étiré (défaut) */
align-items: flex-start; /* En haut */
align-items: flex-end; /* En bas */
align-items: center; /* Au centre */
Retour à la ligne
Exemple : centrer un élément
Ressource : Flexbox Froggy pour s'entraîner de façon ludique.
Les transitions et animations
Transitions
Les transitions permettent d'animer le changement d'une propriété :
.bouton {
background-color: blue;
transition: background-color 0.3s ease;
}
.bouton:hover {
background-color: red;
}
Syntaxe complète :
Fonctions de timing :
- ease : Lent-rapide-lent (défaut)
- linear : Vitesse constante
- ease-in : Démarre lentement
- ease-out : Finit lentement
- ease-in-out : Lent aux deux extrémités
Animations
/* Définir l'animation */
@keyframes apparition {
0% {
opacity: 0;
transform: translateY(-20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
/* Appliquer l'animation */
.element {
animation: apparition 1s ease forwards;
}
Les transformations
/* Déplacement */
transform: translateX(50px);
transform: translateY(20px);
transform: translate(50px, 20px);
/* Rotation */
transform: rotate(45deg);
/* Échelle (zoom) */
transform: scale(1.5); /* Agrandit de 50% */
transform: scale(0.5); /* Réduit de 50% */
/* Inclinaison */
transform: skew(10deg);
/* Combinaisons */
transform: rotate(45deg) scale(1.2) translateX(10px);
Bonnes pratiques CSS
-
Organiser son code avec des commentaires
-
Utiliser des classes plutôt que des IDs pour plus de flexibilité
-
Éviter les sélecteurs trop spécifiques
-
Utiliser des noms de classes descriptifs
-
Réinitialiser les styles par défaut
-
Mobile-first : Concevoir d'abord pour mobile, puis adapter pour écrans larges
Exercices
Exercice 1 : Premiers styles
Créez un fichier style.css qui :
- Change la couleur de fond de la page en gris clair (#f0f0f0)
- Met tous les titres h1 en bleu et centrés
- Met tous les paragraphes en police Arial avec une taille de 16px
Exercice 2 : Les classes
Créez les styles pour :
- Une classe .important qui met le texte en rouge et en gras
- Une classe .encadre qui ajoute une bordure noire de 2px et un padding de 10px
- Une classe .arrondi qui ajoute des coins arrondis de 15px
Exercice 3 : Navigation
Créez un menu de navigation horizontal avec :
- Une liste <ul> avec display: flex
- Les liens sans soulignement
- Un effet au survol (changement de couleur)
Exercice 4 : Carte de présentation
Créez une "carte" de présentation avec : - Une largeur de 300px - Une ombre légère - Des coins arrondis - Une image en haut - Un titre et un paragraphe en dessous - Un bouton stylisé
Exercice 5 : Centrage Flexbox
Créez une page avec un élément parfaitement centré (horizontalement et verticalement) en utilisant Flexbox.
Exercice 6 : Mise en page complète
Créez une mise en page avec : - Un header fixe en haut - Un menu de navigation - Un contenu principal à deux colonnes (70% contenu, 30% barre latérale) - Un footer en bas
Ressources
- MDN - CSS : Documentation complète
- W3Schools - CSS : Tutoriels et exemples
- Flexbox Froggy : Apprendre Flexbox en jouant
- CSS Grid Garden : Apprendre Grid en jouant
- CSS Diner : Maîtriser les sélecteurs
Auteur : Florian Mathieu
Licence CC BY NC
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.