Niveau 1 — Introduction

Qu'est-ce que CSS ?

Comprendre l'histoire, le rôle et l'importance de CSS dans le web moderne.

1. Le concept fondamental

En une phrase : CSS (Cascading Style Sheets) est un langage qui décrit comment les éléments HTML doivent être affichés à l'écran.

Imaginez HTML comme l'squelette d'une maison (murs, portes, fenêtres) et CSS comme la décoration intérieure (couleurs, mobilier, disposition). Sans CSS, une page web est juste du texte brut gris sur blanc.

CSS ne concerne pas le contenu mais l'apparence. Il répond à la question : « Comment est-ce que ça ressemble ? »

2. Une brève histoire du CSS

L'avant-CSS

À l'origine, les propriétés visuelles étaient directement dans le HTML avec des balises comme <font>, <center>, <b>. C'était un mélange inextricableable de contenu et de présentation.

<!-- Méthode ancienne (à ne plus jamais faire) -->
<font color="red" size="3">Titre important</font>
<center>Texte centré</center>
<b>Texte gras</b>

CSS1 (1996)

La première recommandation CSS. Elle introduit les concepts fondamentaux :

CSS2 (1998)

Ajouts majeurs :

CSS3 (2011 — en évolution continue)

CSS3 a été découpé en modules indépendants, ce qui permet une évolution plus rapide. C'est la version que nous utilisons aujourd'hui :

Version Année Innovation clé
CSS1 1996 Séparation contenu/présentation
CSS2 1998 Positionnement, z-index, médias
CSS3 2011+ Modules, Flexbox, Grid, variables

3. Pourquoi séparer HTML et CSS ?

C'est la question la plus importante de ce chapitre. La séparation n'est pas une convention arbitraire — c'est une architecture logicielle.

Sans séparation (tout dans le HTML)

<h1 style="color: blue; font-size: 24px; margin-bottom: 10px;">Titre</h1>
<p style="color: gray; line-height: 1.6; font-family: Arial;">Paragraphe</p>
<h1 style="color: blue; font-size: 24px; margin-bottom: 10px;">Autre titre</h1>
<p style="color: gray; line-height: 1.6; font-family: Arial;">Autre paragraphe</p>
Problèmes :
  • Si tu veux changer le rouge en vert, tu dois modifier chaque occurrence.
  • Le HTML est pollué par des styles — difficile de comprendre la structure.
  • Aucune réutilisation possible.

Avec séparation (HTML + CSS séparés)

<!-- HTML : structure -->
<h1 class="titre">Titre</h1>
<p class="texte">Paragraphe</p>
/* CSS : présentation */
.titre {
  color: blue;
  font-size: 24px;
  margin-bottom: 10px;
}

.texte {
  color: gray;
  line-height: 1.6;
  font-family: Arial;
}
Avantages :
  • Un seul endroit à modifier pour changer un style partout.
  • Réutilisation : la même classe s'applique à 10 ou 1000 éléments.
  • Lisibilité : le HTML montre la structure, le CSS montre l'apparence.
  • Maintenance : un développeur front travaille le CSS, un autre le HTML.
  • Performance : le navigateur peut mettre en cache le fichier CSS séparément.

4. Comment un navigateur lit une feuille CSS

Lorsque tu charges une page web, voici ce qui se passe réellement :

Le pipeline de rendu

HTML ──→ DOM Tree
              │
CSS  ──→ CSSOM
              │
              ▼
       Render Tree
              │
              ▼
         ┌────┴────┐
         │  Layout  │  (calcul des positions et tailles)
         └────┬────┘
              │
              ▼
         ┌────┴────┐
         │  Paint   │  (dessin des pixels)
         └────┬────┘
              │
              ▼
         ┌────┴────┐
         │Composite │  (assemblage des couches)
         └─────────┘

Le pipeline de rendu simplifié d'un navigateur web

Étape par étape

1. Le navigateur parse le HTML → DOM Tree

Le navigateur lit le fichier HTML et construit le DOM (Document Object Model), un arbre d'objets représentant chaque élément.

2. Le navigateur parse le CSS → CSSOM

En parallèle, il lit toutes les feuilles de styles (externes, internes, inline) et construit le CSSOM (CSS Object Model), un arbre de styles calculés.

3. DOM + CSSOM = Render Tree

Les deux arbres fusionnent pour former le Render Tree. Cet arbre contient uniquement les éléments visibles avec leurs styles calculés.

À retenir : Les éléments avec display: none n'apparaissent PAS dans le Render Tree.

4. Layout (Reflow)

Le navigateur calcule la position exacte et la taille de chaque élément. Si tu modifies une propriété qui affecte la mise en page (margin, width, position...), cela déclenche un reflow (recalcul complet).

5. Paint (Repaint)

Le navigateur dessine les pixels : couleurs, bordures, ombres, texte. Si tu modifies color ou background, cela déclenche un repaint (redessin局部).

6. Composite

Les différentes couches sont assemblées pour former l'image finale visible à l'écran.

Pourquoi c'est important : Comprendre ce pipeline t'aide à écrire du CSS performant. Modifier transform ou opacity ne déclenche PAS de reflow — c'est pourquoi les animations sur ces propriétés sont plus fluides.

5. La syntaxe de base de CSS

Un bloc CSS suit toujours la même structure :

sélecteur {
  propriété: valeur;
  propriété: valeur;
}

Exemple concret :

h1 {
  color: blue;
  font-size: 24px;
  text-align: center;
}

6. Erreurs fréquentes des débutants

Erreur 1 : Oublier le point-virgule
/* FAUX */
h1 {
  color: blue    /* Le navigateur peut planter */
  font-size: 24px
}

/* CORRECT */
h1 {
  color: blue;
  font-size: 24px;
}
Erreur 2 : Confondre - et _
/* FAUX — CSS n'accepte pas le underscore */
.text_bg { background: red; }

/* CORRECT */
.text-bg { background: red; }
Erreur 3 : Utiliser des noms de propriétés inventés
/* FAUX */
div { text-color: red; }

/* CORRECT */
div { color: red; }
Erreur 4 : Confondre font-size et text-size
/* FAUX — text-size n'existe pas */
p { text-size: 16px; }

/* CORRECT */
p { font-size: 16px; }

7. Bonnes pratiques dès le début

Conventions essentielles :
  • Toujours utiliser des classes plutôt que des sélecteurs d'élément pour le style.
  • Nommer les classes de manière descriptive (pas .rouge, mais .texte-erreur).
  • Utiliser des fichiers CSS externes sauf cas exceptionnel.
  • Un espace avant l'accolade ouvrante : h1 { (convention).
  • Une déclaration par ligne.
  • Une ligne vide entre les blocs de règles.
/* ✅ Bonne pratique */
.titre {
  color: #1e293b;
  font-size: 2rem;
  font-weight: 700;
  line-height: 1.2;
}

.sous-titre {
  color: #64748b;
  font-size: 1.1rem;
  margin-top: 0.5rem;
}

8. Mini-défi

Exercice : Explorer le DOM

  1. Ouvre n'importe quelle page web dans ton navigateur.
  2. Fais un clic droit → Inspecter (ou F12).
  3. Onglet Elements : observe l'arbre DOM. Déplie les nœuds.
  4. Onglet Computed : sélectionne un élément et regarde toutes les propriétés CSS calculées.
  5. Onglet Box Model : observe le modèle de boîte de l'élément sélectionné.

Objectif : te familiariser avec les DevTools, qui seront tes meilleurs amis tout au long de cette formation.

9. Projet d'application

Projet : Première page stylisée

Crée un fichier index.html et un fichier style.css séparé.

Le HTML doit contenir :

  • Un titre <h1>
  • Un sous-titre <h2>
  • Un paragraphe <p>
  • Un lien <a>

Le CSS doit :

  • Changer la couleur du titre
  • Ajouter un espacement sous le sous-titre
  • Modifier la police du paragraphe
  • Styliser le lien (couleur + pas de soulignement)

Cet exercice semble simple, mais il te force à comprendre la séparation HTML/CSS et la link entre les fichiers.

10. Révision

Quiz rapide

  1. Quel langage gère la structure d'une page web ?
  2. Quel langage gère la présentation ?
  3. Qu'est-ce que le DOM ?
  4. Quelle est la différence entre un reflow et un repaint ?
  5. Pourquoi faut-il séparer HTML et CSS ?
  6. Quel est le bon nom pour une classe : .mon_element ou .mon-element ?