Apprenez toutes les balises HTML et leurs utilisations
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 :
<p style="color: red; font-size: 20px;">
Ceci est un texte rouge de 20px.
</p>
Ceci est un texte rouge de 20px.
<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.
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.
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.
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.
div, h1, ul, button.
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 !
.nom-de-classeclass="important highlight".
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.
#header#nom-id
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;
}
Paragraphe FRĂRE ADJACENT (h2 + p)
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.
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.
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).
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 */
}
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.font-size: clamp(1rem, 2.5vw, 1.5rem); â typographie fluide.
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)
color, font-family) se
transmettent aux enfants.!important â force le style â Ă utiliser uniquement en dernier
recours.
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 */
.btn-primary, pas
.red-big-button.
| 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 |
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.
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).
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)
sans-serif, serif,
monospace.@font-face pour charger des polices personnalisées (formats modernes :
.woff2).
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.font-variant-ligatures, font-variant-numeric pour des contrĂŽles
typographiques avancés.
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.
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
text-decoration: [style] [line-style] [color];underline dotted bluesolid, dotted, dashed, wavy.animation pour des effets dynamiques (clignotement, etc.).
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
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.
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>
text-shadow: offsetX offsetY blurRadius color;
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>
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).
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>
-webkit-line-clamp (supportée partout sauf trÚs anciens
navigateurs).line-clamp: 3; (en cours dâadoption).
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>
Ù۰ۧ ÙŰ” ۚۧÙÙŰșŰ© ۧÙŰč۱ۚÙŰ©
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.lang="ar" ou lang="ja" dans ton HTML pour lâaccessibilitĂ©.
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.clamp() pour la taille de police â
font-size: clamp(1rem, 2.5vw, 2rem); Ă ,
, â bon pour le SEO et lâaccessibilitĂ©.font-family: "Custom", Arial, sans-serif;| 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é |
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.
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.
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>
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.
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 !).
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>
background-clip: text; â le fond ne sâaffiche QUE dans les lettres.color: transparent;-webkit-background-clip: text; pour la compatibilitĂ©.
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>
to right, to bottom, 45deg, etc.red 0%, yellow 50% â contrĂŽle prĂ©cis.rgba() ou hsla() dans les dĂ©gradĂ©s.
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);
}
circle, ellipseat center, at 20% 80%closest-side, farthest-corner, etc.
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>
conic-gradient([from angle]? [color start% end%]?)red 0% 25% â de 0 Ă 25% = rouge.
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>
background-size pour contrÎler la répétition.
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>
background-size, position, etc. â sĂ©pare
aussi par virgules.
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.multiply, screen, overlay, darken,
lighten, etc.mix-blend-mode (qui mélange avec le contenu au-dessus).
background-size: cover +
background-position: center pour les images hero.transparent pour des effets de fondu ou
superposition.outline pour voir
les limites de la boĂźte.color-mix(), accent-color,
@property pour des contrÎles avancés.| 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é |
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.
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>
border: [épaisseur] [style] [couleur];solid, dashed, dotted, double,
groove, ridge, inset, outset.border-radius â coins arrondis (ex: 10px, 50% pour un
cercle).border-top, border-left, etc.
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>
border-image â utilise une image pour la bordure.url() [slice] [repeat/stretch/round]
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>
margin: 0 auto; â centre horizontalement un Ă©lĂ©ment de largeur fixe.margin nĂ©gative â permet de superposer ou rapprocher des Ă©lĂ©ments.
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: 10px; â tous les cĂŽtĂ©spadding: 10px 20px; â vertical / horizontalpadding: 10px 20px 30px; â top / horizontal / bottompadding: 10px 20px 30px 40px; â top / right / bottom / leftrem, %, vw pour du padding responsive.
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>
outline â contour dessinĂ© autour de la bordure, nâaffecte PAS le
layout.outline-offset â dĂ©cale le contour vers lâextĂ©rieur.
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>
box-shadow: [offsetX] [offsetY] [blur] [spread] [color] [inset?];inset â ombre Ă lâintĂ©rieur.
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 (dĂ©faut) â width = contenu seulement. Padding et bordure
sâajoutent.border-box â width = contenu + padding + bordure â prĂ©visible, intuitif.*, *::before, *::after { box-sizing: border-box; } au dĂ©but de ton
CSS â Ă©vite 90% des bugs de layout.
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>
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.
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>
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.
*, *::before, *::after { box-sizing: border-box; }
â indispensable.margin: 0 auto; pour centrer un bloc avec largeur
dĂ©finie.max-width + padding: 2rem 5vw; â
sâadapte Ă tous les Ă©crans.outline sans fournir un
remplacement visible au focus.border-image lourd ou box-shadow
blur excessif sur des éléments animés.outline: 1px solid red; pour
visualiser les boßtes sans affecter le layout.| 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 |
border-box partout, joue avec les ombres, les marges négatives, les calc(), et
crĂ©e des layouts solides.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.
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>
top/left sont ignorées.
position: static; â comportement normal du flux de document.top, right, bottom, left,
z-index nâont aucun effet.
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>
â 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.absolute
enfants.
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>
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.
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>
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.z-index pour contrĂŽler la superposition.
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)...
----------
Contenu aprĂšs â scroll encore...
Fin du conteneur.
position: sticky; â se comporte comme relative jusquâĂ un seuil de scroll,
puis comme fixed.top, bottom, etc.
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>
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.z-index â empilĂ©s par ordre dâapparition dans le DOM.
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>
inset: 10px; â remplit tout le conteneur avec 10px de marge.
inset â raccourci moderne pour
top/right/bottom/left.inset: 10px; â tous les cĂŽtĂ©sinset: 10px 20px; â vertical / horizontalinset: 10px 20px 30px 40px; â top / right / bottom / left| 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 |
relative comme parent, absolute pour les décos, fixed
pour les outils globaux, sticky pour lâUX.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.
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>
--nom-variable: valeur;var(--nom-variable):root = pseudo-classe qui cible lâĂ©lĂ©ment racine () â variables
globales.
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>
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>
var(--nom, valeur-par-défaut)var(--border-radius, 4px).
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>
element.style.setProperty('--ma-variable', 'nouvelle-valeur');
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>
calc() â pour des calculs dynamiques.calc(var(--espacement) * 3), calc(100vw - var(--sidebar-width)).
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>
@property.syntax) â pour permettre lâinterpolation.@property, les variables ne sâaniment pas (changement brutal).
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;
}
@media â tout ce qui utilise ces variables sâadapte
automatiquement.--bp-tablet: 768px; puis
@media (min-width: var(--bp-tablet)).
--primary-color, --spacing-md,
--border-radius-lg.var(--color, #000) â Ă©vite les surprises.| 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 |
:root, utilise partout, modifie avec JS, anime avec
@property.
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.
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>
object-fit, lâimage est Ă©tirĂ©e ou Ă©crasĂ©e pour remplir le conteneur
â dĂ©formation.object-fit â prĂ©serve le ratio, comme background-size mais pour
les balises ![]()
.
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.background-size: cover; mais pour les ![]()
.
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.background-size: contain;.
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.cover ou contain.
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.center, top left, 50% 25%, etc.cover â pour choisir quelle partie de lâimage reste visible (ex: visage
dans un avatar).
style.css
/* Avec background-image */
.bg-cover {
width: 200px;
height: 150px;
background: url('image.jpg') center/cover no-repeat;
}
/* Avec
+ object-fit */
.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 | 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 |
![]()
+ object-fit quand :srcset pour la performance
responsive.background-image quand :
â accessibilitĂ©
obligatoire.srcset pour charger la bonne image selon
lâĂ©cran.background: linear-gradient(...); Ă
lâimage â Ă©vite le vide pendant le chargement.![]()
â performance sur les longues
pages.| 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 |
![]()
+ object-fit: cover pour le contenu,
background-image pour le dĂ©cor.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.
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>
display: flex; transforme un conteneur en flexbox et aligne les éléments en ligne par
défaut.
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>
justify-content contrĂŽle lâespace horizontal entre les Ă©lĂ©ments :
flex-start, center, flex-end, space-between,
space-around.
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>
align-items aligne les éléments verticalement dans le conteneur :
flex-start, center, flex-end, stretch.
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>
flex-direction: column; place les éléments verticalement.
Par défaut, les éléments sont alignés horizontalement (row).
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>
flex-direction)justify-content)align-items)
Flexbox ne se limite pas Ă justify-content ou align-items.
Voici TOUT ce que tu dois savoir pour dominer les layouts modernes.
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>
flex-wrap: wrap; permet aux éléments de passer à la ligne si le conteneur est trop
étroit.nowrap (défaut), wrap, wrap-reverse.
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>
flex-flow est un raccourci pour flex-direction + flex-wrap.flex-flow: row wrap; ou flex-flow: column nowrap;.
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>
align-content gĂšre lâespace entre les lignes (quand il y a plusieurs
lignes avec flex-wrap).justify-content mais verticalement : flex-start,
center, space-between, etc.wrap).
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>
order change lâordre dâaffichage visuel (sans modifier le DOM).0. Plus le chiffre est bas, plus lâĂ©lĂ©ment est en premier.
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>
flex-grow dĂ©finit comment lâĂ©lĂ©ment occupe lâespace restant.flex-grow: 2 et les autres 1, il prendra 2
fois plus dâespace.
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>
flex-shrink dĂ©finit comment lâĂ©lĂ©ment rĂ©trĂ©cit sâil nây a pas assez
dâespace.1. Plus la valeur est Ă©levĂ©e, plus il rĂ©trĂ©cit.
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>
flex-basis dĂ©finit la taille initiale de lâĂ©lĂ©ment avant que grow/shrink
ne sâappliquent.px, %, auto (dĂ©faut = taille du contenu).
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>
flex est un raccourci pour flex-grow flex-shrink
flex-basis.flex: 1 1 auto; (valeur par dĂ©faut)flex: 0 0 200px; â taille fixe, ne grandit ni ne rĂ©trĂ©cit.
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>
align-self permet de surcharger align-items pour un élément
spécifique.flex-start, center, baseline,
stretch, etc.
justify-content: center; align-items: center;
justify-content: space-around;flex-direction: column sur mobile + media
queries.min-width: 0 ou
overflow: hidden sur les Ă©lĂ©ments flex si tu as des problĂšmes de dĂ©bordement.flex: 1 1 0% â trĂšs utile pour remplir lâespace restant.
flex: 0 0 auto â taille fixe, ne grandit ni ne
rétrécit.| 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 |
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.
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>
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.
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>
repeat(3, 1fr) crĂ©e 3 colonnes Ă©gales. 1fr = une fraction de lâespace
disponible.
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>
grid-column et grid-row permettent de positionner précisément chaque élément
sur la grille.
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>
grid-column et grid-row.
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.
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>
grid-template-areas permet de nommer visuellement les zones de la
grille.grid-area: [nom];
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>
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 !
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>
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.
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>
justify-content â aligne la grille entiĂšre horizontalement dans le
conteneur.align-content â aligne la grille verticalement.
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>
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.
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>
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.
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>
grid-auto-rows et grid-auto-columns permettent de contrĂŽler leur taille.
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>
justify-self et align-self permettent de surcharger
lâalignement pour un Ă©lĂ©ment spĂ©cifique.place-self: center; â raccourci pour les deux.
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>
gap remplace grid-gap (obsolĂšte).gap: [row-gap] [column-gap]; â si une seule valeur, sâapplique aux deux.row-gap et column-gap individuellement.
place-self: center; ou
margin: auto; dans une cellule.grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));grid-column: 1 / -1;padding sur le conteneur +
gap entre les éléments.outline: 1px solid red; sur les
items pour voir la grille.| 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 |
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.
index.html
width=device-width : largeur = largeur de lâĂ©cran.initial-scale=1.0 : pas de zoom initial.
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 */
}
% â 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.max-width avec % pour Ă©viter les dĂ©bordements sur grand
é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%;
}
}
@media (condition) { ... }min-width.< 768px768px - 1023px>= 1024px>= 1440px
style.css
.container {
padding: 20px;
background: #fff3e0;
}
@media (orientation: landscape) {
.container {
padding: 50px;
background: #e8f5e8;
}
}
@media (orientation: portrait) ou landscape
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
max-width: 100%; est ESSENTIEL pour les images.srcset + sizes â charge lâimage adaptĂ©e Ă la taille dâĂ©cran â gain de
performance. pour des images différentes selon le contexte (ex: dark mode,
format webp).
/* â
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 */
}
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);
}
}
RĂ©duis/agrandis la fenĂȘtre â le titre sâadapte doucement.
clamp(min, preferred, max) â typographie fluide sans media query.clamp(1rem, 2.5vw, 2rem) â jamais moins de 1rem, jamais plus de 2rem, fluide entre
les deux.calc() + media queries pour un contrĂŽle plus fin.
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 */
}
}
flex-direction ou grid-template-columns dans les media queries.gap pour un espacement fluide.
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; }
}
max-width + % ou
fr.| 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 |
CSS permet dâajouter du mouvement et des effets interactifs avec les propriĂ©tĂ©s transition,
transform et @keyframes.
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).
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.
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.
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;
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.
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>
transition: [propriété] [durée] [timing-function] [delay];color, background, transform,
opacity, width (avec précaution)...ease, linear, ease-in,
ease-out, cubic-bezier() (personnalisable sur cubic-bezier.com).
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>
transform nâaffecte PAS le flux du document â les autres Ă©lĂ©ments ne bougent pas.transform.rotate(45deg) scale(1.5) â scale(1.5) rotate(45deg).translateX() / translateY() / translate()scaleX() / scaleY() / scale()rotate()skewX() / skewY()
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>
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Ă©.
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.from (0%) et to (100%) pour les animations simples.
.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: bounce 1s ease 0.5s infinite alternate both paused;
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.element.style.animationPlayState = "paused").
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>
width, height, top, left â
dĂ©clenchent des âreflowsâ â lags.will-change: transform; â optimisation proactive (Ă utiliser avec parcimonie).translateZ(0) ou transform: translate3d(0,0,0) pour forcer
lâaccĂ©lĂ©ration matĂ©rielle (legacy trick).
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).steps(nombre, [start|end]) â end par dĂ©faut.
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Ă©).@media (prefers-reduced-motion: reduce) â
dĂ©sactive les animations gĂȘnantes.transform et opacity. Utilise
will-change avec modération.cubic-bezier personnalisés pour des mouvements
âhumainsâ (rebond, inertie).| 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) |
Voici un résumé de toutes les notions CSS vues, avec des conseils pour organiser et maintenir votre CSS.
p, .classe, #idcolor, font-size, font-weight,
text-align, text-decoration, line-height,
letter-spacingbackground-color, background-imageborder, margin, padding, box-sizing
display:flex, justify-content, align-items,
flex-directiondisplay:grid, grid-template-columns,
grid-template-rows, grid-column, grid-row@media screen and (max-width: 600px)transition: property duration timing-function;transform: scale(), rotate(), translate()
@keyframes, animation-name, animation-duration,
animation-iteration-countstyle.css) pour toutes les pages..header, .btn-primary, .card).
box-sizing: border-box pour simplifier le calcul des tailles.
/* === 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;
}
}
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.
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>
transition: propriĂ©tĂ© durĂ©e timing-function dĂ©lai;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.
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.
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>
transition-propertytransition-durationtransition-timing-functiontransition-delay
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.
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>
element.classList.add('active'); â dĂ©clenche la transition si les propriĂ©tĂ©s changent.transitionend â Ă©vĂ©nement dĂ©clenchĂ© Ă la fin de la transition.getComputedStyle(element).transitionDuration pour lire la durĂ©e en JS.
transform et opacity â 60 FPS garantis. Ăvite width, height, top, left.@media (prefers-reduced-motion: reduce) â dĂ©sactive les transitions/mouvements.cubic-bezier pour des mouvements âhumainsâ (rebond, inertie, Ă©lasticitĂ©).transition-delay pour crĂ©er des sĂ©quences ou des effets âen cascadeâ.| PropriĂ©tĂ© | Valeurs courantes | Description |
|---|---|---|
transition-property | transform, opacity, all | Quelle propriété animer |
transition-duration | 0.3s, 500ms | Durée de la transition |
transition-timing-function | ease, linear, cubic-bezier(), steps() | AccĂ©lĂ©ration de lâanimation |
transition-delay | 0.2s | Délai avant le début |
transition | all 0.3s ease 0.1s | Raccourci pour tout |
@media (prefers-reduced-motion) | reduce | DĂ©sactive pour lâaccessibilitĂ© |
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.
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>
scroll-snap-type.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.scroll-behavior: smooth; pour un scroll fluide.
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>
â Voir lâexemple de la section 1.
scroll-snap-type: y mandatory; â snap vertical.scroll-snap-type: both mandatory; â snap horizontal ET vertical (grilles, tableaux complexes).
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>
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.center + marges pour un effet âcarte au centreâ.
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>
scroll-snap-stop: always; â lâutilisateur doit sâarrĂȘter Ă cet Ă©lĂ©ment, mĂȘme sâil scroll vite.normal â lâutilisateur peut âsauterâ des snap points en scrollant rapidement.
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>
height: 100vh;.mandatory si le contenu est long â prĂ©fĂšre proximity pour plus de libertĂ©.
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 â 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).proximity pour les contenus longs ou complexes â meilleure accessibilitĂ©.
| Propriété | Valeurs | Description |
|---|---|---|
scroll-snap-type | x mandatory, y proximity, both mandatory | Active le snap sur un/des axes + comportement |
scroll-snap-align | start, center, end | OĂč lâĂ©lĂ©ment sâaligne dans la zone de dĂ©filement |
scroll-snap-stop | normal, always | Force lâarrĂȘt Ă cet Ă©lĂ©ment |
scroll-behavior | smooth | Scroll fluide (pas obligatoire, mais recommandé) |
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.
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é */
}
blur(5px)
grayscale(100%)
brightness(1.5)
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.filter: blur(2px) brightness(1.2);
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 */
}
hue-rotate(90deg)
saturate(300%)
invert(100%)
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.filter: invert(1) hue-rotate(180deg); â simulateur de daltonisme.
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 */
}
Filtre âdramatiqueâ
Filtre âvintageâ
Mode nuit (invert + hue-rotate)
blur() hue-rotate() â hue-rotate() blur().--filter-theme: brightness(0.9) saturate(110%);
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;
}
backdrop-filter: blur(10px);backdrop-filter â applique un filtre Ă tout ce qui est derriĂšre lâĂ©lĂ©ment.-webkit-backdrop-filter pour Safari.
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;
}
mix-blend-mode â mĂ©lange lâĂ©lĂ©ment avec tout ce qui est en dessous (arriĂšre-plan, autres Ă©lĂ©ments).multiply â assombrit, garde les noirs.screen â Ă©claircit, garde les blancs.overlay â combine multiply + screen.difference â effet ânĂ©gatifâ crĂ©atif.
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Ă©...).mix-blend-mode : multiply, screen, overlay, etc.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.
blur() Ă©levĂ©) sur des Ă©lĂ©ments animĂ©s ou scrollants â peut causer des lags.grayscale ou hue-rotate sur du texte â peut nuire Ă la lisibilitĂ©.background-blend-mode pour des effets de texture ou de lumiĂšre.--filter-hover: brightness(1.1) saturate(120%);| PropriĂ©tĂ© | Valeurs courantes | Description |
|---|---|---|
filter | blur(5px), grayscale(100%), brightness(1.5) | Effets sur lâĂ©lĂ©ment |
backdrop-filter | blur(10px), grayscale(50%) | Effets sur lâarriĂšre-plan (verre dĂ©poli) |
mix-blend-mode | multiply, screen, overlay, difference | Mélange avec les éléments en-dessous |
background-blend-mode | multiply, screen, overlay | Mé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) |
Voici quelques ressources utiles pour approfondir votre compréhension du CSS :
click here to download
html_css.pdf