Séance 3 : Le Modèle de Boîte et la Propriété Display

1. Comprendre l'Espace des Éléments

1.1 Rappel des Séances Précédentes

Lors de la Séance 1, nous avons appris à structurer notre contenu avec les balises HTML de base. La Séance 2 nous a montré comment organiser ce contenu de manière sémantique et comment cibler précisément les éléments avec différents sélecteurs CSS. Aujourd'hui, nous allons aborder un concept fondamental pour la mise en page : comment les éléments HTML occupent l'espace sur la page et comment nous pouvons contrôler cet espace.

Le Cœur de CSS : Comprendre la Cascade

Pourquoi un style s'applique et pas un autre ? La réponse se trouve dans les 3 règles fondamentales de la Cascade CSS. Les comprendre est la clé pour ne plus jamais être frustré par son CSS.

1. La Spécificité des Sélecteurs

Chaque sélecteur a un "poids" ou une "force". Un sélecteur plus spécifique l'emporte sur un moins spécifique. L'ordre de force est : Style en ligne > ID > Classe / Pseudo-classe > Balise.

<p id="mon-para" class="texte-bleu" style="color: green;">Quel sera ma couleur ?</p>
/* Le plus faible : sélecteur de balise */

            p { color: red; }

            

            /* Plus fort : sélecteur de classe */

            .texte-bleu { color: blue; }

            

            /* Encore plus fort : sélecteur d'ID */

            #mon-para { color: purple; }

            

            /* Le plus fort de tous : style en ligne (attribut style dans le HTML) */

            /* Le texte sera donc VERT. */

2. L'Héritage

Certaines propriétés CSS (comme color, font-family) sont héritées par les éléments enfants de leur parent, tandis que d'autres (comme border, padding) ne le sont pas.

<div class="parent">

                <p>Ce texte hérite de la couleur et de la police de son parent.</p>

            </div>
.parent {

                color: #4F46E5; /* Cette couleur sera héritée par le <p> */

                font-family: 'Georgia', serif;

                border: 1px solid black; /* Cette bordure ne sera PAS héritée */

            }

3. L'Ordre du Code

Si deux règles ont exactement la même spécificité, c'est la dernière déclarée dans votre fichier CSS qui l'emporte.

<p class="texte-important">Ce texte sera-t-il rouge ou bleu ?</p>
/* Les deux sélecteurs ont la même spécificité (une classe) */

            .texte-important { color: red; }

            

            .texte-important { color: blue; }

            

            /* Le texte sera BLEU car c'est la dernière règle déclarée. */

2. Comprendre l'Espace des Éléments

Pour chaque exercice, créez un nouveau fichier HTML et CSS (ou continuez sur les fichiers de la Séance 1/2 si vous le souhaitez, en les organisant bien). N'oubliez pas de lier votre fichier CSS dans le <head> de votre HTML.

Exercice 1 : Maîtrise du Box Model

Exercice 2 : Comprendre display (block, inline, inline-block)

Exercice 3 : L'Impact de box-sizing: border-box;

Exercice 4 : Stylisation de Listes et Texte

3. TP : Création d'une Carte de Produit avec le Design System

Pour ce TP, vous allez appliquer les concepts du Modèle de Boîte et de la propriété display pour créer une "carte de produit" simple, en utilisant dès le début notre Design System.

Objectif :

Créer une carte de produit visuellement cohérente en utilisant uniquement les variables (tokens) de notre Design System pour les styles.

Consignes :

  1. Créez un nouveau dossier tp-seance3 avec index.html et styles.css.
  2. Dans index.html, utilisez la structure HTML de la carte produit fournie dans la version précédente de cet exercice.
  3. Dans votre styles.css, n'utilisez que des variables de notre Design System pour les styles :
  4. /* Applique box-sizing à tous les éléments */
    *, *::before, *::after {
        box-sizing: border-box;
    }
    
    .product-card {
        width: 320px;
        background-color: var(--color-surface);
        border: 1px solid var(--color-border);
        border-radius: var(--radius-xl);
        padding: var(--space-4);
        margin: var(--space-8) auto; /* Centre la carte sur la page */
        box-shadow: var(--shadow-lg);
    }
    
    .product-image {
        width: 100%;
        height: auto;
        border-radius: var(--radius-lg);
        margin-bottom: var(--space-4);
    }
    
    .product-title {
        font-size: var(--font-size-xl);
        color: var(--color-text-base);
        font-weight: 600;
        margin-bottom: var(--space-2);
    }
    
    .add-to-cart-button {
        display: inline-block;
        width: 100%;
        background-color: var(--color-primary);
        color: var(--color-surface);
        padding: var(--space-4);
        border-radius: var(--radius-md);
        text-align: center;
        font-weight: 600;
        margin-top: var(--space-4);
        border: none;
        cursor: pointer;
    }
  5. Vérification : Ouvrez votre index.html dans le navigateur. La carte doit avoir une apparence cohérente avec les styles de base du cours, car elle utilise les mêmes tokens de design.