Aller au contenu principal

📚 Variables CSS

Les variables CSS permettent de stocker des valeurs réutilisables dans votre code CSS. Elles facilitent la maintenance et la cohérence de votre visuel.

Syntaxe de base

Déclarer une variable

Les variables CSS commencent toujours par deux tirets (--) et sont déclarées dans un sélecteur.

:root {
--couleur-principale: #0b3755;
--espacement-base: 16px;
--police-titre: 'Arial', sans-serif;
}
info

:root est le sélecteur le plus courant pour déclarer des variables globales. Il cible l'élément racine du document (généralement <html>).

Utiliser une variable

Pour utiliser une variable, on utilise la fonction var().

.titre {
color: var(--couleur-principale);
font-family: var(--police-titre);
margin-bottom: var(--espacement-base);
}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <h1 class="titre">Titre principal</h1>
  <p class="texte">Ceci est un paragraphe.</p>
  <button class="bouton">Bouton d'action (couleur principale)</button>
</body>
</html>

Portée des variables (Scope)

Variables globales

Les variables déclarées dans :root sont accessibles partout dans le document.

:root {
--couleur-principale: #0b3755;
--couleur-secondaire: #bfbfbf;
}

/* Accessible partout */
h1 { color: var(--couleur-principale); }
p { color: var(--couleur-secondaire); }

Variables locales

Les variables déclarées dans un sélecteur spécifique ne sont accessibles que dans ce sélecteur et ses enfants.

.carte {
--couleur-fond: #ecf0f1;
--espacement-interne: 20px;

background-color: var(--couleur-fond);
padding: var(--espacement-interne);
}

.carte p {
/* Accessible car p est enfant de .carte */
margin: var(--espacement-interne);
}

.autre-element {
/* NE FONCTIONNE PAS - variable non accessible ici si l'élément n'est pas un enfant de ".carte" */
padding: var(--espacement-interne);
}

Valeurs par défaut (Fallback)

La fonction var() accepte une deuxième valeur comme secours si la variable n'existe pas.

.element {
/* Si --couleur-principale n'existe pas, utilise #3498db */
color: var(--couleur-principale, #0b3755);

/* Peut aussi être une autre variable */
padding: var(--espacement-grand, var(--espacement-base, 16px));
}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="exemple-1">
      <p>Ce div utilise la variable définie var(--couleur-definie, #e74c3c).</p>
  </div>
  
  <div class="exemple-2">
      <p>Ce div utilise la valeur par défaut car la variable n'existe pas: var(--couleur-non-definie, #e74c3c)</p>
  </div>
</body>
</html>

Cas d'usage pratiques

Palette de couleurs

Les variables CSS sont parfaites pour définir une palette de couleurs cohérente.

:root {
/* Couleurs principales */
--couleur-principale: #0b3755;
--couleur-secondaire: #ebf0f5;
--couleur-accent: #e74c3c;

/* Couleurs de texte */
--texte-principal: #2c3e50;
--texte-secondaire: #7f8c8d;
--texte-clair: #ecf0f1;

/* Couleurs de fond */
--fond-page: #ffffff;
--fond-section: #f8f9fa;
--fond-carte: #ffffff;
}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="conteneur">
      <h1>Palette de couleurs cohérente</h1>
      <p class="texte-secondaire">Sous-titre avec texte secondaire</p>
      
      <div class="carte">
          <h3>Carte exemple</h3>
          <p>Contenu de la carte avec texte principal.</p>
          <button class="bouton-primaire">Action principale</button>
          <button class="bouton-secondaire">Action secondaire</button>
      </div>
      
      <div class="alerte">
          <strong>Attention!</strong> Message important.
      </div>
  </div>
</body>
</html>

Système d'espacement

Définir un système d'espacement cohérent facilite la mise en page.

:root {
--espace-xs: 4px;
--espace-sm: 8px;
--espace-md: 16px;
--espace-lg: 24px;
--espace-xl: 32px;
--espace-xxl: 48px;
}

.section {
padding: var(--espace-lg);
margin-bottom: var(--espace-xl);
}

.bouton {
padding: var(--espace-sm) var(--espace-md);
margin: var(--espace-xs);
}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="section">
      <h2>Section avec espacement cohérent</h2>
      <p class="paragraphe">Paragraphe avec marges standardisées.</p>
      <p class="paragraphe">Un autre paragraphe.</p>
      
      <div class="boutons">
          <button class="bouton">Petit</button>
          <button class="bouton-large">Moyen</button>
          <button class="bouton-xlarge">Grand</button>
      </div>
  </div>
</body>
</html>

Tailles de police

Un système de tailles de police cohérent améliore la hiérarchie typographique.

:root {
--taille-xs: 12px;
--taille-sm: 14px;
--taille-base: 16px;
--taille-lg: 18px;
--taille-xl: 24px;
--taille-2xl: 32px;
--taille-3xl: 48px;
}

h1 { font-size: var(--taille-3xl); }
h2 { font-size: var(--taille-2xl); }
h3 { font-size: var(--taille-xl); }
p { font-size: var(--taille-base); }
small { font-size: var(--taille-sm); }
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <h1>Titre principal (48px)</h1>
  <h2>Sous-titre (32px)</h2>
  <h3>Titre de section (24px)</h3>
  <p>Paragraphe normal (16px). Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <p class="texte-petit">Texte petit (14px). Information secondaire.</p>
  <p class="texte-tres-petit">Texte très petit (12px). Note de bas de page.</p>
</body>
</html>

Bonnes pratiques

Nommage cohérent

Utilisez une convention de nommage claire et cohérente.

:root {
/* Bon: noms descriptifs et cohérents */
--couleur-principale: #0b3755;
--couleur-secondaire: #ebf0f5;
--espacement-petit: 8px;
--espacement-moyen: 16px;

/* À éviter: noms vagues ou incohérents */
--bleu: #3498db;
--color2: #2ecc71;
--space1: 8px;
--padding-md: 16px;
}
attention

Ne nommez jamais vos variables en fonction de noms de couleur! (ex.: --rouge). Utilisez plutôt le rôle de la couleur (--texte-principal, --couleur-principale). Comme cela, vous n'êtes pas attachés à une couleur et le nom de votre variable demeurre pertinent même si vous changez le thème de couleurs!

Organisation par catégories

Groupez vos variables par catégories logiques.

:root {
/* Couleurs */
--couleur-primaire: #3498db;
--couleur-secondaire: #2ecc71;
--couleur-erreur: #e74c3c;

/* Espacements */
--espace-xs: 4px;
--espace-sm: 8px;
--espace-md: 16px;

/* Typographie */
--taille-texte-base: 16px;
--taille-titre: 32px;
--police-principale: 'Arial', sans-serif;

/* Bordures */
--rayon-bordure: 4px;
--rayon-bordure-large: 8px;
}