📘 Cours CSS

Apprenez toutes les balises HTML et leurs utilisations

🌐 Introduction au CSS

Le CSS (Cascading Style Sheets, ou Feuilles de style en cascade) est un langage qui permet de définir l’apparence d’une page web : couleurs, tailles, marges, polices, mise en page, etc. Il complète le HTML, qui décrit la structure et le contenu. Il existe 3 manières d’appliquer du CSS dans un document HTML :

1. 🎨 Le style en ligne (inline styles)

                <p style="color: red; font-size: 20px;">
                Ceci est un texte rouge de 20px.
                </p>
             

Ceci est un texte rouge de 20px.

✅ Avantage : rapide pour tester ou changer un style précis.
❌ Inconvénient : difficile à maintenir si la page est grande (on mélange HTML + CSS).

2. 📝 Le style interne (balise <style>)

                <html lang="fr">
                <head>
                    <meta charset="UTF-8">
                    <title>Mon site</title>
                   <style>
                   p{
                    color: blue;
                    font-size: 18px;
                   }
                   </style>
                    </head>
                <body>
                     <p>Texte bleu en 18px.</p>
                </body>
                </html><
              

Texte bleu en 18px.

✅ Avantage : permet de centraliser le CSS pour une seule page.
❌ Inconvénient : si le site a plusieurs pages, il faut répéter le style à chaque fois.

3. 📚 Le style externe (balise <link>)

style.css

            p {
                color: green;
                font-size: 16px;
              }
          

index.html

            <html lang="fr">
            <head>
                <meta charset="UTF-8">
                <title>Mon site</title>
               <link rel="stylesheet" href="style.css">
                </head>
            <body>
                 <p>Texte vert en 16px.</p>
            </body>
            </html><
          

Texte vert en 16px.

✅ Avantages :
  • code plus propre
  • facile à maintenir
  • réutilisable sur plusieurs pages du site
❌ Inconvénient : nécessite un fichier séparé (mais en réalité c’est la meilleure pratique pour les vrais projets).
✅ Conclusion
  • Inline (style="...") → rapide mais à éviter sauf pour des cas ponctuels.
  • Interne (<style>...</style>) → utile pour une seule page ou un test rapide.
  • Externe (style.css) → méthode recommandée pour les vrais projets, car elle rend le code clair, réutilisable et facile à maintenir.

🎨 Les bases du CSS — Guide Complet & Structuré

Le CSS (Cascading Style Sheets) permet de séparer le contenu (HTML) de la présentation (style). Voici TOUT ce que tu dois maîtriser pour bien commencer : sélecteurs, propriétés, unités, héritage, spécificité, pseudo-classes, et plus.

1. 📌 Sélecteur par balise (type selector)

          style.css
          p {
            color: red;
            font-size: 18px;
            line-height: 1.6;
          }
          
          h2 {
            color: #333;
            border-bottom: 2px solid #00bcd4;
            padding-bottom: 5px;
          }
            

Ce paragraphe est rouge, en 18px, avec un espacement de ligne confortable.

✅ Sélectionne tous les éléments de ce type dans la page.
✅ Très utile pour définir des styles globaux (typographie, espacement, couleurs de base).
✅ Exemples : div, h1, ul, button.

2. 🎯 Sélecteur par classe (class selector)

          style.css
          .important {
            color: blue;
            font-weight: bold;
            background: #e3f2fd;
            padding: 8px;
            border-radius: 4px;
          }
          
          .highlight {
            background: yellow;
            font-style: italic;
          }
            

Ce texte utilise la classe .important.

Et celui-ci utilise .highlight. Tu peux combiner les classes !

✅ Commence par un point : .nom-de-classe
✅ Peut être appliqué à plusieurs éléments.
✅ Un élément peut avoir plusieurs classesclass="important highlight".
✅ C’est le sélecteur le plus utilisé → flexible, réutilisable, maintenable.

3. 🆔 Sélecteur par ID (ID selector)

          style.css
          #special {
            background-color: yellow;
            padding: 15px;
            border: 2px dashed #ff5722;
            font-size: 20px;
            text-align: center;
          }
          
          #header {
            background: #2196f3;
            color: white;
            padding: 20px;
            text-align: center;
          }
            

Ce paragraphe a l’ID #special → unique dans la page.

✅ Commence par un dièse : #nom-id
✅ Doit être unique dans la page (1 seul élément par ID).
✅ Très spécifique → utilisé pour cibler un élément précis (ancres, JS, styles uniques).
⚠️ À utiliser avec parcimonie → préfère les classes pour le style.

4. 🔍 Sélecteurs avancés — Attributs, enfants, voisins

          style.css
          /* Sélecteur d'attribut */
          input[type="text"] {
            border: 2px solid #4caf50;
            padding: 10px;
          }
          
          /* Enfant direct */
          ul > li {
            color: purple;
            font-weight: bold;
          }
          
          /* Frère adjacent */
          h2 + p {
            margin-top: 0;
            font-style: italic;
          }
          
          /* Frère général */
          h3 ~ p {
            color: gray;
          }
            

Titre H2

Paragraphe FRÈRE ADJACENT (h2 + p)

Titre H3

Paragraphe FRÈRE GÉNÉRAL (h3 ~ p)

Un autre paragraphe frère général

[attribut] → cible par attribut → input[type="text"]
parent > enfant → uniquement les enfants directs.
frère + suivant → l’élément immédiatement après.
frère ~ suivants → tous les frères après, pas forcément adjacents.
✅ Très puissant pour cibler sans ajouter de classes.

5. 🖱️ Pseudo-Classes — :hover, :focus, :nth-child, etc.

          style.css
          .button {
            background: #607d8b;
            color: white;
            padding: 10px 20px;
            border: none;
            cursor: pointer;
            transition: background 0.3s;
          }
          
          .button:hover {
            background: #455a64;
          }
          
          .button:focus {
            outline: 3px solid #81d4fa;
          }
          
          li:nth-child(odd) {
            background: #f5f5f5;
          }
          
          input:invalid {
            border: 2px solid #f44336;
          }
            
:hover → au survol de la souris.
:focus → quand l’élément est sélectionné (clavier ou clic).
:nth-child(n) → cible le n-ième enfant → odd, even, 3n+1.
:invalid, :required, :checked → états des formulaires.
✅ Essentiels pour les interactions et les styles conditionnels.

6. ✨ Pseudo-Éléments — ::before, ::after, ::first-line

          style.css
          .quote::before {
            content: "“";
            color: #ff9800;
            font-size: 2em;
            vertical-align: -0.4em;
          }
          
          .quote::after {
            content: "”";
            color: #ff9800;
            font-size: 2em;
            vertical-align: -0.4em;
          }
          
          .intro::first-line {
            font-weight: bold;
            color: #d32f2f;
          }
          
          .clearfix::after {
            content: "";
            display: table;
            clear: both;
          }
            

Ceci est une citation stylée avec ::before et ::after

Ceci est une introduction. La première ligne est en gras et rouge grâce à ::first-line. Le reste est normal.

::before / ::after → insèrent du contenu avant/après l’élément (nécessite content).
::first-line → style uniquement la première ligne.
::first-letter → style la première lettre (idéal pour les lettrines).
✅ Très utiles pour les décorations, icônes, clearfix, citations, etc.

7. 📏 Unités de mesure — px, em, rem, %, vw, vh

          style.css
          .box {
            width: 300px;         /* fixe */
            font-size: 1.2rem;    /* relatif à la racine (html) */
            padding: 1em;         /* relatif à la police du parent */
            margin: 5%;           /* relatif au parent */
            height: 20vh;         /* 20% de la hauteur de la fenêtre */
            max-width: 80vw;      /* 80% de la largeur de la fenêtre */
          }
            
Boîte avec unités mixtes
(Redimensionne la fenêtre → vh/vw réagissent)
px → fixe, pas responsive.
em → relatif à la taille de police du parent.
rem → relatif à la taille de police de la racine (html) → recommandé.
% → relatif au parent.
vw / vh → relatif à la taille de la fenêtre → parfait pour le responsive.
💡 Astuce : font-size: clamp(1rem, 2.5vw, 1.5rem); → typographie fluide.

8. 🧬 Héritage & Spécificité — Le “C” de CSS (Cascading)

          style.css
          /* Héritage : certaines propriétés se transmettent aux enfants */
          body {
            font-family: Arial, sans-serif;
            color: #333;
          }
          
          /* Spécificité : quel style l'emporte ? */
          p { color: blue; }                    /* spécificité faible */
          .important { color: red; }            /* plus spécifique */
          #special { color: green; }            /* encore plus spécifique */
          p#special.important { color: purple; } /* très très spécifique */
          
          /* !important → force l'application (à éviter) */
          .force { color: orange !important; }
            

Texte en bleu (balise)

Texte en rouge (classe)

Texte en vert (ID)

Texte en violet (balise + ID + classe)

Texte en orange (!important)

Héritage → certaines propriétés (color, font-family) se transmettent aux enfants.
Spécificité → détermine quel style l’emporte :
  → ID > Classe > Balise
  → Plus de sélecteurs = plus spécifique
!important → force le style → à utiliser uniquement en dernier recours.
✅ Outil utile : Calculateur de spécificité.

9. 💬 Commentaires & Bonnes Pratiques CSS

          style.css
          /* Commentaire sur une ligne */
          
          /*
            Commentaire
            sur plusieurs lignes
          */
          
          /* ✅ Bonnes pratiques */
          .button {
            padding: 12px 24px;     /* espace intérieur */
            border: none;           /* pas de bordure */
            background: #03a9f4;    /* couleur de fond */
            color: white;           /* couleur du texte */
            cursor: pointer;        /* change le curseur */
            font-size: 1rem;        /* taille lisible et scalable */
            transition: all 0.2s ease; /* micro-interaction fluide */
          }
          
          /* ❌ À éviter */
          div { color: red; }       /* trop générique */
          #main .sidebar p span b { ... } /* trop spécifique → fragile */
            
Commente ton code → pour toi et ton équipe.
Sois cohérent → même ordre de propriétés, même nommage (BEM, etc.).
Pense mobile-first → commence petit, étends avec media queries.
Sépare structure (HTML) et style (CSS) → pas de style inline sauf exceptions.
Utilise des classes sémantiques.btn-primary, pas .red-big-button.

10. 📊 Récapitulatif Complet — Sélecteurs & Concepts CSS

Type Exemple Description
Sélecteur de balise p { } Tous les paragraphes
Sélecteur de classe .btn { } Éléments avec class="btn"
Sélecteur d’ID #header { } Élément avec id="header"
Sélecteur d’attribut input[type="text"] Input de type texte
Enfant direct ul > li Li enfants directs de ul
Frère adjacent h2 + p P immédiatement après h2
Frère général h2 ~ p Tous les p après h2
Pseudo-classe a:hover, li:nth-child(odd) État ou position
Pseudo-élément p::first-line, div::before Partie d’un élément
Unités 1rem, 5vw, 50% Mesures relatives/absolues
Héritage color, font-family Se transmet aux enfants
Spécificité ID > Classe > Balise Détermine quel style l’emporte
🎉 Félicitations ! Tu maîtrises maintenant les bases du CSS dans leur totalité.
Tu peux styliser n’importe quel élément, comprendre pourquoi un style s’applique (ou pas), et écrire du CSS propre, maintenable et scalable.
→ Passe à Flexbox, Grid, Responsive, Animations… mais reviens ici si tu as un doute : c’est ta fondation.
Le CSS, c’est l’art de transformer le HTML en expérience visuelle. 🎨✨

📝 Styliser le texte avec CSS — Guide Complet & Avancé

Le CSS permet de contrôler chaque détail typographique : police, couleur, espacement, décoration, ombre, césure, débordement, et même l’orientation du texte. Voici TOUT ce que tu dois maîtriser.

1. 🎨 Couleur, taille et opacité du texte

          style.css
          .texte-bleu {
            color: #2196f3;        /* bleu moderne */
            font-size: 24px;       /* ou 2rem, 4vw... */
            opacity: 0.9;          /* transparence */
          }
          
          index.html
          <p class="texte-bleu">Texte bleu en 24px, avec opacité.</p>
            

Texte bleu en 24px, avec opacité

color → accepte HEX, RGB, HSL, mots-clés.
font-sizepx, em, rem, %, vw (responsive).
opacity → 0 (invisible) à 1 (opaque). Affecte tout l’élément (fond + texte).

2. 🅰️ Police du texte (font-family, @font-face)

          style.css
          /* Polices système avec fallback */
          .texte-arial {
            font-family: "Arial", "Helvetica", sans-serif;
          }
          
          /* Police personnalisée */
          @font-face {
            font-family: 'MaPolice';
            src: url('mapolice.woff2') format('woff2');
            font-weight: normal;
            font-style: normal;
          }
          
          .texte-custom {
            font-family: 'MaPolice', sans-serif;
          }
          
          index.html
          <p class="texte-arial">Texte en Arial.</p>
          <p class="texte-custom">Texte en police personnalisée.</p>
            

Texte en Arial (fallback: Helvetica, sans-serif)

✅ Toujours fournir des polices de secours → sans-serif, serif, monospace.
✅ Utilise @font-face pour charger des polices personnalisées (formats modernes : .woff2).
✅ Google Fonts :

3. ✍️ Style, poids et variante (font-style, font-weight, font-variant)

          style.css
          .texte-complet {
            font-style: italic;           /* italique */
            font-weight: 700;             /* gras (400=normal, 700=bold) */
            font-variant: small-caps;     /* petites majuscules */
          }
          
          index.html
          <p class="texte-complet">Texte en italique, gras, petites majuscules.</p>
            

Texte en italique, gras, petites majuscules.

font-weight → 100 à 900 (multiples de 100).
font-variant: small-caps; → transforme les minuscules en petites majuscules stylées.
✅ Aussi : font-variant-ligatures, font-variant-numeric pour des contrôles typographiques avancés.

4. 📏 Alignement du texte (text-align, vertical-align)

          style.css
          .texte-centre {
            text-align: center;           /* horizontal */
          }
          
          .texte-baseline {
            vertical-align: baseline;     /* alignement vertical (inline/inline-block) */
          }
          
          .texte-super {
            vertical-align: super;        /* exposant */
          }
          
          index.html
          <p class="texte-centre">Texte centré.</p>
          <span>H</span><span class="texte-super">2O
            

Texte centré

H2O → eau

text-alignleft, center, right, justify.
vertical-align → fonctionne sur éléments inline ou inline-block :
  → baseline, top, middle, bottom, super, sub.

5. ➖ Décoration du texte (text-decoration)

          style.css
          .souligne {
            text-decoration: underline;
          }
          
          .barrer {
            text-decoration: line-through;
          }
          
          .clignote {
            text-decoration: underline wavy red; /* style, motif, couleur */
            animation: blink 1s step-end infinite;
          }
          
          @keyframes blink {
            50% { opacity: 0; }
          }
          
          index.html
          <p class="souligne">Texte souligné.</p>
          <p class="barrer">Texte barré.</p>
          <p class="clignote">Texte clignotant avec souligné ondulé rouge.

Texte souligné

Texte barré

Texte clignotant avec souligné ondulé rouge

✅ Syntaxe complète : text-decoration: [style] [line-style] [color];
→ Ex: underline dotted blue
✅ Styles : solid, dotted, dashed, wavy.
✅ Combine avec animation pour des effets dynamiques (clignotement, etc.).

6. 🔠 Transformation du texte (text-transform)

          style.css
          .majuscules {
            text-transform: uppercase;
          }
          
          .minuscules {
            text-transform: lowercase;
          }
          
          .capitalise {
            text-transform: capitalize;
          }
          
          index.html
          <p class="majuscules">ceci devient MAJUSCULES.</p>
          <p class="minuscules">CECI DEVIENT minuscules.</p>
          <p class="capitalise">chaque mot commence par une majuscule.</p>
            

ceci devient MAJUSCULES

CECI DEVIENT minuscules

chaque mot commence par une majuscule

✅ Ne change pas le HTML → seulement l’affichage.
✅ Très utile pour les titres, menus, boutons → cohérence visuelle sans modifier le contenu.

7. 📏 Espacement des lettres, mots et lignes

          style.css
          .espacement {
            letter-spacing: 4px;    /* entre les caractères */
            word-spacing: 15px;     /* entre les mots */
            line-height: 1.8;       /* hauteur de ligne (sans unité = multiple) */
          }
          
          index.html
          <p class="espacement">Texte avec espacement large entre lettres, mots et lignes.</p>
            

Texte avec espacement large entre lettres, mots et lignes.

letter-spacing → idéal pour les titres.
word-spacing → utile pour améliorer la lisibilité.
line-height → sans unité (ex: 1.5) = relatif à la taille de police → responsive et fluide.

8. 🌑 Ombre du texte (text-shadow)

          style.css
          .ombre {
            text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
          }
          
          .ombre-multiple {
            text-shadow: 
              1px 1px 2px black,
              -1px -1px 2px blue;
          }
          
          index.html
          <h2 class="ombre">Titre avec ombre</h2>
          <h2 class="ombre-multiple">Titre avec ombres multiples</h2>
            

Titre avec ombre

Titre avec ombres multiples

✅ Syntaxe : text-shadow: offsetX offsetY blurRadius color;
✅ Tu peux empiler plusieurs ombres séparées par des virgules.
✅ Effets : relief, lueur, contour, 3D... → très puissant pour les titres.

9. 🚫 Débordement, retour à la ligne, césure

          style.css
          .controle-texte {
            width: 200px;
            border: 1px solid #ccc;
            padding: 10px;
            white-space: normal;        /* retour à la ligne normal */
            overflow-wrap: break-word;  /* casse les mots longs */
            hyphens: auto;              /* césure automatique */
            text-overflow: ellipsis;    /* ... si débordement (nécessite white-space: nowrap) */
          }
          
          .pas-de-retour {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
            width: 150px;
            border: 1px dashed red;
            padding: 5px;
          }
          
          index.html
          <div class="controle-texte">Ce texte long doit s'adapter et se couper proprement avec césure automatique si possible.</div>
          <div class="pas-de-retour">Texte très très long qui déborde et se termine par ...</div>
            
Ce texte long doit s'adapter et se couper proprement avec césure automatique si possible.
Texte très très long qui déborde et se termine par ...
white-spacenormal, nowrap, pre, pre-line.
overflow-wrap: break-word; → casse les mots trop longs.
hyphens: auto; → ajoute des tirets de césure (dépend de la langue du document).
text-overflow: ellipsis; → affiche "..." si le texte déborde (nécessite white-space: nowrap + overflow: hidden).

10. 🧷 Limiter à N lignes (line-clamp)

          style.css
          .max-3-lignes {
            display: -webkit-box;
            -webkit-line-clamp: 3;
            -webkit-box-orient: vertical;
            overflow: hidden;
            width: 300px;
            border: 1px solid #ddd;
            padding: 10px;
          }
          
          /* Modern CSS (support limité) */
          .modern-clamp {
            line-clamp: 3;
            overflow: hidden;
          }
          
          index.html
          <div class="max-3-lignes">Ce texte très long va être tronqué après exactement trois lignes, avec des points de suspension. C’est très utile pour les résumés, extraits, ou cartes de contenu.</div>
            
Ce texte très long va être tronqué après exactement trois lignes, avec des points de suspension. C’est très utile pour les résumés, extraits, ou cartes de contenu.
✅ Technique cross-browser : -webkit-line-clamp (supportée partout sauf très anciens navigateurs).
✅ CSS moderne : line-clamp: 3; (en cours d’adoption).
✅ Indispensable pour les interfaces type “cards”, “blog posts”, “produits”.

11. 🧭 Orientation du texte (writing-mode, direction)

          style.css
          .vertical {
            writing-mode: vertical-rl;    /* texte vertical de droite à gauche */
            text-orientation: upright;    /* caractères droits, pas tournés */
            height: 150px;
            background: #e3f2fd;
            padding: 10px;
          }
          
          .arabe {
            direction: rtl;               /* right-to-left */
            text-align: right;
            font-family: "Amiri", serif;
          }
          
          index.html
          <div class="vertical">TEXTE VERTICAL</div>
          <p class="arabe">هذا نص باللغة العربية</p>
            
TEXTE VERTICAL

هذا نص باللغة العربية

writing-mode: vertical-rl; → pour les langues asiatiques ou effets design.
text-orientation: upright; → garde les lettres droites.
direction: rtl; → pour l’arabe, l’hébreu, etc.
✅ Pense à définir lang="ar" ou lang="ja" dans ton HTML pour l’accessibilité.

12. 🎯 Personnalisation avancée : curseur, sélection, variables CSS

          style.css
          .curseur-personnalise {
            caret-color: #ff5722;         /* couleur du curseur de texte */
          }
          
          .selection-personnalisee::selection {
            background: #ffeb3b;          /* fond lors de la sélection */
            color: #000;
          }
          
          .texte-variable {
            --font-principale: "Georgia", serif;
            font-family: var(--font-principale);
            font-size: var(--taille-titre, 24px);
          }
          
          index.html
          <input class="curseur-personnalise" type="text" value="Clique ici → curseur orange">
          <p class="selection-personnalisee">Sélectionne ce texte pour voir le fond jaune.</p>
          <p class="texte-variable">Texte avec police et taille en variables CSS.</p>
            

Sélectionne ce texte pour voir le fond jaune

Texte avec police et taille en variables CSS.

caret-color → personnalise le curseur clignotant dans les champs.
::selection → style du texte sélectionné par l’utilisateur.
✅ Variables CSS → pour une typographie cohérente et maintenable à travers tout le site.

13. 💡 Bonnes Pratiques & Astuces Pro

14. 📊 Récapitulatif Complet — Propriétés CSS Texte

Propriété Valeurs courantes Description
color #ff0000, rgb(), blue Couleur du texte
font-size 16px, 1.2em, 5vw, clamp() Taille de la police
font-family "Arial", sans-serif Police du texte
font-weight 400, 700, bold Épaisseur (gras)
font-style normal, italic Style (italique)
font-variant small-caps Petites majuscules
text-align left, center, right, justify Alignement horizontal
vertical-align baseline, top, middle, super Alignement vertical (inline)
text-decoration underline, line-through, overline Décoration (souligné, barré...)
text-transform uppercase, lowercase, capitalize Transformation maj/min
letter-spacing 2px Espace entre les lettres
word-spacing 5px Espace entre les mots
line-height 1.5, 24px Hauteur de ligne
text-shadow 2px 2px 4px #000 Ombre du texte
white-space normal, nowrap, pre Gestion des espaces et retours
text-overflow ellipsis, clip Comportement si débordement
hyphens auto, manual Césure automatique
-webkit-line-clamp 3 Limite le nombre de lignes
writing-mode horizontal-tb, vertical-rl Orientation du texte
direction ltr, rtl Direction du texte (arabe...)
caret-color #ff0000 Couleur du curseur clignotant
::selection background: yellow; Style du texte sélectionné
🎉 Félicitations ! Tu maîtrises maintenant la typographie CSS dans sa totalité.
Tu peux créer des textes beaux, accessibles, performants et adaptatifs pour tous les écrans et toutes les langues.
→ Joue avec les ombres, les variables, les clamp, les césures... et fais de ton texte un élément de design à part entière.
Le texte n’est pas qu’un contenu — c’est une expérience. ✍️🌍

🎨 Arrière-plans & Dégradés en CSS — Guide Complet & Avancé

Le CSS permet de créer des arrière-plans riches, dynamiques et modernes : couleurs unies, images, dégradés linéaires/radiaux/coniques, superpositions, effets de mélange... Voici TOUT ce que tu dois maîtriser.

1. 🌈 Couleur du texte — HEX, RGB, HSL, HWB, Lab

          style.css
          .texte-hex {
            color: #ff5722;               /* HEX */
          }
          
          .texte-rgb {
            color: rgb(76, 175, 80);      /* RGB */
          }
          
          .texte-hsl {
            color: hsl(240, 100%, 50%);   /* HSL → teinte, saturation, luminosité */
          }
          
          .texte-alpha {
            color: rgba(255, 99, 132, 0.7); /* avec transparence */
          }
          
          .texte-lab {
            color: lab(50% 40 20);        /* Lab → perceptuel, moderne */
          }

          index.html
          <div class="texte-hex">Texte en HEX (#ff5722)</div>
          <div class="texte-rgb">Texte en RGB (76, 175, 80)</div>
          <div class="texte-hsl">Texte en HSL (Bleu pur)</div>
          <div class="texte-alpha">Texte semi-transparent (rgba)</div>
          <div class="texte-lab">Texte en Lab (50% 40 20)</div>

            

Texte en HEX (#ff5722)

Texte en RGB (76, 175, 80)

Texte en HSL (Bleu pur)

Texte semi-transparent (rgba)

HEX → traditionnel (#rrggbb)
RGBrgb(rouge, vert, bleu) ou rgba(..., alpha)
HSL → plus intuitif : hsl(teinte 0-360°, saturation %, luminosité %)
Lab, LCH → couleurs perceptuelles, modernes, accessibles.
✅ Toujours vérifier le contraste avec WebAIM Contrast Checker.

2. 🎨 Couleur de fond — background-color

          style.css
          .fond-hsl {
            background-color: hsl(200, 100%, 80%);
            padding: 20px;
            color: #333;
          }
          
          .fond-lab {
            background-color: lch(75% 50 200); /* LCH → Lightness, Chroma, Hue */
            padding: 20px;
            color: #000;
          }

          index.html
          <div class="fond-hsl">Fond en HSL (bleu clair)</div>
          <div class="fond-lab">Fond en LCH (moderne, perceptuel)</div>
            
Fond en HSL (bleu clair)
Fond en LCH (moderne, perceptuel)
✅ Les mêmes formats que color s’appliquent à background-color.
hsl() est excellent pour créer des variations de teinte (ex: thèmes dynamiques).
lch() → le futur des couleurs CSS → plus proche de la perception humaine.

3. 🖼️ Image de fond — background-image + position/size/repeat

          style.css
          .fond-image {
            background-image: url('https://via.placeholder.com/400x200');
            background-repeat: no-repeat;
            background-size: cover;        /* ou contain, auto, 100% 100% */
            background-position: center;   /* ou top left, 50% 50%, etc. */
            background-origin: padding-box; /* ou border-box, content-box */
            background-clip: padding-box;  /* où la couleur/dégradé est dessinée */
            width: 300px;
            height: 200px;
            border: 10px dashed #333;
            padding: 20px;
          }

          index.html
          <div class="fond-image">Image de fond</div>
            
background-size: cover → remplit sans déformer.
background-size: contain → montre toute l’image sans dépasser.
background-position → positionne l’image (mots-clés ou %).
background-origin → où commence le positionnement (padding, border, content).
background-clip → où le fond est visible (padding, border, content, text !).

4. 🎭 Effet texte avec image ou dégradé (background-clip: text)

          style.css
          .texte-degrade {
            background: linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1);
            background-clip: text;
            -webkit-background-clip: text; /* nécessaire pour Chrome/Safari */
            color: transparent;
            font-size: 2rem;
            font-weight: bold;
            margin: 20px 0;
          }

          index.html
          <div class="texte-degrade">Texte en dégradé !</div>
            
Texte en dégradé !
background-clip: text; → le fond ne s’affiche QUE dans les lettres.
✅ Obligatoire : color: transparent;
✅ Ajoute -webkit-background-clip: text; pour la compatibilité.
✅ Parfait pour les titres, logos, effets d’accroche.

5. 🔄 Dégradé linéaire — linear-gradient

          style.css
          .degrade-simple {
            background: linear-gradient(to right, red, blue);
          }
          
          .degrade-angle {
            background: linear-gradient(135deg, #ff9a9e, #fecfef, #fecfef, #ff9a9e);
          }
          
          .degrade-transparence {
            background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(0,0,0,0.8));
          }
          
          .degrade-arrets {
            background: linear-gradient(to right, red 0%, yellow 50%, green 100%);
          }

          index.html
          <div class="degrade-simple">Dégradé simple</div>
          <div class="degrade-angle">Dégradé angle</div>
          <div class="degrade-transparence">Dégradé transparence</div>
          <div class="degrade-arrets">Dégradé arrêts</div>
            
✅ Directions : to right, to bottom, 45deg, etc.
✅ Arrêts de couleur : red 0%, yellow 50% → contrôle précis.
✅ Transparence : utilise rgba() ou hsla() dans les dégradés.
✅ Très utile pour les overlays, hero sections, effets de profondeur.

6. 🎯 Dégradé radial — radial-gradient

          style.css
          .radial-simple {
            background: radial-gradient(circle, yellow, red);
          }
          
          .radial-position {
            background: radial-gradient(circle at 30% 70%, #ffecd2, #fcb69f);
          }
          
          .radial-taille {
            background: radial-gradient(ellipse farthest-corner at center, #a8edea, #fed6e3);
          }
            
✅ Formes : circle, ellipse
✅ Position : at center, at 20% 80%
✅ Taille : closest-side, farthest-corner, etc.
✅ Idéal pour les effets de lumière, bulles, points de focus.

7. 🌀 Dégradé conique — conic-gradient

          style.css
          .conic-simple {
            background: conic-gradient(red, yellow, blue);
            border-radius: 50%;
          }
          
          .conic-angle {
            background: conic-gradient(from 90deg, #ff9a9e 0%, #fecfef 50%, #ff9a9e 100%);
            border-radius: 50%;
          }
          
          .conic-pie {
            background: conic-gradient(
              red 0% 25%,
              blue 25% 50%,
              green 50% 75%,
              yellow 75% 100%
            );
            border-radius: 50%;
          }

          index.html
          <div class="conic-simple">Conique simple</div>
          <div class="conic-angle">Conique angle</div>
          <div class="conic-pie">Conique pie</div>
            
✅ Parfait pour les camemberts, roues de couleurs, loaders, pie charts.
✅ Syntaxe : conic-gradient([from angle]? [color start% end%]?)
✅ Contrôle précis des segments avec red 0% 25% → de 0 à 25% = rouge.
✅ Support moderne → vérifie avec caniuse.com.

8. 🔄 Dégradés répétés — repeating-*

          style.css
          .repeating-linear {
            background: repeating-linear-gradient(
              45deg,
              #606c88,
              #606c88 10px,
              #3f4c6b 10px,
              #3f4c6b 20px
            );
          }
          
          .repeating-radial {
            background: repeating-radial-gradient(
              circle at center,
              #ff6b6b,
              #ff6b6b 10px,
              #ffeaa7 10px,
              #ffeaa7 20px
            );
          }
          
          .repeating-conic {
            background: repeating-conic-gradient(
              from 0deg,
              #ff9a9e 0% 10%,
              #fecfef 10% 20%
            );
            border-radius: 50%;
          }

          index.html
          <div class="repeating-linear">Dégradé répété linéaire</div>
          <div class="repeating-radial">Dégradé répété radial</div>
          <div class="repeating-conic">Dégradé répété conique</div>
            
✅ Crée des motifs rayés, ciblés, ou en camembert répétés.
✅ Très léger → pas besoin d’image → parfait pour les backgrounds décoratifs.
✅ Combine avec background-size pour contrôler la répétition.

9. 🧩 Arrière-plans multiples — superposition d’images/dégradés

          style.css
          .fond-multiple {
            background: 
              linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), /* overlay noir semi-transparent */
              url('https://images.pexels.com/photos/1103970/pexels-photo-1103970.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1');
            background-size: cover;
            background-position: center;
            width: 300px;
            height: 200px;
            color: white;
            padding: 20px;
            text-align: center;
          }

          index.html
          <div class="fond-multiple">Texte par-dessus fond + overlay</div>
            
Texte par-dessus fond + overlay
✅ Sépare les fonds par des virgules → le premier est au-dessus.
✅ Combine dégradés + images → très utile pour les “hero sections”.
✅ Chaque fond peut avoir ses propres background-size, position, etc. → sépare aussi par virgules.

10. 🎨 Modes de fusion — background-blend-mode

          style.css
          .blend-mode {
            background: 
              radial-gradient(circle, rgba(255,0,0,0.8), transparent),
              linear-gradient(45deg, blue, green);
            background-blend-mode: multiply; /* ou screen, overlay, darken, lighten... */
            width: 300px;
            height: 150px;
          }

          index.html
          <div class="blend-mode">Texte par-dessus fond + overlay</div>
            
background-blend-mode → mélange les couches de fond entre elles.
✅ Valeurs : multiply, screen, overlay, darken, lighten, etc.
✅ Très puissant pour des effets artistiques, mais peut être gourmand.
✅ Différent de mix-blend-mode (qui mélange avec le contenu au-dessus).

11. 💡 Bonnes Pratiques Backgrounds & Gradients

  • Performance : préfère les dégradés CSS aux images → chargement instantané, redimensionnement fluide.
  • Accessibilité : vérifie le contraste texte/fond → surtout avec dégradés ou images.
  • Responsive : utilise background-size: cover + background-position: center pour les images hero.
  • Dégradés : utilise transparent pour des effets de fondu ou superposition.
  • Debug : ajoute temporairement une bordure ou un outline pour voir les limites de la boîte.
  • Modern CSS : explore color-mix(), accent-color, @property pour des contrôles avancés.

12. 📊 Récapitulatif Complet — Propriétés Backgrounds

Propriété Valeurs courantes Description
color #ff0000, rgb(), hsl(), lab() Couleur du texte
background-color blue, hsla(), transparent Couleur de fond
background-image url(), linear-gradient(), radial-gradient() Image ou dégradé
background-repeat repeat, no-repeat, repeat-x Répétition de l’image
background-size cover, contain, 100% 100% Redimensionnement
background-position center, top left, 50% 25% Positionnement
background-origin padding-box, border-box, content-box Où commence le fond
background-clip border-box, padding-box, content-box, text Où le fond est visible
background-blend-mode multiply, screen, overlay Mélange des fonds
linear-gradient() to right, red, blue Dégradé linéaire
radial-gradient() circle, red, blue Dégradé radial
conic-gradient() from 0deg, red, blue Dégradé conique
repeating-linear-gradient() 45deg, red, red 10px, blue 10px, blue 20px Dégradé linéaire répété
🎉 Félicitations ! Tu maîtrises maintenant les arrière-plans et dégradés CSS dans leur totalité.
Tu peux créer des interfaces riches, modernes et performantes — sans dépendre des images.
→ Joue avec les conic-gradients, les blend modes, les background-clip text, et crée des designs uniques.
Le fond n’est pas qu’un décor — c’est une émotion, une ambiance, une expérience. 🌅🎨

📦 Le Modèle de Boîte CSS — Guide Complet & Avancé

Chaque élément HTML est une boîte. Le box model contrôle son contenu, son padding, sa bordure, sa marge, et même son ombre ou son contour. Voici TOUT ce que tu dois maîtriser pour contrôler l’espace comme un pro.

1. 🖊️ Bordures (border) — styles, couleurs, arrondis

          style.css
          .bordure-complete {
            border: 4px dashed #ff5722;
            border-radius: 12px;           /* coins arrondis */
            width: 180px;
            height: 100px;
            text-align: center;
            line-height: 100px;
          }
          
          .bordure-côtés {
            border-top: 3px solid #4caf50;
            border-bottom: 6px double #2196f3;
            border-radius: 0 0 20px 20px;
            width: 180px;
            height: 100px;
            text-align: center;
            line-height: 100px;
          }
        
          index.html
          <div class="bordure-complete">Bordure pointillée</div>
          <div class="bordure-côtés">Bordures top/bottom</div>
            
Bordure pointillée
Bordures top/bottom
✅ Syntaxe : border: [épaisseur] [style] [couleur];
✅ Styles : solid, dashed, dotted, double, groove, ridge, inset, outset.
border-radius → coins arrondis (ex: 10px, 50% pour un cercle).
✅ Tu peux cibler chaque côté : border-top, border-left, etc.

2. 🎨 Bordure avec image (border-image)

          style.css
          .bordure-image {
            border: 20px solid transparent;
            border-image: url('https://via.placeholder.com/100') 30 round;
            width: 180px;
            height: 100px;
            text-align: center;
            line-height: 100px;
          }
        
          index.html
          <div class="bordure-image">Bordure image</div>
            
Bordure image
border-image → utilise une image pour la bordure.
✅ Syntaxe : url() [slice] [repeat/stretch/round]
✅ Très décoratif, mais à utiliser avec parcimonie (performance, accessibilité).

3. 📏 Marges (margin) — collapse, auto, négatives

          style.css
          .marge-auto {
            margin: 0 auto;                /* centrage horizontal */
            width: 150px;
            height: 60px;
            background: #e3f2fd;
            text-align: center;
            line-height: 60px;
          }
          
          .marge-negative {
            margin-top: -20px;
            margin-left: 30px;
            width: 150px;
            height: 60px;
            background: #ffecb3;
            text-align: center;
            line-height: 60px;
          }
          
          .marge-collapse {
            margin-top: 40px;
            margin-bottom: 20px;
            background: #c8e6c9;
            padding: 10px;
          }
          
          .marge-collapse + .marge-collapse {
            margin-top: 30px; /* ne sera PAS ajouté → collapse avec le margin-bottom du précédent */
          }
          
          index.html
          <div class="marge-auto">Centré avec margin: auto</div>
          <div class="marge-negative">Marge négative</div>
          <div class="marge-collapse">Marge 40px top / 20px bottom</div>
          <div class="marge-collapse">Marge 40px top / 20px bottom</div>
            
Centré avec margin: auto
Marge négative
Marge 40px top / 20px bottom
Marge top 30px → COLLAPSE avec le 20px du dessus → résultat = 40px max
margin: 0 auto; → centre horizontalement un élément de largeur fixe.
margin négative → permet de superposer ou rapprocher des éléments.
Margin collapse → quand deux marges verticales se touchent, seule la plus grande est appliquée (uniquement pour les éléments en bloc).
✅ Pas de collapse sur les marges horizontales, ni sur les éléments flex/grid/inline-block.

4. 🧩 Padding (espacement interne)

          style.css
          .padding-raccourci {
            padding: 10px 20px 30px 40px; /* top, right, bottom, left */
            background: #f3e5f5;
            width: 200px;
            text-align: center;
          }
          
          .padding-responsive {
            padding: 2rem 5vw;            /* unités fluides */
            background: #e8f5e8;
            text-align: center;
          }
          
          index.html
          <div class="padding-raccourci">Padding 10/20/30/40</div>
          <div class="padding-responsive">Padding fluide (2rem + 5vw)</div>
            
Padding 10/20/30/40
Padding fluide (2rem + 5vw)
✅ Raccourci :
  → padding: 10px; → tous les côtés
  → padding: 10px 20px; → vertical / horizontal
  → padding: 10px 20px 30px; → top / horizontal / bottom
  → padding: 10px 20px 30px 40px; → top / right / bottom / left
✅ Utilise rem, %, vw pour du padding responsive.

5. 🖼️ Outline — contour d’accessibilité

          style.css
          .outline-custom {
            outline: 4px dotted #ff9800;
            outline-offset: 8px;          /* décalage du contour */
            width: 180px;
            height: 80px;
            background: #fff;
            text-align: center;
            line-height: 80px;
            border: 2px solid #ddd;
          }
          
          index.html
          <div class="outline-custom">Contour outline</div>
            
Contour outline
outline → contour dessiné autour de la bordure, n’affecte PAS le layout.
outline-offset → décale le contour vers l’extérieur.
✅ Très utilisé pour les états de focus (accessibilité clavier) → ne le supprime jamais sans alternative.
✅ Ne prend pas de place → pas de “margin collapse” ou décalage de layout.

6. 🌑 Ombre de boîte (box-shadow)

          style.css
          .ombre-simple {
            box-shadow: 5px 5px 10px rgba(0,0,0,0.3);
            width: 180px;
            height: 80px;
            background: white;
            text-align: center;
            line-height: 80px;
          }
          
          .ombre-interne {
            box-shadow: inset 0 0 15px rgba(0,0,0,0.2);
            width: 180px;
            height: 80px;
            background: white;
            text-align: center;
            line-height: 80px;
          }
          
          .ombre-multiple {
            box-shadow: 
              0 4px 8px rgba(0,0,0,0.2),
              0 8px 16px rgba(0,0,0,0.15),
              inset 0 2px 4px rgba(0,0,0,0.05);
            width: 180px;
            height: 80px;
            background: white;
            text-align: center;
            line-height: 80px;
          }
          
          index.html
          <div class="ombre-simple">Ombre externe</div>
          <div class="ombre-interne">Ombre interne</div>
          <div class="ombre-multiple">Ombres multiples</div>
            
Ombre externe
Ombre interne
Ombres multiples
✅ Syntaxe : box-shadow: [offsetX] [offsetY] [blur] [spread] [color] [inset?];
inset → ombre à l’intérieur.
✅ Empile plusieurs ombres séparées par des virgules → effets 3D, lueur, profondeur.
✅ N’affecte PAS le layout → pas de décalage, pas de scroll induit.

7. 📦 Box-sizing — le secret des layouts prévisibles

          style.css
          .content-box {
            box-sizing: content-box;      /* comportement par défaut */
            width: 150px;
            padding: 20px;
            border: 5px solid #f44336;
            background: #ffebee;
            text-align: center;
          }
          
          .border-box {
            box-sizing: border-box;       /* padding et border inclus dans width/height */
            width: 150px;
            padding: 20px;
            border: 5px solid #4caf50;
            background: #e8f5e8;
            text-align: center;
          }
          
          /* ✅ Recommandé : appliquer border-box à tout le site */
          *, *::before, *::after {
            box-sizing: border-box;
          }
          
          index.html
          <div class="content-box">content-box → largeur totale = 150 + 40 + 10 = 200px</div>
          <div class="border-box">border-box → largeur totale = 150px (padding et border inclus dedans)</div>
            
content-box → largeur totale = 150 + 40 + 10 = 200px
border-box → largeur totale = 150px (padding et border inclus dedans)
content-box (défaut) → width = contenu seulement. Padding et bordure s’ajoutent.
border-boxwidth = contenu + padding + bordure → prévisible, intuitif.
✅ Astuce pro : applique *, *::before, *::after { box-sizing: border-box; } au début de ton CSS → évite 90% des bugs de layout.

8. 📐 Dimensions fluides — min/max, calc()

          style.css
          .responsive-box {
            width: calc(100% - 40px);     /* calcule dynamiquement */
            max-width: 500px;             /* ne dépasse pas */
            min-height: 100px;            /* hauteur minimale */
            padding: 20px;
            border: 2px solid #9c27b0;
            background: #f3e5f5;
            text-align: center;
          }
          
          index.html
          <div class="responsive-box">Boîte fluide avec calc(), min-height, max-width</div>
            
Boîte fluide avec calc(), min-height, max-width
min-width / max-width → contrôle les limites responsives.
min-height / max-height → utile pour les cartes, sections, conteneurs dynamiques.
calc() → mélange unités : calc(100% - 2rem), calc(50vw + 100px) → très puissant.

9. 🔄 Comportement des boîtes — display

          style.css
          .block {
            display: block;
            width: 150px;
            height: 60px;
            background: #bbdefb;
            margin: 5px;
            text-align: center;
            line-height: 60px;
          }
          
          .inline {
            display: inline;
            width: 150px; /* ignoré ! */
            height: 60px; /* ignoré ! */
            background: #ffccbc;
            padding: 20px; /* partiellement respecté */
            margin: 20px;  /* ignoré verticalement */
          }
          
          .inline-block {
            display: inline-block;
            width: 150px;
            height: 60px;
            background: #c5e1a5;
            margin: 10px;
            text-align: center;
            line-height: 60px;
          }
          
          index.html
          <div class="block">Block</div>
          <span class="inline">Inline (largeur/hauteur ignorées)</span>
          <div class="inline-block">Inline-Block</div>
            
Block
Inline (largeur/hauteur ignorées)
Inline-Block
display: block; → prend toute la largeur, respecte width/height, margin/padding.
display: inline; → ne respecte PAS width/height, margin-top/bottom ignorées.
display: inline-block; → garde les propriétés de bloc, mais reste en ligne → parfait pour les icônes, boutons, cartes en ligne.

10. 💡 Bonnes Pratiques Box Model

  • Reset universel : *, *::before, *::after { box-sizing: border-box; } → indispensable.
  • Centrage : margin: 0 auto; pour centrer un bloc avec largeur définie.
  • Responsive : utilise max-width + padding: 2rem 5vw; → s’adapte à tous les écrans.
  • Accessibilité : ne supprime jamais outline sans fournir un remplacement visible au focus.
  • Performance : évite border-image lourd ou box-shadow blur excessif sur des éléments animés.
  • Debug : utilise temporairement outline: 1px solid red; pour visualiser les boîtes sans affecter le layout.

11. 📊 Récapitulatif Complet — Propriétés Box Model

Propriété Valeurs courantes Description
width / height 200px, 50%, auto Dimensions de base
min-width / max-width 300px, 80vw Limites responsives
padding 10px, 1rem 2rem Espace intérieur
border 2px solid #000 Bordure (épaisseur/style/couleur)
border-radius 10px, 50% Coin arrondi
border-image url() 30 round Bordure avec image
margin 20px, 0 auto, -10px Espace extérieur
outline 2px dotted red Contour (accessibilité, debug)
outline-offset 5px Décalage du contour
box-shadow 2px 2px 5px #000, inset ... Ombre (externe/interne)
box-sizing content-box, border-box Mode de calcul des dimensions
display block, inline, inline-block Comportement de la boîte
calc() calc(100% - 40px) Calculs dynamiques
🎉 Félicitations ! Tu maîtrises maintenant le Box Model CSS dans sa totalité.
Tu peux contrôler chaque pixel autour et à l’intérieur de tes éléments — avec précision, fluidité et intention.
→ Applique border-box partout, joue avec les ombres, les marges négatives, les calc(), et crée des layouts solides.
Le box model, c’est la fondation. Maîtrise-la, et tout le reste devient facile. 🧱✨

📍 Positionnement CSS — Maîtriser static, relative, absolute, fixed, sticky

Le positionnement en CSS permet de contrôler précisément où les éléments apparaissent à l’écran. Chaque type de positionnement a un comportement unique et des cas d’usage spécifiques.

1. 🧱 Positionnement static (par défaut)

          style.css
          .box-static {
            position: static; /* Valeur par défaut - inutile de l'écrire */
            top: 50px;        /* IGNORÉ */
            left: 50px;       /* IGNORÉ */
            background: #e0e0e0;
            padding: 20px;
            border: 2px solid #9e9e9e;
          }
          
          index.html
          <div class="box-static">
            Box STATIC → les propriétés top/left sont ignorées.
          </div>
            
Box STATIC → les propriétés top/left sont ignorées.
position: static; → comportement normal du flux de document.
✅ Les propriétés top, right, bottom, left, z-index n’ont aucun effet.
✅ C’est la valeur par défaut de tous les éléments → tu n’as jamais besoin de l’écrire.

2. 🧭 Positionnement relative — décalage sans quitter le flux

          style.css
          .box-relative {
            position: relative;
            top: 20px;
            left: 30px;
            background: #bbdefb;
            padding: 20px;
            border: 2px solid #2196f3;
          }

          index.html
          <div class="box-relative">
            Box RELATIVE → décalée de 20px vers le bas et 30px à droite, mais l’espace d’origine est conservé.
          </div>

            
Box RELATIVE → décalée de 20px vers le bas et 30px à droite, mais l’espace d’origine est conservé.

→ L’espace vide ci-dessus est réservé pour la position d’origine.

position: relative; → l’élément reste dans le flux normal, mais peut être décalé avec top/left.
✅ L’espace qu’il occupait initialement est conservé → pas de décalage des autres éléments.
✅ Très utile comme conteneur de référence pour les éléments absolute enfants.

3. 🎯 Positionnement absolute — hors flux, relatif à l’ancêtre positionné

          style.css
          .container-relative {
            position: relative;
            height: 200px;
            background: #ffe0b2;
            padding: 20px;
            border: 2px solid #ff9800;
          }
          
          .box-absolute {
            position: absolute;
            top: 20px;
            right: 20px;
            background: #ffccbc;
            padding: 15px;
            border: 2px solid #f44336;
          }
          
          index.html
          <div class="container-relative">
            <div class="box-absolute">
              Box ABSOLUTE → positionnée en haut à droite du conteneur relatif.
            </div>
          </div>
            
Box ABSOLUTE → positionnée en haut à droite du conteneur relatif.

Conteneur avec position: relative; → sert de référence à l’élément absolute.

position: absolute; → sort l’élément du flux normal → les autres éléments l’ignorent.
✅ Se positionne par rapport au parent positionné le plus proche (relative, absolute, fixed, sticky).
✅ Si aucun parent positionné → se positionne par rapport à la fenêtre (viewport).
✅ Idéal pour : tooltips, badges, menus déroulants, modales, icônes de décorations.

4. 📌 Positionnement fixed — toujours visible, même en scroll

          style.css
          .box-fixed {
            position: fixed;
            bottom: 20px;
            right: 20px;
            background: #c8e6c9;
            padding: 15px;
            border: 2px solid #4caf50;
            z-index: 1000; /* pour rester au-dessus des autres éléments */
          }
          
          index.html
          <div class="box-fixed">
            Box FIXED → toujours en bas à droite, même en scrollant.
          </div>
            
Box FIXED → toujours en bas à droite, même en scrollant.

Scrolle vers le bas → la boîte verte reste fixe dans le coin de la fenêtre !

position: fixed; → toujours positionné par rapport à la fenêtre du navigateur.
✅ Ne bouge pas en scrollant → parfait pour : boutons “haut de page”, chat flottant, barres de navigation fixes.
✅ Utilise z-index pour contrôler la superposition.
⚠️ Attention : peut cacher du contenu → pense à ajouter des marges/paddings dans le body.

5. 📎 Positionnement sticky — colle quand tu scroll

          style.css
          .box-sticky {
            position: sticky;
            top: 10px; /* colle quand le bord supérieur atteint 10px du haut de la zone de défilement */
            background: #ffecb3;
            padding: 15px;
            border: 2px solid #ffc107;
            z-index: 10;
          }
          
          .scroll-container {
            height: 200px;
            overflow-y: scroll;
            border: 2px solid #ff9800;
            padding: 20px;
            background: #fff3e0;
          }
          
          index.html
          <div class="scroll-container">
            <div class="box-sticky">
              Box STICKY → devient fixe quand tu scroll et qu’elle atteint 10px du haut.
            </div>
          </div>
            

Contenu avant (scroll pour voir l’effet sticky)...

----------

Box STICKY → devient fixe quand tu scroll et qu’elle atteint 10px du haut.

Contenu après → scroll encore...

Fin du conteneur.

position: sticky; → se comporte comme relative jusqu’à un seuil de scroll, puis comme fixed.
✅ Très utile pour : en-têtes de tableau, barres de navigation dans une section, titres collants.
✅ Doit être dans un conteneur avec défilement (ou le body).
✅ Nécessite une valeur comme top, bottom, etc.

6. 🧊 Contexte d’empilement (stacking context) & z-index

          style.css
          .parent {
            position: relative;
            z-index: 1; /* crée un contexte d'empilement */
          }
          
          .child {
            position: absolute;
            z-index: 10; /* 10 est relatif au parent, pas à la page ! */
          }
          
          .other-element {
            position: relative;
            z-index: 2; /* sera au-dessus du parent, mais pas des enfants du parent */
          }
          
          index.html
          <div class="parent">
            <div class="child">
              Enfant (z-index: 10) → au-dessus du parent, mais dans son contexte
            </div>
          </div>
          <div class="other-element">
            Autre élément (z-index: 2) → au-dessus du parent, mais en dessous de l’enfant si chevauchement
          </div>
            
Parent (z-index: 1)
Enfant (z-index: 10) → au-dessus du parent, mais dans son contexte
Autre élément (z-index: 2) → au-dessus du parent, mais en dessous de l’enfant si chevauchement
z-index ne fonctionne que sur les éléments positionnés (non-static).
z-index crée un contexte d’empilement → les enfants sont comparés entre eux, pas avec le reste de la page.
✅ Éléments sans z-index → empilés par ordre d’apparition dans le DOM.
✅ Astuce : utilise des valeurs comme 10, 100, 1000 → laisse de la place pour les ajustements.

7. 🔄 Propriété raccourcie : inset (CSS moderne)

          style.css
          .box-inset {
            position: absolute;
            inset: 10px; /* = top:10px; right:10px; bottom:10px; left:10px; */
            /* inset: 10px 20px; → vertical/horizontal */
            /* inset: 10px 20px 30px 40px; → top/right/bottom/left */
            background: #e8eaf6;
            border: 2px solid #3f51b5;
            padding: 10px;
          }
          
          index.html
          <div class="box-inset">
            Box avec inset: 10px; → remplit tout le conteneur avec 10px de marge.
          </div>
            
Box avec inset: 10px; → remplit tout le conteneur avec 10px de marge.
inset → raccourci moderne pour top/right/bottom/left.
✅ Syntaxe :
  → inset: 10px; → tous les côtés
  → inset: 10px 20px; → vertical / horizontal
  → inset: 10px 20px 30px 40px; → top / right / bottom / left
✅ Support moderne → vérifie sur caniuse.com.

8. 💡 Bonnes Pratiques Positionnement CSS

  • Évite les abus d’absolute/fixed → casse le flux, difficile à rendre responsive.
  • Utilise relative comme parent → pour contrôler le positionnement des enfants absolute.
  • sticky = magie UX → parfait pour les headers de sections, tableaux, filtres.
  • z-index : utilise une échelle → 10 (modals), 100 (dropdowns), 1000 (toast notifications).
  • Teste sur mobile → fixed/sticky peuvent se comporter différemment (adresses bar, gestures).
  • Debug visuel → ajoute temporairement des bordures colorées pour voir les boîtes et leurs contextes.

9. 📊 Récapitulatif Complet — Types de Positionnement

Valeur Dans le flux ? Référence Cas d’usage
static Oui Aucune Comportement par défaut
relative Oui Position initiale Décalage léger, parent pour absolute
absolute Non Ancêtre positionné Tooltips, badges, modales internes
fixed Non Viewport (fenêtre) Navbar fixe, bouton flottant
sticky Oui (puis non) Conteneur scrollable Headers collants, filtres, titres
🎉 Félicitations ! Tu maîtrises maintenant le positionnement CSS dans sa totalité.
Tu peux placer n’importe quel élément exactement où tu veux — sans casser le layout, ni sacrifier le responsive.
→ Utilise relative comme parent, absolute pour les décos, fixed pour les outils globaux, sticky pour l’UX.
Le positionnement, c’est l’art de contrôler l’espace — sans sacrifier la structure. 🧭✨

🎛️ CSS Variables — Variables personnalisées (--variable)

Les variables CSS (aussi appelées “Custom Properties”) permettent de stocker des valeurs réutilisables : couleurs, espacements, polices, etc. Elles rendent ton CSS modulaire, maintenable, et dynamique — surtout en combinaison avec JavaScript.

1. 🧱 Déclaration et utilisation — :root et var()

          style.css
          :root {
            --primary-color: #2196f3;
            --spacing-unit: 16px;
            --font-main: "Arial", sans-serif;
          }
          
          .button {
            background: var(--primary-color);
            padding: var(--spacing-unit);
            font-family: var(--font-main);
            color: white;
            border: none;
            border-radius: 4px;
          }
          
          .card {
            background: white;
            padding: var(--spacing-unit);
            margin-bottom: var(--spacing-unit);
            border: 1px solid var(--primary-color);
          }
          
          index.html
          <button class="button">Bouton avec variables CSS</button>
          <div class="card">Carte avec variables CSS → même espacement et couleur que le bouton.</div>
            
Carte avec variables CSS → même espacement et couleur que le bouton.
✅ Déclare avec --nom-variable: valeur;
✅ Utilise avec var(--nom-variable)
:root = pseudo-classe qui cible l’élément racine () → variables globales.
✅ Idéal pour : couleurs de thème, tailles de police, espacements, breakpoints, ombres, etc.

2. 🌍 Portée et héritage — variables locales à un composant

          style.css
          .theme-dark {
            --bg-color: #333;
            --text-color: #f5f5f5;
            --border-color: #555;
            background: var(--bg-color);
            color: var(--text-color);
            padding: 20px;
            border: 2px solid var(--border-color);
          }
          
          .theme-light {
            --bg-color: #f9f9f9;
            --text-color: #333;
            --border-color: #ddd;
            background: var(--bg-color);
            color: var(--text-color);
            padding: 20px;
            border: 2px solid var(--border-color);
          }
          
          index.html
          <div class="theme-dark">Thème sombre → variables locales à ce conteneur.</div>
          <div class="theme-light">Thème clair → variables locales à ce conteneur.</div>
            
Thème sombre → variables locales à ce conteneur.
Thème clair → autres variables locales.
✅ Les variables CSS héritent → un enfant peut utiliser les variables de son parent.
✅ Tu peux redéfinir une variable dans un sélecteur → elle sera locale à cet élément et ses enfants.
✅ Parfait pour créer des thèmes de composants (dark/light, success/warning, etc.).

3. 🔄 Fallback — valeur de secours avec var(--variable, fallback)

          style.css
          .button-safe {
            background: var(--button-color, #9e9e9e); /* gris par défaut si --button-color n'existe pas */
            color: var(--text-color, white);
            padding: 12px 24px;
            border: none;
          }
          
          index.html
          <button class="button-safe">Bouton sans variable définie → fallback gris</button>
          <button class="button-safe" style="--button-color: #ff5722;">Bouton avec --button-color → orange vif</button>
            
✅ Syntaxe : var(--nom, valeur-par-défaut)
✅ Très utile pour éviter les bugs si une variable est manquante.
✅ Peut servir pour créer des composants “optionnels” → ex: var(--border-radius, 4px).

4. ⚡ Contrôle dynamique avec JavaScript

          style.css
          .dynamic-theme {
            background: var(--bg-dynamic, #e0e0e0);
            color: var(--text-dynamic, #333);
            padding: 30px;
            text-align: center;
            transition: background 0.3s, color 0.3s;
          }
          
          index.html
          <div id="theme-box">Change le thème avec les boutons ci-dessous 👇</div>
            
Change le thème avec les boutons ci-dessous 👇
✅ En JavaScript :
  → element.style.setProperty('--ma-variable', 'nouvelle-valeur');
✅ Tu peux modifier les variables en temps réel → sans toucher aux classes ou au HTML.
✅ Parfait pour : changement de thème, personnalisation utilisateur, animations pilotées par JS.

5. 🎨 Calculs dynamiques — variables + calc()

          style.css
          :root {
            --base-spacing: 8px;
            --gutter: calc(var(--base-spacing) * 2);
            --max-width: calc(100% - var(--gutter) * 2);
          }
          
          .container {
            max-width: var(--max-width);
            margin: 0 auto;
            padding: var(--gutter);
            background: #e3f2fd;
            border: 2px solid #2196f3;
          }
          
          index.html
          <div class="container">Conteneur avec espacement et largeur calculés via variables + calc().</div>
            
Conteneur avec espacement et largeur calculés via variables + calc()
✅ Tu peux utiliser les variables dans calc() → pour des calculs dynamiques.
✅ Ex: calc(var(--espacement) * 3), calc(100vw - var(--sidebar-width)).
✅ Très puissant pour les layouts responsives, grilles, espacements modulaires.

6. 🧩 Variables dans les animations (avec @property pour les interpolations)

          style.css
          @property --hue {
            syntax: "";
            inherits: false;
            initial-value: 0;
          }
          
          .animated-hue {
            --hue: 0;
            background: hsl(var(--hue), 100%, 50%);
            padding: 30px;
            color: white;
            text-align: center;
            animation: changeHue 5s infinite linear;
          }
          
          @keyframes changeHue {
            to {
              --hue: 360;
            }
          }
          
          index.html
          <div class="animated-hue">Animation de teinte via variable CSS animée (avec @property)</div>
            
Animation de teinte via variable CSS animée (avec @property)
✅ Depuis 2023, tu peux animer les variables CSS grâce à @property.
✅ Déclare le type de la variable (syntax) → pour permettre l’interpolation.
✅ Sans @property, les variables ne s’animent pas (changement brutal).
✅ Support : Chrome, Edge, Safari 16.4+, Firefox (derrière flag).
💡 Astuce : utilise pour animer des ombres, dégradés, positions, filtres, etc.

7. 📱 Responsive — Redéfinir les variables dans les media queries

          style.css
          :root {
            --font-size: 16px;
            --container-padding: 20px;
          }
          
          @media (min-width: 768px) {
            :root {
              --font-size: 18px;
              --container-padding: 40px;
            }
          }
          
          .responsive-box {
            font-size: var(--font-size);
            padding: var(--container-padding);
            background: #fff3e0;
            border: 2px solid #ff9800;
            text-align: center;
          }
            
Redimensionne la fenêtre → la taille de police et le padding changent sur tablette/desktop.
✅ Redéfinis les variables dans les @media → tout ce qui utilise ces variables s’adapte automatiquement.
✅ Beaucoup plus propre que de réécrire tous les styles.
✅ Centralise tes breakpoints → ex: --bp-tablet: 768px; puis @media (min-width: var(--bp-tablet)).

8. 💡 Bonnes Pratiques Variables CSS

  • Nommage clair--primary-color, --spacing-md, --border-radius-lg.
  • Organise en sections → couleurs, typographie, espacement, effets, thèmes.
  • Utilise :root pour les globales, et des classes pour les locales (thèmes, composants).
  • Fallback toujoursvar(--color, #000) → évite les surprises.
  • Combine avec HSL → pour modifier teinte, saturation, luminosité dynamiquement via JS.
  • Debug → dans DevTools, tu peux modifier les variables en temps réel → très puissant !

9. 📊 Récapitulatif Complet — Syntaxe & Concepts

Concept Syntaxe Description
Déclaration --ma-var: #ff0000; Dans n’importe quel sélecteur
Utilisation color: var(--ma-var); Applique la valeur stockée
Fallback var(--ma-var, #000) Valeur par défaut si non définie
Portée :root ou sélecteur local Héritage : enfants peuvent les utiliser
JS element.style.setProperty('--ma-var', 'blue'); Modification dynamique
calc() width: calc(var(--base) * 2); Calculs avec variables
Animation @property + @keyframes Interpolation de variables (moderne)
Media Queries @media { :root { --var: new; } } Responsive via redéfinition
🎉 Félicitations ! Tu maîtrises maintenant les variables CSS dans leur totalité.
Tu peux créer des designs systématiques, modulaires, et dynamiques — prêts pour le thème sombre, la personnalisation utilisateur, et les animations avancées.
→ Déclare dans :root, utilise partout, modifie avec JS, anime avec @property.
Les variables CSS, c’est la colonne vertébrale d’un design system moderne. 🧬✨

🖼️ CSS Object-Fit & Object-Position — Contrôler les images dans leur conteneur

Quand tu mets une image () dans un conteneur de taille fixe, elle peut se déformer. object-fit et object-position permettent de contrôler son redimensionnement et son positionnement — sans déformation, comme avec background-size.

1. 🧱 Le problème : images déformées dans un conteneur fixe

style.css
.image-container {
  width: 200px;
  height: 150px;
  border: 2px solid #f44336;
  margin: 10px;
}

img {
  width: 100%;
  height: 100%;
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description">
</div>
  
❌ Sans object-fit, l’image est étirée ou écrasée pour remplir le conteneur → déformation.
✅ Solution : object-fit → préserve le ratio, comme background-size mais pour les balises .

2. 🎯 object-fit: cover — remplit le conteneur sans déformer

style.css
.img-cover {
  width: 100%;
  height: 100%;
  object-fit: cover; /* Remplit, déborde si nécessaire */
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description" class="img-cover">
</div>
  
object-fit: cover; → l’image remplit le conteneur en conservant son ratio → certaines parties peuvent être rognées.
✅ Idéal pour : avatars, galeries, carrousels, cards, hero sections.
✅ Équivalent de background-size: cover; mais pour les .

3. 📦 object-fit: contain — montre toute l’image, sans rognage

style.css
.img-contain {
  width: 100%;
  height: 100%;
  object-fit: contain; /* Contenu entier visible, peut laisser des espaces */
  background: #f5f5f5; /* pour voir les espaces */
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description" class="img-contain">
</div>
  
object-fit: contain; → l’image est entièrement visible, sans déformation → mais peut laisser des espaces vides.
✅ Idéal pour : logos, icônes, images où chaque détail compte (produits, schémas).
✅ Équivalent de background-size: contain;.

4. 🖌️ Autres valeurs : fill, scale-down, none

style.css
.img-fill {
  object-fit: fill; /* Étire pour remplir → déformation */
}

.img-scale-down {
  object-fit: scale-down; /* Comme none ou contain, selon la taille */
}

.img-none {
  object-fit: none; /* Garde taille originale, peut déborder */
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description" class="img-fill">
</div>
  
fill → déformé
scale-down → comme contain
none → taille originale, rogné
fill → étire l’image pour remplir → déformation (à éviter sauf cas très spécifiques).
scale-down → choisit entre none et contain selon ce qui rend l’image la plus petite.
none → garde la taille originale de l’image → peut déborder ou laisser de l’espace.
💡 Astuce : 90% du temps, tu utiliseras cover ou contain.

5. 📍 object-position — contrôler quelle partie de l’image est visible

style.css
.img-cover-top {
  object-fit: cover;
  object-position: top; /* ou center, bottom, left, 50% 20%, etc. */
}

.img-cover-bottom {
  object-fit: cover;
  object-position: bottom;
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description" class="img-cover-top">
</div>
  
object-position: top;
object-position: bottom;
object-position: 20% 70%;
object-position fonctionne comme background-position.
✅ Valeurs : center, top left, 50% 25%, etc.
✅ Très utile avec cover → pour choisir quelle partie de l’image reste visible (ex: visage dans un avatar).
✅ Combine avec JS pour un effet “parallax” ou suivi du curseur.

6. 🆚 Quand utiliser object-fit vs background-image ?

style.css
/* Avec background-image */
.bg-cover {
  width: 200px;
  height: 150px;
  background: url('image.jpg') center/cover no-repeat;
}

/* Avec  + object-fit */
description
.img-cover {
  width: 200px;
  height: 150px;
  object-fit: cover;
  object-position: center;
}

index.html
<div class="image-container">
  <img src="image.jpg" alt="description" class="img-cover">
</div>
  
Critère + object-fit background-image
✅ Accessibilité Oui → alt text Non → invisible aux lecteurs d’écran
✅ SEO Oui → les images sont crawlées Non → ignorées par les moteurs
✅ Chargement Prioritaire (contenu) Moins prioritaire (décoratif)
✅ JS / Manipulation Accès direct à l’élément Moins direct
✅ Responsive (srcset) Oui Non → une seule image
Utilise + object-fit quand :
  → L’image est du contenu (photo d’article, avatar utilisateur, produit).
  → Tu veux de l’accessibilité (alt text) et du SEO.
  → Tu veux utiliser srcset pour la performance responsive.

Utilise background-image quand :
  → L’image est décorative (fond de section, motif, décoration).
  → Tu n’as pas besoin d’alt text ou de SEO.
  → Tu veux superposer du texte facilement.

7. 💡 Bonnes Pratiques Object-Fit

  • Toujours un altdescription → accessibilité obligatoire.
  • Responsive → combine avec srcset pour charger la bonne image selon l’écran.
  • Dégradé de fond → ajoute un background: linear-gradient(...); à l’image → évite le vide pendant le chargement.
  • Lazy loading → performance sur les longues pages.
  • Debug → ajoute temporairement une bordure au conteneur pour voir ses limites.
  • object-position dynamique → modifie avec JS ou :hover pour des effets de suivi ou zoom.

8. 📊 Récapitulatif Complet — Propriétés & Valeurs

Propriété Valeurs Description
object-fit cover Remplit le conteneur, rogne si nécessaire (ratio conservé)
object-fit contain Montre toute l’image, ajoute des bandes si nécessaire
object-fit fill Étire pour remplir → déformation
object-fit none Taille originale, peut déborder
object-fit scale-down Comme none ou contain, selon la taille la plus petite
object-position center, top left, 50% 25% Positionne l’image dans le conteneur
🎉 Félicitations ! Tu maîtrises maintenant object-fit et object-position.
Tu peux afficher des images dans des conteneurs de taille fixe — sans déformation, avec contrôle précis du cadrage.
→ Préfère + object-fit: cover pour le contenu, background-image pour le décor.
Une image bien cadrée, c’est une image qui raconte une histoire — même dans un petit conteneur. 🖼️✨

📐 Mise en page avec CSS Flexbox

Flexbox est un module CSS qui permet de disposer facilement des éléments dans une ligne ou une colonne, de gérer l’alignement et l’espacement automatiquement.

1. 🧩 Container Flex

          style.css
          .container {
            display: flex;
            border: 2px solid black;
            padding: 10px;
          }
          
          .item {
            background-color: lightblue;
            margin: 5px;
            padding: 20px;
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
            
1
2
3
display: flex; transforme un conteneur en flexbox et aligne les éléments en ligne par défaut.

2. ↔️ Justification des éléments (justify-content)

          style.css
          .container {
            display: flex;
            justify-content: space-between;
            border: 2px solid black;
            padding: 10px;
          }
          
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
          </div>
            
A
B
C
justify-content contrôle l’espace horizontal entre les éléments : flex-start, center, flex-end, space-between, space-around.

3. ↕️ Alignement vertical (align-items)

          style.css
          .container {
            display: flex;
            align-items: center;
            height: 150px;
            border: 2px solid black;
          }
          
          .item {
            background-color: pink;
            margin: 5px;
            padding: 20px;
          }
          
          index.html
          <div class="container">
            <div class="item">X</div>
            <div class="item">Y</div>
            <div class="item">Z</div>
          </div>
            
X
Y
Z
align-items aligne les éléments verticalement dans le conteneur : flex-start, center, flex-end, stretch.

4. 🔄 Direction des éléments (flex-direction)

          style.css
          .container {
            display: flex;
            flex-direction: column;
            border: 2px solid black;
            padding: 10px;
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
            
1
2
3
flex-direction: column; place les éléments verticalement. Par défaut, les éléments sont alignés horizontalement (row).

5. 📝 Exemple complet

          style.css
          .container {
            display: flex;
            flex-direction: row;
            justify-content: space-around;
            align-items: center;
            border: 2px solid black;
            padding: 10px;
            height: 150px;
          }
          
          .item {
            background-color: lightseagreen;
            padding: 20px;
            margin: 5px;
          }
          
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
          </div>
            
A
B
C
✅ Flexbox permet de créer des mises en page flexibles et responsives très facilement, en combinant :
  • direction des éléments (flex-direction)
  • espacement horizontal (justify-content)
  • alignement vertical (align-items)

✨ Flexbox Complet : Maîtrise Totale de la Mise en Page Flexible

Flexbox ne se limite pas à justify-content ou align-items. Voici TOUT ce que tu dois savoir pour dominer les layouts modernes.

6. 🔄 Gestion du retour à la ligne (flex-wrap)

          style.css
          .container {
            display: flex;
            flex-wrap: wrap; /* Permet aux éléments de passer à la ligne */
            width: 300px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item {
            background-color: #ffcc80;
            margin: 5px;
            padding: 20px;
            min-width: 100px; /* Forcer un minimum pour tester le wrap */
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
          </div>
            
1
2
3
4
flex-wrap: wrap; permet aux éléments de passer à la ligne si le conteneur est trop étroit.
Valeurs : nowrap (défaut), wrap, wrap-reverse.

7. 🎯 Raccourci direction + wrap (flex-flow)

          style.css
          .container {
            display: flex;
            flex-flow: column wrap; /* = flex-direction + flex-wrap */
            height: 200px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item {
            background-color: #a5d6a7;
            margin: 5px;
            padding: 20px;
            min-height: 80px;
          }
          
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
            <div class="item">D</div>
          </div>
            
A
B
C
D
flex-flow est un raccourci pour flex-direction + flex-wrap.
Ex: flex-flow: row wrap; ou flex-flow: column nowrap;.

8. 📏 Alignement des lignes (align-content)

          style.css
          .container {
            display: flex;
            flex-wrap: wrap;
            align-content: space-between; /* Espace entre les lignes */
            height: 300px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item {
            background-color: #bbdefb;
            margin: 5px;
            padding: 20px;
            min-width: 120px;
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
            <div class="item">5</div>
          </div>
            
1
2
3
4
5
align-content gère l’espace entre les lignes (quand il y a plusieurs lignes avec flex-wrap).
Fonctionne comme justify-content mais verticalement : flex-start, center, space-between, etc.
⚠️ N’a aucun effet si une seule ligne (pas de wrap).

9. 🧭 Réorganiser visuellement (order)

          style.css
          .container {
            display: flex;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item:nth-child(1) { order: 3; }
          .item:nth-child(2) { order: 1; }
          .item:nth-child(3) { order: 2; }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
            
1 (affiché 3e)
2 (affiché 1er)
3 (affiché 2e)
order change l’ordre d’affichage visuel (sans modifier le DOM).
Valeur par défaut : 0. Plus le chiffre est bas, plus l’élément est en premier.

10. ➕ Croissance flexible (flex-grow)

          style.css
          .container {
            display: flex;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item:nth-child(1) { flex-grow: 1; }
          .item:nth-child(2) { flex-grow: 2; } /* Prend 2x plus d’espace */
          .item:nth-child(3) { flex-grow: 1; }
           
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
        
1 (grow:1)
2 (grow:2)
3 (grow:1)
flex-grow définit comment l’élément occupe l’espace restant.
Valeur = ratio : si un élément a flex-grow: 2 et les autres 1, il prendra 2 fois plus d’espace.

11. ➖ Réduction flexible (flex-shrink)

          style.css
          .container {
            display: flex;
            width: 300px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item {
            min-width: 120px; /* Forcer un débordement */
          }
          
          .item:nth-child(1) { flex-shrink: 1; }
          .item:nth-child(2) { flex-shrink: 3; } /* Rétrécit 3x plus */
          .item:nth-child(3) { flex-shrink: 1; }
            
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
        
1 (shrink:1)
2 (shrink:3)
3 (shrink:1)
flex-shrink définit comment l’élément rétrécit s’il n’y a pas assez d’espace.
Valeur par défaut = 1. Plus la valeur est élevée, plus il rétrécit.

12. 📐 Taille de base (flex-basis)

          style.css
          .container {
            display: flex;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item:nth-child(1) { flex-basis: 50px; }
          .item:nth-child(2) { flex-basis: 150px; }
          .item:nth-child(3) { flex-basis: auto; }
            
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
        
1 (basis:50px)
2 (basis:150px)
3 (basis:auto)
flex-basis définit la taille initiale de l’élément avant que grow/shrink ne s’appliquent.
Peut être en px, %, auto (défaut = taille du contenu).

13. 🧩 Raccourci complet (flex)

          style.css
          .container {
            display: flex;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item:nth-child(1) { flex: 1 1 100px; } /* grow shrink basis */
          .item:nth-child(2) { flex: 2 1 50px; }
          .item:nth-child(3) { flex: 0 0 120px; } /* Ne grandit ni ne rétrécit */
            
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
          </div>
        
1
2
3
flex est un raccourci pour flex-grow flex-shrink flex-basis.
Ex: flex: 1 1 auto; (valeur par défaut)
Ex: flex: 0 0 200px; → taille fixe, ne grandit ni ne rétrécit.

14. 🎯 Alignement personnalisé par élément (align-self)

          style.css
          .container {
            display: flex;
            align-items: flex-start; /* Alignement par défaut */
            height: 150px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item:nth-child(2) {
            align-self: flex-end; /* Override pour cet élément */
          }
            
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
          </div>
            
A
B (align-self)
C
align-self permet de surcharger align-items pour un élément spécifique.
Mêmes valeurs : flex-start, center, baseline, stretch, etc.

15. 💡 Astuces Flexbox & Bonnes Pratiques

  • Centrer absolument : justify-content: center; align-items: center;
  • Espace égal autour : justify-content: space-around;
  • Responsive : Utilise flex-direction: column sur mobile + media queries.
  • Évite les bugs : Définis toujours un min-width: 0 ou overflow: hidden sur les éléments flex si tu as des problèmes de débordement.
  • flex: 1 = flex: 1 1 0% → très utile pour remplir l’espace restant.
  • flex: none = flex: 0 0 auto → taille fixe, ne grandit ni ne rétrécit.

🎯 Résumé Visuel des Propriétés

Propriété Appliquée à Valeurs courantes
display: flex Conteneur -
flex-direction Conteneur row, column, row-reverse, column-reverse
flex-wrap Conteneur nowrap, wrap, wrap-reverse
flex-flow Conteneur [direction] [wrap]
justify-content Conteneur flex-start, center, space-between, space-around, space-evenly
align-items Conteneur stretch, flex-start, center, baseline
align-content Conteneur stretch, center, space-between (multi-ligne uniquement)
order Élément 0, 1, 2...
flex-grow Élément 0, 1, 2...
flex-shrink Élément 0, 1, 2...
flex-basis Élément auto, 0, 100px, 50%
flex Élément 0 1 auto, 1 1 0%, none
align-self Élément auto, flex-start, center, stretch
🎉 Félicitations ! Tu maîtrises maintenant l’intégralité de Flexbox.
Tu peux créer n’importe quel layout moderne, responsive, et dynamique avec ces outils.
→ À toi de jouer : expérimente, combine, et crée des interfaces fluides et élégantes !

📐 Mise en page avec CSS Grid

CSS Grid est un système de mise en page puissant qui permet de placer les éléments dans des lignes et colonnes de façon précise.

1. 🏗️ Container Grid

          style.css
          .container {
            display: grid;
            grid-template-columns: 100px 100px 100px;
            grid-gap: 10px;
            border: 2px solid black;
            padding: 10px;
          }
          
          .item {
            background-color: lightblue;
            padding: 20px;
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
          </div>
            
1
2
3
4
display: grid; transforme le conteneur en grid. grid-template-columns définit le nombre et la taille des colonnes. grid-gap définit l’espace entre les cellules.

2. ➕ Lignes et colonnes automatiques

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            grid-gap: 10px;
          }
          
          .item {
            background-color: lightgreen;
            padding: 20px;
          }
          
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
            <div class="item">D</div>
          </div>
            
A
B
C
D
repeat(3, 1fr) crée 3 colonnes égales. 1fr = une fraction de l’espace disponible.

3. 🖼️ Placement d’éléments avec grid-area

          style.css
          .container {
            display: grid;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 50px 50px;
            grid-gap: 5px;
          }
          
          .item1 {
            grid-column: 1 / 3;  /* commence à la colonne 1, finit avant la colonne 3 */
            grid-row: 1 / 2;     /* ligne 1 */
            background-color: lightcoral;
            padding: 10px;
          }
          
          .item2 { background-color: lightblue; padding: 10px; }
          .item3 { background-color: lightgreen; padding: 10px; }
          
          index.html
          <div class="container">
            <div class="item1">1</div>
            <div class="item2">2</div>
            <div class="item3">3</div>
          </div>
            
1
2
3
grid-column et grid-row permettent de positionner précisément chaque élément sur la grille.

4. 📝 Exemple complet

          style.css
          .container {
            display: grid;
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: 50px 100px;
            grid-gap: 10px;
          }
          
          .item1 { grid-column: 1 / 4; background-color: lightcoral; padding: 10px; }
          .item2 { background-color: lightblue; padding: 10px; }
          .item3 { background-color: lightgreen; padding: 10px; }
          .item4 { background-color: lightpink; padding: 10px; }
          
          index.html
          <div class="container">
            <div class="item1">Header</div>
            <div class="item2">Sidebar</div>
            <div class="item3">Content</div>
            <div class="item4">Footer</div>
          </div>
            
Header
Sidebar
Content
Footer
✅ CSS Grid permet de créer des mises en page complexes, avec colonnes et lignes de tailles différentes, et de placer précisément chaque élément avec grid-column et grid-row.

✨ CSS Grid Complet : Maîtrise Totale des Grilles Modernes

CSS Grid va bien au-delà des colonnes fixes. Voici TOUT ce que tu dois savoir pour créer des layouts 2D puissants, réactifs et élégants.

5. 🧩 Placement visuel avec grid-template-areas

          style.css
          .container {
            display: grid;
            grid-template-areas:
              "header header header"
              "sidebar content content"
              "footer footer footer";
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: 60px 150px 60px;
            gap: 10px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .header { grid-area: header; background: #ffab91; }
          .sidebar { grid-area: sidebar; background: #a5d6a7; }
          .content { grid-area: content; background: #90caf9; }
          .footer { grid-area: footer; background: #fff59d; }
          
          .item { padding: 20px; text-align: center; }
          
          index.html
          <div class="container">
            <div class="item">Header</div>
            <div class="item">Sidebar</div>
            <div class="item">Content</div>
            <div class="item">Footer</div>
          </div>
            
Header
Sidebar
Content
Footer
grid-template-areas permet de nommer visuellement les zones de la grille.
Chaque nom correspond à un élément avec grid-area: [nom];
Très utile pour les layouts sémantiques (header, sidebar, main, footer...).

6. 📏 Unités Réactives : fr, minmax(), auto-fit

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
            gap: 15px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item {
            background-color: #e1bee7;
            padding: 20px;
            text-align: center;
          }
          
          index.html
          <div class="container">
            <div class="item">Card 1</div>
            <div class="item">Card 2</div>
            <div class="item">Card 3</div>
            <div class="item">Card 4</div>
            <div class="item">Card 5</div>
          </div>
            
Card 1
Card 2
Card 3
Card 4
Card 5
1fr = fraction de l’espace restant.
minmax(150px, 1fr) = taille min 150px, max 1 fraction.
auto-fit = ajuste automatiquement le nombre de colonnes en fonction de l’espace disponible → responsive sans media query !

7. 🎯 Alignement global dans les cellules

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(3, 100px);
            justify-items: center;   /* horizontal dans chaque cellule */
            align-items: end;        /* vertical dans chaque cellule */
            height: 150px;
            border: 2px solid #555;
            gap: 10px;
            padding: 10px;
          }
          
          .item {
            background-color: #c5e1a5;
            padding: 10px;
            text-align: center;
          }
          
          index.html
          <div class="container">
            <div class="item">A</div>
            <div class="item">B</div>
            <div class="item">C</div>
            <div class="item">D</div>
          </div>
            
A
B
C
D
justify-items → alignement horizontal à l’intérieur de chaque cellule (start, center, end, stretch).
align-items → alignement vertical dans chaque cellule.
place-items: center; → raccourci pour les deux.

8. 🔄 Alignement du conteneur (si espace libre)

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(2, 100px);
            justify-content: center;   /* aligne la grille HORIZONTALEMENT dans le conteneur */
            align-content: end;        /* aligne la grille VERTICALEMENT */
            width: 100%;
            height: 200px;
            border: 2px solid #555;
            gap: 10px;
            padding: 10px;
          }
          
          .item {
            background-color: #b39ddb;
            padding: 20px;
            text-align: center;
          }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
          </div>
            
1
2
3
4
justify-content → aligne la grille entière horizontalement dans le conteneur.
align-content → aligne la grille verticalement.
Utile quand la grille ne remplit pas tout le conteneur.

9. 🧭 Placement précis avec span, start, end

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            gap: 10px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item1 {
            grid-column: 2 / span 2; /* commence à 2, s'étend sur 2 colonnes */
            grid-row: 1;
            background: #ffcc80;
          }
          
          .item2 {
            grid-column: 1 / 5;      /* occupe toute la largeur */
            grid-row: 2;
            background: #81d4fa;
          }
          
          index.html
          <div class="container">
            <div class="item1">Item 1 (span 2)</div>
            <div class="item2">Item 2 (full width)</div>
          </div>
            
Item 1 (span 2)
Item 2 (full width)
grid-column: 2 / span 2; → commence à la colonne 2, s’étend sur 2 colonnes.
grid-column: 1 / -1; → occupe de la première à la dernière colonne (très utile pour les headers/footers).
grid-row: 1 / 3; → occupe les lignes 1 et 2.

10. 🌀 Contrôle du flux automatique (grid-auto-flow)

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(3, 100px);
            grid-auto-flow: row dense; /* remplit les trous */
            gap: 10px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item1 {
            grid-column: span 2;
            background: #a5d6a7;
          }
          
          .item3 {
            grid-row: span 2;
            background: #ffab91;
          }
          
          index.html
          <div class="container">
            <div class="item1">Item 1 (span 2)</div>
            <div class="item2">Item 2</div>
            <div class="item3">Item 3 (span 2 rows)</div>
            <div class="item4">Item 4</div>
          </div>
            
Item 1 (span 2)
Item 2
Item 3 (span 2 rows)
Item 4
Item 5
grid-auto-flow: row; → placement par défaut, ligne par ligne.
grid-auto-flow: column; → placement colonne par colonne.
grid-auto-flow: row dense; → remplit les trous laissés par les éléments étendus → évite les espaces vides.

11. 🧱 Grille Implicite (auto lignes/colonnes)

          style.css
          .container {
            display: grid;
            grid-template-columns: 100px 100px;
            grid-auto-rows: 60px;     /* hauteur des lignes auto-créées */
            grid-auto-columns: 80px;  /* largeur des colonnes auto-créées */
            gap: 10px;
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item5 {
            grid-column: 3; /* déclenche une colonne implicite */
            background: #f48fb1;
          }
          
          index.html
          <div class="container">
            <div class="item1">1</div>
            <div class="item2">2</div>
            <div class="item3">3</div>
            <div class="item4">4</div>
            <div class="item5">5</div>
          </div>
            
1
2
3
4
5 (colonne implicite)
✅ Quand un élément est placé en dehors de la grille définie, CSS Grid crée automatiquement des lignes ou colonnes implicites.
grid-auto-rows et grid-auto-columns permettent de contrôler leur taille.

12. 📐 Alignement par élément (justify-self, align-self)

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            align-items: start;
            justify-items: start;
            height: 150px;
            border: 2px solid #555;
            gap: 10px;
            padding: 10px;
          }
          
          .item2 {
            justify-self: end;
            align-self: end;
            background: #fff59d;
          }
          
          index.html
          <div class="container">
            <div class="item1">1</div>
            <div class="item2">2</div>
            <div class="item3">3</div>
          </div>
            
1
2 (self)
3
justify-self et align-self permettent de surcharger l’alignement pour un élément spécifique.
place-self: center; → raccourci pour les deux.

13. 🧩 Espacement avec gap (row-gap, column-gap)

          style.css
          .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 20px 10px; /* row-gap / column-gap */
            border: 2px solid #555;
            padding: 10px;
          }
          
          .item { background: #e0e0e0; padding: 20px; text-align: center; }
          
          index.html
          <div class="container">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
          </div>
           
        
1
2
3
4
gap remplace grid-gap (obsolète).
✅ Syntaxe : gap: [row-gap] [column-gap]; → si une seule valeur, s’applique aux deux.
✅ Supporte aussi row-gap et column-gap individuellement.

14. 💡 Astuces CSS Grid & Bonnes Pratiques

  • Centrer un élément : place-self: center; ou margin: auto; dans une cellule.
  • Layout responsive sans media query : grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  • Header/Footer full width : grid-column: 1 / -1;
  • Grille avec espacement interne : utilise padding sur le conteneur + gap entre les éléments.
  • Debug visuel : ajoute temporairement outline: 1px solid red; sur les items pour voir la grille.
  • Combinaison avec Flexbox : utilise Grid pour la structure globale, Flexbox pour l’alignement interne des cartes/boutons.

15. 📊 Récapitulatif Complet des Propriétés CSS Grid

Propriété Appliquée à Description
display: grid Conteneur Active le layout Grid
grid-template-columns Conteneur Définit les colonnes (1fr, 100px, repeat())
grid-template-rows Conteneur Définit les lignes
grid-template-areas Conteneur Définit un layout visuel avec noms de zones
gap Conteneur Espace entre les cellules (row-gap, column-gap)
justify-items Conteneur Alignement horizontal dans chaque cellule
align-items Conteneur Alignement vertical dans chaque cellule
justify-content Conteneur Alignement horizontal de la grille dans le conteneur
align-content Conteneur Alignement vertical de la grille dans le conteneur
grid-auto-flow Conteneur Contrôle le placement automatique (row, column, dense)
grid-auto-rows Conteneur Taille des lignes implicites
grid-auto-columns Conteneur Taille des colonnes implicites
grid-column Élément Positionnement horizontal (start / end, span)
grid-row Élément Positionnement vertical
grid-area Élément Zone nommée ou raccourci row-start / col-start / row-end / col-end
justify-self Élément Alignement horizontal individuel
align-self Élément Alignement vertical individuel
place-self Élément Raccourci align-self + justify-self
🚀 Tu es maintenant un maître de CSS Grid !
Tu peux créer n’importe quel layout — du plus simple au plus complexe — avec précision, flexibilité et élégance.
→ Combine Grid + Flexbox pour une puissance de mise en page absolue. Expérimente, joue, et crée sans limites !

📱 Responsive Design : Sites Adaptatifs pour Tous les Écrans

Le responsive design permet à ton site de s’adapter automatiquement à la taille de l’écran de l’utilisateur : mobile, tablette, desktop, TV, etc. Voici TOUT ce que tu dois maîtriser.

1. 📱 La balise magique :

          index.html
          
            
          
            
OBLIGATOIRE pour le responsive. Sans ça, ton site sera zoomé ou mal mis à l’échelle sur mobile.
width=device-width : largeur = largeur de l’écran.
initial-scale=1.0 : pas de zoom initial.

2. 📐 Unités Fluides (pas de px fixes !)

          style.css
          .container {
            width: 90%;          /* relatif au parent */
            max-width: 1200px;   /* mais ne dépasse pas 1200px */
            margin: 0 auto;
            padding: 2rem;       /* relatif à la taille de la police de base */
          }
          
          .title {
            font-size: 5vw;      /* 5% de la largeur de la fenêtre */
            margin-bottom: 2em;  /* relatif à la taille de la police du parent */
          }
          
          .full-height {
            height: 80vh;        /* 80% de la hauteur de la fenêtre */
          }
            
Titre en 5vw
Bloc en 30vh de hauteur
% → relatif au parent.
vw (viewport width) / vh (viewport height) → relatif à la taille de la fenêtre.
rem → relatif à la racine (html).
em → relatif au parent direct.
💡 Astuce : utilise max-width avec % pour éviter les débordements sur grand écran.

3. 📊 Media Queries : Adapter le style selon la taille d’écran

          style.css
          /* Mobile First : styles de base pour petits écrans */
          .card {
            width: 100%;
            padding: 1rem;
            margin-bottom: 1rem;
            background: #e3f2fd;
          }
          
          /* Tablettes (768px et +) */
          @media (min-width: 768px) {
            .card {
              width: 48%;
              display: inline-block;
              margin-right: 1%;
            }
          }
          
          /* Desktop (1024px et +) */
          @media (min-width: 1024px) {
            .card {
              width: 30%;
              margin-right: 1.5%;
            }
          }
            
Carte 1 (mobile)
Carte 2 (mobile)
Carte 3 (mobile)
👉 Réduis la largeur de ton navigateur pour voir les cartes s’empiler ou s’aligner !
✅ Syntaxe : @media (condition) { ... }
✅ Mobile First : commence par les petits écrans, puis ajoute des styles pour les grands avec min-width.
✅ Breakpoints courants :
  → Mobile : < 768px
  → Tablet : 768px - 1023px
  → Desktop : >= 1024px
  → Large Desktop : >= 1440px

4. 🔄 Adapter selon l’orientation (portrait/landscape)

          style.css
          .container {
            padding: 20px;
            background: #fff3e0;
          }
          
          @media (orientation: landscape) {
            .container {
              padding: 50px;
              background: #e8f5e8;
            }
          }
            
Change l’orientation de ton appareil ou redimensionne la fenêtre en mode paysage 🖥️
@media (orientation: portrait) ou landscape
Utile pour les tablettes, téléphones, ou applications en plein écran.

5. 🖼️ Images qui ne débordent jamais

          style.css
          img {
            max-width: 100%;    /* jamais plus large que le conteneur */
            height: auto;       /* conserve le ratio */
            display: block;     /* évite l’espace en dessous */
          }
          
          /* HTML moderne avec srcset (pour la performance) */
          index.html
          Image responsive
            
Exemple image
Cette image s’adapte à la largeur du conteneur
max-width: 100%; est ESSENTIEL pour les images.
srcset + sizes → charge l’image adaptée à la taille d’écran → gain de performance.
✅ Utilise aussi pour des images différentes selon le contexte (ex: dark mode, format webp).

6. 🧭 Philosophie : Mobile First (Recommandé !)

          /* ✅ MOBILE FIRST (commence petit, étends pour grand) */
          .nav { display: none; } /* caché par défaut sur mobile */
          
          @media (min-width: 768px) {
            .nav { display: block; } /* visible sur tablette+ */
          }
          
          /* ❌ DESKTOP FIRST (déconseillé) */
          .nav { display: block; } /* visible par défaut */
          
          @media (max-width: 768px) {
            .nav { display: none; } /* caché sur mobile */
          }
            
Mobile First = meilleure performance + meilleure UX.
→ Charge moins de CSS au départ.
→ Priorise l’expérience mobile (majorité du trafic).
→ Plus facile à maintenir.

7. 🧱 Typographie Fluide (pas de sauts brusques)

          style.css
          h1 {
            font-size: clamp(1.5rem, 4vw, 3rem);
            /* min, preferred, max */
          }
          
          /* OU avec calc + media queries */
          h2 {
            font-size: 1.8rem;
          }
          
          @media (min-width: 768px) {
            h2 {
              font-size: calc(1.8rem + 0.5 * (100vw - 768px) / 456);
            }
          }
            

Titre fluide avec clamp()

Réduis/agrandis la fenêtre → le titre s’adapte doucement.

clamp(min, preferred, max) → typographie fluide sans media query.
✅ Ex: clamp(1rem, 2.5vw, 2rem) → jamais moins de 1rem, jamais plus de 2rem, fluide entre les deux.
✅ Alternative : calc() + media queries pour un contrôle plus fin.

8. 🔄 Rendre Flexbox et Grid Responsive

          style.css
          .container {
            display: flex;
            flex-direction: column; /* mobile : colonne */
            gap: 1rem;
          }
          
          @media (min-width: 768px) {
            .container {
              flex-direction: row; /* tablette+ : ligne */
            }
          }
          
          /* Avec Grid */
          .grid {
            display: grid;
            grid-template-columns: 1fr; /* une colonne sur mobile */
            gap: 1rem;
          }
          
          @media (min-width: 768px) {
            .grid {
              grid-template-columns: repeat(2, 1fr); /* deux colonnes */
            }
          }
          
          @media (min-width: 1024px) {
            .grid {
              grid-template-columns: repeat(3, 1fr); /* trois colonnes */
            }
          }
            
Item 1
Item 2
Item 3
✅ Change flex-direction ou grid-template-columns dans les media queries.
✅ Très puissant pour réorganiser les layouts selon l’écran.
✅ Combine avec gap pour un espacement fluide.

9. 🎯 Breakpoints Sémantiques (variables CSS)

          style.css
          :root {
            --bp-mobile: 480px;
            --bp-tablet: 768px;
            --bp-desktop: 1024px;
            --bp-lg: 1440px;
          }
          
          @media (min-width: var(--bp-tablet)) {
            .sidebar { display: block; }
          }
          
          @media (min-width: var(--bp-desktop)) {
            .container { max-width: 1200px; }
          }
            
✅ Utilise des variables CSS pour gérer tes breakpoints.
→ Plus maintenable, plus lisible, plus cohérent.
→ Pas de “chiffres magiques” éparpillés dans ton CSS.

10. 💡 Bonnes Pratiques Responsive Design

  • Teste sur de vrais appareils (ou avec les DevTools du navigateur).
  • Évite les largeurs fixes → utilise max-width + % ou fr.
  • Touche & gestes : prévois des zones cliquables assez grandes sur mobile (min 44px).
  • Cacher ou réorganiser : sur mobile, cache les éléments non essentiels, réorganise la hiérarchie.
  • Performance : charge des images plus petites sur mobile, diffère le JS non critique.
  • Accessibilité : le responsive n’est pas qu’une question de taille — pense aussi contraste, lisibilité, navigation au clavier.

11. 📊 Récapitulatif Responsive Design

Concept Outil CSS Exemple / Usage
Viewport Indispensable pour le mobile
Unités fluides %, vw, vh, rem Largeurs/hauteurs/tailles adaptables
Media Queries @media (min-width: ...) Styles conditionnels selon la taille
Mobile First min-width Commencer petit, étendre vers grand
Images max-width: 100% + srcset Images adaptatives et performantes
Typographie fluide clamp() Texte qui s’adapte sans saut
Flex/Grid responsive @media + changement de direction/colonnes Réorganiser les layouts
Breakpoints sémantiques --bp-tablet (variables CSS) Code plus maintenable
Orientation @media (orientation: ...) Styles paysage/portrait
🎉 Félicitations ! Tu maîtrises le Responsive Design.
Tes sites s’afficheront parfaitement sur tous les appareils — du smartphone 4" à l’écran 4K.
→ Pense Mobile First, utilise des unités fluides, abuse des media queries, et teste, teste, teste !
Le web est partout. Ton site aussi. 🌍📱💻

✨ CSS Avancé : Transitions, Transformations et Animations

CSS permet d’ajouter du mouvement et des effets interactifs avec les propriétés transition, transform et @keyframes.

1. ⏱️ Transitions

          style.css
          button {
            background-color: lightblue;
            padding: 10px 20px;
            border: none;
            transition: background-color 0.5s, transform 0.3s;
          }
          
          button:hover {
            background-color: lightgreen;
            transform: scale(1.2);
          }
          
          index.html
          <button>Hover moi</button>
            
transition permet d’ajouter un effet progressif lors d’un changement de propriété (ici couleur et taille).

2. 🔄 Transformations

          style.css
          div {
            width: 100px;
            height: 100px;
            background-color: coral;
            transition: transform 0.5s;
          }
          
          div:hover {
            transform: rotate(45deg) scale(1.5);
          }
          
          index.html
          <div></div>
            
transform permet de faire tourner (rotate), agrandir/réduire (scale), déplacer (translate) ou incliner (skew) un élément.

3. 🎬 Animations avec @keyframes

          style.css
          @keyframes example {
            0%   { background-color: red; left: 0px; }
            50%  { background-color: yellow; left: 50px; }
            100% { background-color: red; left: 0px; }
          }
          
          div {
            width: 50px;
            height: 50px;
            position: relative;
            animation: example 3s infinite;
          }
          
          index.html
          <div></div>
            
@keyframes définit une animation étape par étape. animation: example 3s infinite; lance l’animation pendant 3 secondes en boucle infinie.

4. 🔧 Propriétés d’animation utiles

          animation-name: nom_de_l_animation;
          animation-duration: 2s;
          animation-iteration-count: infinite / 1 / 3 ...;
          animation-timing-function: linear / ease / ease-in / ease-out;
          animation-delay: 1s;
          animation-direction: normal / reverse / alternate;
            
✅ Ces propriétés permettent de contrôler la durée, le nombre de répétitions, le timing et le sens de l’animation.

✨ CSS Animations & Transitions : Le Guide Ultime Complet

CSS permet de créer des interfaces dynamiques, fluides et engageantes sans JavaScript. Voici TOUT ce que tu dois savoir sur transition, transform, @keyframes, et les bonnes pratiques de performance.

1. ⏱️ Transitions CSS — Lissage des changements d’état

          style.css
          .button {
            background: #4fc3f7;
            color: white;
            padding: 12px 24px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            /* Syntaxe complète : propriété | durée | fonction de timing | délai */
            transition: background-color 0.4s ease-in-out, 
                        transform 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55),
                        box-shadow 0.3s ease;
          }
          
          .button:hover {
            background: #03a9f4;
            transform: translateY(-3px) scale(1.05);
            box-shadow: 0 5px 15px rgba(0,0,0,0.2);
          }

          index.html
          <button class="button">Cliquez-moi</button>
            
✅ Syntaxe : transition: [propriété] [durée] [timing-function] [delay];
✅ Propriétés animables : color, background, transform, opacity, width (avec précaution)...
✅ Timing functions : ease, linear, ease-in, ease-out, cubic-bezier() (personnalisable sur cubic-bezier.com).
✅ Tu peux animer plusieurs propriétés en une seule ligne, séparées par des virgules.

2. 🔄 Transformations 2D — Déformer sans casser le flux

          style.css
          .box {
            width: 100px;
            height: 100px;
            background: #ff7043;
            margin: 20px;
            transition: transform 0.5s ease;
          }
          
          .box:hover {
            transform: 
              rotate(45deg)        /* rotation */
              scale(1.3)           /* agrandissement */
              translateX(20px)     /* déplacement horizontal */
              skewY(10deg);        /* inclinaison verticale */
          }

          index.html
          <div class="box">HOVER</div>
            
HOVER
transform n’affecte PAS le flux du document → les autres éléments ne bougent pas.
✅ Combinaison : tu peux combiner plusieurs fonctions dans un seul transform.
✅ Ordre important : rotate(45deg) scale(1.5)scale(1.5) rotate(45deg).
✅ Fonctions :
  → translateX() / translateY() / translate()
  → scaleX() / scaleY() / scale()
  → rotate()
  → skewX() / skewY()

3. 🎥 Transformations 3D — Profondeur et immersion

          style.css
          .scene {
            perspective: 800px; /* donne une profondeur à la scène */
            margin: 40px 0;
          }
          
          .card {
            width: 150px;
            height: 150px;
            background: #81c784;
            display: flex;
            align-items: center;
            justify-content: center;
            color: white;
            font-weight: bold;
            transition: transform 0.8s ease;
          }
          
          .card:hover {
            transform: rotateY(45deg) rotateX(15deg);
          }

          index.html
          <div class="scene">
            <div class="card">3D HOVER</div>
          </div>
            
3D HOVER
perspective → appliqué au parent, donne un effet 3D réaliste.
rotateX() / rotateY() / rotateZ() → rotations 3D.
translateZ() → avance/recule dans la profondeur.
transform-style: preserve-3d; → pour imbriquer des éléments 3D.
backface-visibility: hidden; → cache l’arrière d’un élément retourné.

4. 🎬 @keyframes — Scénariser des animations complexes

          style.css
          @keyframes bounce {
            0%, 100% {
              transform: translateY(0);
              animation-timing-function: ease-out;
            }
            50% {
              transform: translateY(-50px);
              animation-timing-function: ease-in;
            }
          }
          
          .ball {
            width: 50px;
            height: 50px;
            background: #e91e63;
            border-radius: 50%;
            animation: bounce 1s infinite;
          }

          index.html
          <div class="ball"></div>
            
@keyframes → définit les étapes (keyframes) d’une animation.
✅ Utilise from (0%) et to (100%) pour les animations simples.
✅ Plusieurs étapes : 0%, 25%, 50%, 75%, 100% → contrôle fin du mouvement.
✅ Timing function par keyframe → pour des accélérations/décélérations réalistes.

5. 🔧 Contrôle fin des animations — Toutes les propriétés

          .ball {
            animation-name: bounce;
            animation-duration: 1s;
            animation-timing-function: ease; /* ou cubic-bezier() */
            animation-delay: 0.5s;
            animation-iteration-count: infinite; /* ou 3, 5... */
            animation-direction: alternate; /* normal, reverse, alternate, alternate-reverse */
            animation-fill-mode: both; /* none, forwards, backwards, both */
            animation-play-state: running; /* running, paused */
          }
            
animation-direction: alternate → va-et-vient (0% → 100% → 0%).
animation-fill-mode: forwards → garde le style de la dernière keyframe après l’animation.
animation-fill-mode: backwards → applique la première keyframe avant le delay.
animation-fill-mode: both → combine forwards + backwards.
animation-play-state: paused → utile pour contrôler via JS ou hover.
💡 Astuce : tu peux écrire tout en raccourci :
animation: bounce 1s ease 0.5s infinite alternate both paused;

6. ⏯️ Lecture/Pause avec :hover ou JS

          style.css
          .spinner {
            width: 40px;
            height: 40px;
            border: 4px solid #ccc;
            border-top: 4px solid #3f51b5;
            border-radius: 50%;
            animation: spin 1s linear infinite;
          }
          
          .spinner:hover {
            animation-play-state: paused; /* arrête l'animation au survol */
          }
          
          @keyframes spin {
            to { transform: rotate(360deg); }
          }

          index.html
          <div class="spinner"></div>
            
animation-play-state: paused; → arrête l’animation sans la réinitialiser.
✅ Très utile pour les effets au survol, ou contrôlés par bouton (via JS : element.style.animationPlayState = "paused").

7. 🧠 Optimisation de performance — Animer intelligemment

          style.css
          .perf-box {
            will-change: transform, opacity; /* prévient le navigateur */
            transition: transform 0.3s, opacity 0.3s;
          }
          
          .perf-box:hover {
            transform: scale(1.1);
            opacity: 0.8;
          }

          index.html
          <div class="perf-box">PERF</div>
            
PERF
✅ N’anime que transform et opacity → déclenchent le “compositing” → 60 FPS garantis.
✅ Évite d’animer width, height, top, left → déclenchent des “reflows” → lags.
will-change: transform; → optimisation proactive (à utiliser avec parcimonie).
✅ Utilise translateZ(0) ou transform: translate3d(0,0,0) pour forcer l’accélération matérielle (legacy trick).

8. 🎭 Animation par étapes — sprites et flipbook

          style.css
          .sprite {
            width: 100px;
            height: 100px;
            background: url('sprite-sheet.png') 0 0;
            animation: walk 1s steps(8) infinite;
          }
          
          @keyframes walk {
            100% { background-position: -800px 0; } /* 8 frames de 100px */
          }

          index.html
          <div class="sprite"></div>
            
animation-timing-function: steps(8); → divise l’animation en 8 étapes nettes (pas de transition entre).
✅ Parfait pour les spritesheets, compteurs, ou effets “flipbook”.
✅ Syntaxe : steps(nombre, [start|end])end par défaut.

9. 🌈 Déclencher des animations avec d’autres états

          style.css
          /* Au clic */
          button:active {
            transform: scale(0.95);
          }
          
          /* Au focus (clavier ou clic) */
          input:focus {
            outline: none;
            box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.5);
            transition: box-shadow 0.3s ease;
          }
          
          /* En responsive */
          @media (prefers-reduced-motion: no-preference) {
            .animated-element {
              animation: fadeIn 1s ease-in;
            }
          }

          index.html
          <button>Clique moi</button>
          <br><br>
          <input type="text" placeholder="Clique ici → focus animé">
            


:active → pendant le clic.
:focus → quand l’élément est sélectionné (clavier ou souris).
@media (prefers-reduced-motion) → respecte les préférences utilisateurs (accessibilité).
✅ Tu peux aussi déclencher des animations via JavaScript en ajoutant/supprimant des classes.

10. 💡 Bonnes Pratiques CSS Animations

  • Accessibilité : respecte @media (prefers-reduced-motion: reduce) → désactive les animations gênantes.
  • Performance : n’anime que transform et opacity. Utilise will-change avec modération.
  • Timing : durée idéale entre 200ms et 500ms pour les micro-interactions. Évite les animations trop longues.
  • Émotion : utilise des cubic-bezier personnalisés pour des mouvements “humains” (rebond, inertie).
  • Debug : dans Chrome DevTools → onglet “Performance” ou “Animations” pour inspecter et ralentir les animations.
  • Combinaison : transitions pour les interactions (hover, focus), animations (@keyframes) pour les effets autonomes (chargement, entrée de page).

11. 📊 Récapitulatif Complet — Propriétés CSS Animations

Propriété Valeurs courantes Description
transition all 0.3s ease Animation lors d’un changement d’état (hover, focus...)
transform rotate(30deg) scale(1.2) Déformation 2D/3D sans affecter le flux
perspective 800px Profondeur pour les transformations 3D (sur le parent)
@keyframes from {} to {} ou 0% {} 50% {} 100% {} Définit une animation complexe
animation-name bounce Nom de l’animation @keyframes
animation-duration 1s, 500ms Durée totale de l’animation
animation-timing-function ease, linear, cubic-bezier(), steps() Accélération de l’animation
animation-delay 0.5s Délai avant le début
animation-iteration-count infinite, 3 Nombre de répétitions
animation-direction normal, reverse, alternate Sens de lecture
animation-fill-mode forwards, backwards, both Style avant/après l’animation
animation-play-state running, paused Contrôle la lecture
will-change transform, opacity Optimisation de performance (à utiliser avec parcimonie)
🎉 Tu es maintenant un maître des animations CSS !
Tu peux créer des interfaces vivantes, performantes et accessibles — du micro-interaction au chargement complexe.
→ Anime avec intention, respecte les performances, et pense à tous les utilisateurs.
Le mouvement raconte une histoire. À toi de la rendre belle. 🎬✨

📚 CSS : Récapitulatif et Bonnes Pratiques

Voici un résumé de toutes les notions CSS vues, avec des conseils pour organiser et maintenir votre CSS.

1. 🎨 Bases CSS

  • Sélecteurs : p, .classe, #id
  • Texte : color, font-size, font-weight, text-align, text-decoration, line-height, letter-spacing
  • Fond : background-color, background-image
  • Box model : border, margin, padding, box-sizing

2. 🖼️ Mise en page

  • Flexbox : display:flex, justify-content, align-items, flex-direction
  • Grid : display:grid, grid-template-columns, grid-template-rows, grid-column, grid-row

3. 📱 Responsive

  • Media queries : @media screen and (max-width: 600px)
  • Mobile-first : styles par défaut pour mobile, puis adapter pour tablette/desktop

4. ✨ Effets avancés

  • Transition : transition: property duration timing-function;
  • Transformation : transform: scale(), rotate(), translate()
  • Animation : @keyframes, animation-name, animation-duration, animation-iteration-count

5. 📝 Bonnes pratiques

  • Utiliser CSS externe (style.css) pour toutes les pages.
  • Organiser les styles par sections : typographie, layout, composants, responsive, animations.
  • Nommer les classes clairement (.header, .btn-primary, .card).
  • Éviter les styles inline sauf pour tests rapides.
  • Mobile-first : écrire d’abord les styles pour mobile, puis ajouter les media queries pour desktop.
  • Utiliser box-sizing: border-box pour simplifier le calcul des tailles.
  • Réutiliser les classes au lieu de dupliquer les styles.

6. 📌 Exemple structure CSS propre

          /* === Typographie === */
          body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
          }
          
          /* === Layout === */
          .container {
            display: flex;
            flex-direction: column;
            padding: 20px;
          }
          
          /* === Composants === */
          .btn {
            background-color: blue;
            color: white;
            padding: 10px 20px;
            border: none;
            cursor: pointer;
            transition: background-color 0.3s;
          }
          
          .btn:hover {
            background-color: darkblue;
          }
          
          /* === Responsive === */
          @media screen and (max-width: 600px) {
            .container {
              flex-direction: column;
            }
            h1 {
              font-size: 24px;
            }
          }
            
✅ Organiser le CSS par sections permet de garder un code clair et facile à maintenir. ✅ Toujours tester sur différents écrans et navigateurs.

🌀 CSS Transitions Avancées — Timing, délais, courbes personnalisées

Les transitions CSS permettent de créer des changements fluides entre deux états. Ici, on va bien au-delà du transition: all 0.3s; : courbes d’animation personnalisées, délais, transitions multiples, et contrôle fin pour une UX parfaite.

1. 🎛️ Syntaxe complète — maîtriser chaque paramètre

style.css
.button-full {
  background: #607d8b;
  color: white;
  padding: 12px 24px;
  border: none;
  border-radius: 4px;
  cursor: pointer;

  /* transition: [propriété] [durée] [timing-function] [délai]; */
  transition: 
    background-color 0.4s ease-in-out,
    transform 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55),
    box-shadow 0.3s ease 0.1s; /* délai de 0.1s */
}

.button-full:hover {
  background: #455a64;
  transform: translateY(-3px) scale(1.05);
  box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}

index.html
<button class="button-full">✨ Hover moi — transitions multiples + délai + courbe custom</button>
  
✅ Syntaxe complète :
  transition: propriété durée timing-function délai;
✅ Tu peux animer plusieurs propriétés → séparées par des virgules.
ease-in-out → ralentit au début et à la fin.
cubic-bezier(x1, y1, x2, y2) → courbe personnalisée (va sur cubic-bezier.com pour la créer).
0.1s → délai avant le début de la transition.

2. 📈 Timing Functions — contrôler l’accélération

style.css
.ease {
  transition: transform 0.6s ease;
}

.linear {
  transition: transform 0.6s linear;
}

.ease-in {
  transition: transform 0.6s ease-in;
}

.ease-out {
  transition: transform 0.6s ease-out;
}

.cubic-custom {
  transition: transform 0.6s cubic-bezier(0.86, 0, 0.07, 1); /* easeInOutExpo */
}

.steps {
  transition: transform 0.6s steps(6, end); /* animation par étapes */
}

index.html
<button class="ease">ease</button>
<button class="linear">linear</button>
<button class="ease-in">ease-in</button>
<button class="ease-out">ease-out</button>
<button class="cubic-custom">cubic-custom</button>
<button class="steps">steps</button>
  
ease → accélération/décélération douce (valeur par défaut).
linear → vitesse constante → mécanique, robotique.
ease-in → commence lentement.
ease-out → finit lentement.
cubic-bezier() → contrôle total de la courbe d’animation.
steps(6) → animation par étapes → parfait pour les sprites, compteurs, flip cards.

3. ⏱️ Transitions multiples — durée et timing différents par propriété

style.css
.card-multi {
  background: #e3f2fd;
  padding: 20px;
  border: 2px solid #2196f3;
  cursor: pointer;

  /* Chaque propriété a sa propre transition */
  transition-property: background-color, transform, border-color;
  transition-duration: 0.5s, 0.3s, 0.8s;
  transition-timing-function: ease, cubic-bezier(0.68, -0.55, 0.27, 1.55), ease-in-out;
  transition-delay: 0s, 0.1s, 0.2s;
}

.card-multi:hover {
  background: #2196f3;
  color: white;
  transform: scale(1.05) rotate(2deg);
  border-color: #0d47a1;
}

index.html
<div class="card-multi">Hover → transitions indépendantes (fond, transformation, bordure)</div>
  
Hover → transitions indépendantes (fond, transformation, bordure)
✅ Tu peux définir des transitions séparées pour chaque propriété.
✅ Utilise les propriétés longues :
  → transition-property
  → transition-duration
  → transition-timing-function
  → transition-delay
✅ Les listes doivent avoir le même nombre d’éléments → sinon, répétition ou valeur par défaut.

4. 🎯 Déclencheurs avancés — au-delà du :hover

style.css
/* Au clic (état actif) */
.button:active {
  transform: scale(0.95);
  transition: transform 0.1s;
}

/* Au focus (clavier ou clic) */
.input:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.5);
  transition: box-shadow 0.3s ease;
}

/* En mode réduit mouvement (accessibilité) */
@media (prefers-reduced-motion: reduce) {
  * {
    transition: none !important;
    animation: none !important;
  }
}

/* Sur mobile */
@media (max-width: 768px) {
  .card {
    transition: transform 0.2s ease; /* plus rapide sur mobile */
  }
}

index.html

<button class="button:active">Clique moi → transition au clic</button>
<input type="text" placeholder="Clique ici → transition au focus">
  


:active → pendant le clic → parfait pour les boutons “pressés”.
:focus → quand l’élément est sélectionné → essentiel pour l’accessibilité clavier.
@media (prefers-reduced-motion: reduce) → respecte les utilisateurs sensibles au mouvement.
✅ Media queries → adapte la durée ou le timing selon l’écran (ex: plus rapide sur mobile).

5. 🎮 Contrôle via JavaScript — ajouter/supprimer des classes

style.css
.box-js {
  width: 100px;
  height: 100px;
  background: #ff5722;
  margin: 20px;
  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.box-js.active {
  transform: rotate(180deg) scale(1.5);
  background: #4caf50;
  border-radius: 50%;
}

index.html

<div id="js-box"></div>

<button onclick="document.getElementById('js-box').classList.toggle('active');">Toggle Class → déclenche la transition</button>

  
✅ En JS : element.classList.add('active'); → déclenche la transition si les propriétés changent.
✅ Très puissant pour : menus, accordéons, modales, états dynamiques.
✅ Tu peux aussi lire transitionend → événement déclenché à la fin de la transition.
✅ Astuce : utilise getComputedStyle(element).transitionDuration pour lire la durée en JS.

6. 💡 Bonnes Pratiques Transitions CSS

  • Performance → n’anime que transform et opacity → 60 FPS garantis. Évite width, height, top, left.
  • Accessibilité → respecte @media (prefers-reduced-motion: reduce) → désactive les transitions/mouvements.
  • Timing → durée idéale : 200ms à 500ms. Trop long = frustration, trop court = invisible.
  • Courbes → utilise cubic-bezier pour des mouvements “humains” (rebond, inertie, élasticité).
  • Délais → utilise transition-delay pour créer des séquences ou des effets “en cascade”.
  • Debug → dans Chrome DevTools → onglet “Animations” → ralentis, modifies, pauses les transitions en temps réel.

7. 📊 Récapitulatif Complet — Propriétés & Valeurs

Propriété Valeurs courantes Description
transition-propertytransform, opacity, allQuelle propriété animer
transition-duration0.3s, 500msDurée de la transition
transition-timing-functionease, linear, cubic-bezier(), steps()Accélération de l’animation
transition-delay0.2sDélai avant le début
transitionall 0.3s ease 0.1sRaccourci pour tout
@media (prefers-reduced-motion)reduceDésactive pour l’accessibilité
🎉 Félicitations ! Tu maîtrises maintenant les transitions CSS avancées.
Tu peux créer des micro-interactions fluides, performantes et accessibles — du bouton au composant complexe.
→ Joue avec les cubic-bezier, les délais, les états dynamiques… et donne de la vie à ton interface.
Une bonne transition, c’est ce qui transforme un site statique en une expérience vivante. 🌀✨

🧭 CSS Scroll Snap — Défilement contrôlé (carrousels, sections pleine page)

Le Scroll Snap permet de créer des interfaces où le défilement “accroche” à des points précis : carrousels, diaporamas, sections pleine page, galeries. Fini le scroll incontrôlé — bienvenue au scroll piloté, fluide et moderne, sans JavaScript.

1. 🧱 Concepts de base — Container et Items

style.css
.snap-container {
  scroll-snap-type: x mandatory; /* ou y, both */
  overflow-x: scroll;
  display: flex;
  width: 100%;
  height: 200px;
  border: 2px solid #607d8b;
  scroll-behavior: smooth; /* scroll fluide */
}

.snap-item {
  scroll-snap-align: start; /* ou center, end */
  flex: 0 0 100%; /* chaque item prend 100% de la largeur */
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  color: white;
}

index.html
<div class="snap-container">
  <div class="snap-item">1</div>
  <div class="snap-item">2</div>
  <div class="snap-item">3</div>
</div>
  
1
2
3
4
Container → élément scrollable avec scroll-snap-type.
Items → enfants avec scroll-snap-align.
scroll-snap-type: x mandatory; → snap horizontal, obligatoire.
scroll-snap-align: start; → l’élément s’aligne au début de la zone de défilement.
✅ Ajoute scroll-behavior: smooth; pour un scroll fluide.

2. 🔄 Axes de défilement — x, y, both

style.css
/* Vertical */
.snap-container-y {
  scroll-snap-type: y mandatory;
  overflow-y: scroll;
  height: 300px;
  width: 300px;
  border: 2px solid #607d8b;
}

/* Horizontal */
.snap-container-x {
  scroll-snap-type: x mandatory;
  overflow-x: scroll;
  width: 100%;
  height: 200px;
  border: 2px solid #607d8b;
}

/* Les deux */
.snap-container-both {
  scroll-snap-type: both mandatory;
  overflow: scroll;
  width: 400px;
  height: 300px;
  border: 2px solid #607d8b;
}

index.html
<div class="snap-container-y">
  <div class="snap-item">A</div>
  <div class="snap-item">B</div>
  <div class="snap-item">C</div>
</div>
  

⬇️ Exemple vertical (scroll vers le bas)

A
B
C

↔️ Exemple horizontal (déjà vu ci-dessus)

→ Voir l’exemple de la section 1.

🔄 Exemple both (scroll horizontal ET vertical)

1
2
3
4
5
6
scroll-snap-type: y mandatory; → snap vertical.
scroll-snap-type: both mandatory; → snap horizontal ET vertical (grilles, tableaux complexes).
✅ Très utile pour les portfolios, présentations, dashboards.

3. 📍 Alignement des items — start, center, end

style.css
.snap-center {
  scroll-snap-align: center;
}

.snap-end {
  scroll-snap-align: end;
}

index.html
<div class="snap-container">
  <div class="snap-item snap-center">CENTER</div>
  <div class="snap-item snap-end">END</div>
</div>
  
CENTER
END
START
start → aligne le début de l’élément avec le début de la zone de défilement.
center → centre l’élément dans la zone visible → parfait pour les galeries “focus”.
end → aligne la fin de l’élément.
💡 Astuce : combine center + marges pour un effet “carte au centre”.

4. ⛔ scroll-snap-stop — forcer l’arrêt à chaque point (pas de défilement rapide)

style.css
.snap-item-stop {
  scroll-snap-stop: always; /* force l'arrêt ici, même si l'utilisateur scroll vite */
}

index.html
<div class="snap-container-y">
  <div class="snap-item snap-center snap-item-stop">STOP 1</div>
  <div class="snap-item snap-center snap-item-stop">STOP 2</div>
  <div class="snap-item snap-center snap-item-stop">STOP 3</div>
</div>
  
STOP 1
STOP 2
STOP 3
scroll-snap-stop: always; → l’utilisateur doit s’arrêter à cet élément, même s’il scroll vite.
✅ Utile pour : contenus importants, étapes de formulaire, tutoriels.
✅ Par défaut : normal → l’utilisateur peut “sauter” des snap points en scrollant rapidement.

5. 🎯 Cas d’usage — Sections pleine page (landing page)

style.css
.fullpage-container {
  scroll-snap-type: y mandatory;
  overflow-y: scroll;
  height: 100vh;
  scroll-behavior: smooth;
}

.fullpage-section {
  scroll-snap-align: start;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 3rem;
  color: white;
}

index.html
<div class="fullpage-container">
  <div class="fullpage-section" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">SECTION 1</div>
  <div class="fullpage-section" style="background: linear-gradient(135deg, #ff5722 0%, #4caf50 100%);">SECTION 2</div>
  <div class="fullpage-section" style="background: linear-gradient(135deg, #2196f3 0%, #9c27b0 100%);">SECTION 3</div>
</div>
  
SECTION 1
SECTION 2
SECTION 3
✅ Parfait pour les landing pages “plein écran”.
✅ Chaque section prend 100% de la hauteur de la fenêtre → height: 100vh;.
✅ Ajoute des indicateurs de pagination ou des flèches de navigation pour améliorer l’UX.

6. 💡 Bonnes Pratiques Scroll Snap

  • Accessibilité → évite mandatory si le contenu est long → préfère proximity pour plus de liberté.
  • UX → ajoute des repères visuels (pagination, flèches) → l’utilisateur ne sait pas toujours qu’il peut scroller.
  • Performance → évite les animations lourdes pendant le scroll → peut causer des lags.
  • Mobile → test sur tactile → le snap doit être fluide, pas “collant”.
  • Débogage → utilise les DevTools → onglet “Éléments” → inspecte les propriétés de scroll.
  • Progressive enhancement → le site doit rester utilisable sans snap → ne mets pas de contenu essentiel caché sans scroll.

7. 🆚 scroll-snap-type: mandatory vs proximity

style.css
.snap-mandatory {
  scroll-snap-type: x mandatory; /* Doit s'arrêter sur un snap point */
}

.snap-proximity {
  scroll-snap-type: x proximity; /* S'arrête si proche, sinon libre */
}

index.html
<div class="snap-container">
  <div class="snap-item snap-mandatory">MANDATORY</div>
  <div class="snap-item snap-proximity">PROXIMITY</div>
</div>
  

MANDATORY (obligatoire)

🔴 DOIT s'arrêter ici
🔴 Toujours ici

PROXIMITY (liberté)

🟢 S'arrête si proche
🟢 Sinon, libre !
mandatory → l’utilisateur doit s’arrêter sur un snap point → expérience contrôlée (carrousels, diaporamas).
proximity → s’arrête seulement si le scroll s’arrête “près” d’un snap point → plus de liberté (galerie, portfolio).
💡 Conseil : utilise proximity pour les contenus longs ou complexes → meilleure accessibilité.

8. 📊 Récapitulatif Complet — Propriétés & Valeurs

Propriété Valeurs Description
scroll-snap-typex mandatory, y proximity, both mandatoryActive le snap sur un/des axes + comportement
scroll-snap-alignstart, center, endOù l’élément s’aligne dans la zone de défilement
scroll-snap-stopnormal, alwaysForce l’arrêt à cet élément
scroll-behaviorsmoothScroll fluide (pas obligatoire, mais recommandé)
🎉 Félicitations ! Tu maîtrises maintenant CSS Scroll Snap.
Tu peux créer des carrousels, des sections pleine page, des galeries — sans une ligne de JavaScript.
→ Choisis le bon axe, le bon alignement, et le bon comportement (mandatory/proximity).
Le scroll n’est plus une contrainte — c’est une expérience. 🌀✨

🎨 CSS Filters & Blend Modes — Effets visuels avancés (flou, mélange, teintes)

Les filtres CSS permettent d’appliquer des effets graphiques comme le flou, la saturation, ou la luminosité — directement dans le navigateur. Les modes de fusion (blend-mode) permettent de mélanger les couleurs entre éléments ou avec l’arrière-plan. Le tout, sans Photoshop, sans JavaScript.

1. 🌫️ Filtres CSS de base — flou, noir et blanc, luminosité

style.css
.img-blur {
  filter: blur(5px);
}

.img-grayscale {
  filter: grayscale(100%);
}

.img-brightness {
  filter: brightness(1.5); /* 1 = normal, 0.5 = plus sombre, 1.5 = plus clair */
}

.img-contrast {
  filter: contrast(200%); /* 100% = normal, 200% = plus contrasté */
}

 
  
Flou blur(5px)
Noir et blanc grayscale(100%)
Luminosité brightness(1.5)
Contraste contrast(200%)
filter: blur(5px); → flou gaussien.
grayscale(100%) → noir et blanc complet.
brightness(0.5) → assombrit, brightness(2) → éclaircit.
contrast(50%) → réduit le contraste, contrast(200%) → l’augmente.
💡 Astuce : combine plusieurs filtres → filter: blur(2px) brightness(1.2);

2. 🎨 Filtres avancés — teinte, saturation, inversion, sépia

style.css
.img-hue-rotate {
  filter: hue-rotate(90deg); /* Change la teinte (0deg à 360deg) */
}

.img-saturate {
  filter: saturate(300%); /* 100% = normal, 0% = désaturé, 300% = ultra saturé */
}

.img-invert {
  filter: invert(100%); /* Inverse les couleurs → négatif photo */
}

.img-sepia {
  filter: sepia(100%); /* Effet photo ancienne */
}

  
Teinte hue-rotate(90deg)
Saturation saturate(300%)
Inversion invert(100%)
Sépia sepia(100%)
hue-rotate(180deg) → change la teinte (comme dans Photoshop → Teinte/Saturation).
saturate(0%) → équivalent à grayscale(100%).
invert(100%) → négatif photo → utile pour le “mode nuit” rapide.
sepia(100%) → effet vintage.
💡 Astuce : filter: invert(1) hue-rotate(180deg); → simulateur de daltonisme.

3. 🎭 Combinaison de filtres — créer des effets personnalisés

style.css
.img-dramatic {
  filter: 
    brightness(0.8) 
    contrast(120%) 
    saturate(150%) 
    hue-rotate(-10deg);
}

.img-vintage {
  filter: 
    sepia(80%) 
    saturate(150%) 
    brightness(1.1) 
    contrast(90%);
}

.img-night-mode {
  filter: invert(1) hue-rotate(180deg); /* Mode nuit accessible */
}
  
Dramatique Filtre “dramatique”
Vintage Filtre “vintage”
Mode nuit Mode nuit (invert + hue-rotate)
✅ Tu peux combiner autant de filtres que tu veux → séparés par des espaces.
✅ L’ordre a une importance → blur() hue-rotate()hue-rotate() blur().
✅ Parfait pour : thèmes dynamiques, effets hover, filtres photo, accessibilité (mode nuit).
💡 Astuce : utilise des variables CSS pour créer des thèmes modulaires → --filter-theme: brightness(0.9) saturate(110%);

4. 🪟 Backdrop-filter — flou ou effet sur l’arrière-plan (verre dépoli)

style.css
.card-backdrop {
  background: rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(10px); /* Floute ce qui est derrière la carte */
  -webkit-backdrop-filter: blur(10px); /* Safari */
  border: 1px solid rgba(255,255,255,0.3);
  padding: 30px;
  color: white;
  font-weight: bold;
  text-align: center;
}

.hero-backdrop {
  background: rgba(0,0,0,0.4);
  backdrop-filter: blur(8px);
  padding: 50px;
  color: white;
  text-align: center;
}
  
Carte avec backdrop-filter: blur(10px);
→ Effet “verre dépoli” (iOS, Windows 11)
backdrop-filter → applique un filtre à tout ce qui est derrière l’élément.
✅ Très utilisé pour : menus transparents, cartes “glassmorphism”, modales, headers flottants.
✅ Support : Chrome, Edge, Safari, Firefox (derrière flag).
✅ Toujours ajouter -webkit-backdrop-filter pour Safari.
⚠️ Performance : peut être lourd → évite sur des éléments animés ou scrollants.

5. 🎭 Mix Blend Mode — mélanger un élément avec ce qui est en-dessous

style.css
.blend-container {
  background: linear-gradient(45deg, #ff9a9e, #fecfef, #ff9a9e);
  padding: 50px;
  position: relative;
  text-align: center;
}

.blend-text {
  font-size: 3rem;
  font-weight: bold;
  color: #2196f3;
  mix-blend-mode: multiply; /* ou screen, overlay, difference... */
  position: relative;
  z-index: 1;
}
  
BLEND MODE
mix-blend-mode → mélange l’élément avec tout ce qui est en dessous (arrière-plan, autres éléments).
✅ Valeurs courantes :
  → multiply → assombrit, garde les noirs.
  → screen → éclaircit, garde les blancs.
  → overlay → combine multiply + screen.
  → difference → effet “négatif” créatif.
✅ Idéal pour : textes sur dégradés, effets de superposition, designs artistiques.

6. 🎨 Background Blend Mode — mélanger plusieurs fonds entre eux

style.css
.blend-bg {
  background: 
    url('https://images.pexels.com/photos/414612/pexels-photo-414612.jpeg?auto=compress&cs=tinysrgb&w=400'),
    linear-gradient(45deg, rgba(255,0,0,0.5), rgba(0,0,255,0.5));
  background-size: cover;
  background-blend-mode: overlay; /* mélange les deux fonds entre eux */
  width: 300px;
  height: 200px;
  margin: 0 auto;
}
  
background-blend-mode → mélange les couches d’arrière-plan entre elles (image + dégradé, dégradé + dégradé...).
✅ Mêmes valeurs que mix-blend-mode : multiply, screen, overlay, etc.
✅ Très utile pour : hero sections, overlays colorés, effets de texture.
✅ Différence clé :
  → mix-blend-mode → mélange avec tout ce qui est en dessous (y compris d’autres éléments).
  → background-blend-mode → mélange uniquement les fonds de l’élément.

7. 💡 Bonnes Pratiques Filters & Blend Modes

  • Performance → évite les filtres lourds (blur() élevé) sur des éléments animés ou scrollants → peut causer des lags.
  • Accessibilité → n’utilise pas grayscale ou hue-rotate sur du texte → peut nuire à la lisibilité.
  • Backdrop-filter → toujours fournir un fond semi-transparent → sinon l’effet n’est pas visible.
  • Dégradés + blend mode → combine avec background-blend-mode pour des effets de texture ou de lumière.
  • Debug → désactive temporairement les filtres dans DevTools pour comparer l’avant/après.
  • Variables CSS → crée des thèmes modulaires → --filter-hover: brightness(1.1) saturate(120%);

8. 📊 Récapitulatif Complet — Propriétés & Valeurs

Propriété Valeurs courantes Description
filterblur(5px), grayscale(100%), brightness(1.5)Effets sur l’élément
backdrop-filterblur(10px), grayscale(50%)Effets sur l’arrière-plan (verre dépoli)
mix-blend-modemultiply, screen, overlay, differenceMélange avec les éléments en-dessous
background-blend-modemultiply, screen, overlayMélange les fonds entre eux
hue-rotate()hue-rotate(90deg)Change la teinte
saturate()saturate(200%)Augmente/diminue la saturation
invert()invert(100%)Inversion des couleurs (négatif)
🎉 Félicitations ! Tu maîtrises maintenant les filtres et modes de fusion CSS.
Tu peux créer des effets photo, des thèmes dynamiques, des interfaces “glassmorphism”, et des designs artistiques — directement dans le navigateur.
→ Joue avec les combinaisons, les variables, les blend modes… et transforme ton site en œuvre d’art interactive.
Le CSS, ce n’est plus juste du style — c’est de la magie visuelle. ✨🎨

🚀 Ressources en ligne

Voici quelques ressources utiles pour approfondir votre compréhension du CSS :

Quelque pdf utiles

html_css.pdf
cours-langage-css.pdf

click here to download

html_css.pdf
cours-langage-css.pdf