📘 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 classes → class="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-size → px, 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-align → left, 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-space → normal, 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)
✅ RGB → rgb(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-box → width = 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 toujours → var(--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 alt → description → 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
© 2025 Mon Site d'Apprentissage | Cours HTML complet