CSS - Cascade, spécificité et héritage

Cascade, spécificité et héritage

CSS : Cascading Style Sheets

Plusieurs règles peuvent être en conflit : appliquent des valeurs différentes à propriété sur un même élément.

Cascade

  1. Ordre du code source [1]

  2. Spécificité

  3. Importance

Eviter des répétitions dans les feuilles de style: définir des styles génériques pour éléments de base, puis créer des classes pour les éléments différents.

<style>
h2 {
  font-size: 2em;
  color: #000;
  font-family: Georgia, 'Times New Roman', Times, serif;
}

.small {
  font-size: 1em;
}

.bright {
  color: rebeccapurple;
}
</style>
<h2>Heading with no class</h2>
<h2 class="small">Heading with class of small</h2>
<h2 class="bright">Heading with class of bright</h2>
1. Par ordre croissant d’importance

Spécificité

Spécificité [1]

quels styles sont appliqués quand plusieurs règles pourraient s’appliquer. Calculée en fonction des types de sélecteurs utilisés.

Mesure la précision d’un sélecteur.

Ex. sélecteur de classe plus spécifique que élément (et donc s’applique)

.main-heading {
  color: red;
}
h1 {
  color: blue;
}
<h1 class="main-heading">This is my heading.</h1>

Spécificité en bref

  • CSS en incise (attribut style="…​")[1]

  • Sélecteur d’ID (#nom_de_l_identifiant)

  • Sélecteur de classe (.nom_de_classe), d’attribut (ex. role="region") et pseudo-classes (ex. :visited)

  • Sélecteur de type (nom d’élément, ex. a , body …​) et pseudo-elements (ex. ::after)

  • Sélecteur universel (*)

1. Du plus spécifique au moins spécifique

Calcul de spécificité

Valeur en 4 parties : ( a , b , c , d ).

  • a : styles en incise (1 ou 0) [1]

  • b : nombre de sélecteurs ID (+1)

  • c : nombre de sélecteurs de classes, d’attributs, et pseudo-classes (+1)

  • d : nombre de sélecteurs de types, pseudo-elements(+1) [2]

1. écrase même les styles externes et internes car s’applique directement sur l’élément
2. universels contribue à 0

Emplacement

  • Style du navigateur (par défaut) [1]

  • Feuilles de style utilisateur [2]

  • Feuilles de style du site

  • !important des feuilles de style du site

  • !important des feuilles de style utilisateur

  • !important des feuilles de style du navigateur

1. les déclérations sont appliquées dans l’ordre suivant. Celles qui arrivent après dans la liste l’emportent sur éléments antérieurs
2. ex. avec l’extension Stylus (chromium, firefox

ex - style en incise

(1, 0, 0, 0)

<p style="color:green"> Ce texte est vert</p>

ex - classe

(0, 1, 0, 0)

<head>
    <style>
        .success {
            background-color: limegreen;
        }
    </style>
</head>
<body>
    <button class="success">OK</button>
</body>

ex - style externe

(0, 0, 1, 0)

<head>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="encart">La couleur du texte de l'encart est définie dans un fichier CSS externe.</div>
</body>

Exemple recap

SélecteurIdentifiantsClassesÉlémentsSpécificité totale

h1

0

0

1

0-0-1

h1 + p::first-letter

0

0

3

0-0-3

li > a[href*="en-US"] > .inline-warning

0

2

2

0-2-2

#identifier

1

0

0

1-0-0

button:not(#mainBtn, .cta)

1

0

1

1-0-1

L’héritage CSS

Comment les styles sont passés aux enfants [1]. Pour avoir des styles cohérentss sur le document entier. Permet de réduire les répétitions, plus concis et facile à maintenir.

  • de parent vers enfant (pas dans l’autre sens)

  • certains propriétés hérités par défaut

    • ex. font-family, color, line-height

  • d’autres non

    • ex. margin, padding, border, background

      inherit

      force l’héritage depuis le parent même si la propriété n’est pas héritée par défaut

Sur chaque page MDN documentant une propriété CSS, vous pourrez voir un encart intitulé « Définition formelle » qui indique les caractéristiques de cette propriété et notamment son caractère hérité ou non.

Controler l’héritage

5 valeurs spéciales pour contrôler l’héritage[1].

inherit

Applique la valeur de l’élément parent sur l’élément ciblé. Cela « force » l’héritage.

initial

Applique la valeur initiale de la propriété sur l’élément ciblé.

revert

Réinitialise la valeur de la propriété de l’élément ciblé avec la mise en forme par défaut du navigateur. Cette valeur agit comme unset dans la plupart des cas.

revert-layer

Réinitialise la valeur de la propriété de l’élément ciblé avec celle établie dans une couche de cascade précédente.

unset

Réinitialise la propriété avec sa valeur naturelle. Autrement dit, si la propriété est naturellement héritée, ce mot-clé sera synonyme de inherit, sinon, il sera synonyme de initial.

Réinitialiser les valeurs de toutes les propriétés

`all`[1]

propriété raccourcie. Applique une valeur d’héritage à (presque) toutes les propriétés.

Pratique pour annuler les modifications appliquées à des mises en forme et revenir à un point de départ connu avant d’appliquer d’autres modifications.