Comment cibler une partie d’une page Web à l’aide de sélecteurs CSS »wiki utile

Les feuilles de style en cascade (CSS) vous permettent de transformer l'apparence de vos pages Web. Des polices et couleurs à l'espacement et à la mise en page générale, toutes sortes d'outils de conception sont à portée de main. Bien que le CSS soit un langage compliqué dans son intégralité, il n'y a que deux concepts de base que vous devez comprendre pour commencer.

Tout commence par identifier exactement la partie de la page que vous souhaitez styliser.

CSS = sélecteurs + déclarations

Un fichier CSS contient une série de règles décrivant comment un fichier HTML doit être formaté. Chaque règle se compose de deux parties: quoi styliser et comment le styliser. La première partie est contrôlée à l'aide d'une série de termes appelés «sélecteurs».

Les exemples de cet article incluent des déclarations de style, mais elles ne sont pas le focus: les sélecteurs eux-mêmes le sont.

Historiquement, il y avait trois niveaux de sélecteur CSS (ou versions) avec différents degrés de prise en charge du navigateur. En 2020, selon Can I Use , ils sont tous disponibles pour plus de 99% des utilisateurs dans le monde.

Sélecteurs de niveau 1

Le niveau 1 a introduit les quatre types fondamentaux de sélecteurs qui couvrent un grand nombre de cas, même aujourd'hui.

Modèle Allumettes
E tous les éléments E
.c tous les éléments avec class = "c"
#myid l'élément avec id = "myid"
EF un élément F à l'intérieur d'un élément E
Pseudo-classes
E:link un lien hypertexte vers une page qui n'a pas été précédemment visitée
E:visited un lien hypertexte vers une page déjà visitée
E:active un lien hypertexte actuellement sélectionné
Pseudo-éléments
E::first-line la première ligne formatée d'un élément E
E::first-letter la première lettre formatée d'un élément E

Sélecteur de type

Le sélecteur le plus simple est le «sélecteur de type». Il cible toutes les instances d'un élément, comme un paragraphe ou du texte en gras:

 p { margin-bottom: 0; }
b { font-family: sans-serif; }

Sélecteur de classe

L'attribut class permet d'ajouter une sémantique supplémentaire à un élément HTML, tel qu'un type spécifique de paragraphe. Ces éléments peuvent être sélectionnés dans CSS comme suit:

 .intro { font-weight: bold; }

Ce sélecteur correspondrait:

 <p class="intro">…</p>

Mais notez qu'il correspondrait également:

 <ul class="intro">…</ul>

Si vous souhaitez qu'il s'applique uniquement aux paragraphes d'introduction, vous pouvez combiner le sélecteur de type et le sélecteur de classe:

 p.intro { font-weight: bold; }

Sélecteur d'ID

L'attribut HTML id doit être unique dans un document, par exemple si vous avez:

 <div id="contents">…</div>

Cela devrait être le seul élément avec un identifiant «contenu». Un sélecteur d'ID vous permet de cibler cet élément spécifique dans un document:

 #contents { color: #333; }

Sélecteur de descendant

Strictement, un «combinateur», car ce sélecteur est tout au sujet de l'espace entre deux autres. Le HTML est hiérarchique, comme expliqué dans notre présentation du DOM . Un sélecteur descendant permet d'identifier un élément par son contexte à l'intérieur d'un autre élément:

 table b { font-weight: normal; }

Pseudo classes et éléments

Les pseudo sélecteurs ciblent des classes ou des éléments qui n'existent pas explicitement mais qui sont quand même rendus disponibles. Considérez-les comme des bonus de contenu spéciaux:

 p::first-line { text-transform: uppercase; }

Listes de sélection

Utilisez une virgule pour combiner les sélecteurs dans une liste si vous souhaitez appliquer le même ensemble de règles à chacun. Au lieu de:

 th { padding: 1em; }
td { padding: 1em; }

Tu peux écrire:

 th, td { padding: 1em; }

Spécificité

Une feuille de style est une série de règles qui utilisent un sélecteur pour faire correspondre un élément, mais que se passe-t-il lorsque plusieurs règles correspondent à un élément donné? Le comportement qui en résulte est régi par la «spécificité» qui définit quelle règle est utilisée dans un cas tel que:

 p.intro { color: black; }
p { color: gray; }

Dans de tels cas, la règle prioritaire est définie par sa spécificité, comme suit:

  1. Les sélecteurs d'identifiant (`# contents`) sont les plus spécifiques.
  2. Les sélecteurs de classe («.author») sont moins spécifiques.
  3. Les sélecteurs de type («p») sont les moins spécifiques.

Lors du calcul de la spécificité, chaque niveau n'est pris en compte que si deux sélecteurs ont le même score au niveau supérieur, donc "#contents" est plus spécifique que "article.news p.author.special" car l'ancien "gagne" sur les sélecteurs d'ID.

Sélecteurs de niveau 2

La prochaine révision des sélecteurs CSS a introduit les sélecteurs d'attributs, développé les pseudo-classes et pseudo-éléments, et ajouté deux nouveaux combinateurs.

Modèle Allumettes
* tout élément
E > F un élément F enfant d'un élément E
E + F un élément F immédiatement précédé d'un élément E
Sélecteurs d'attributs
E[foo] un élément E avec un attribut "foo"
E[foo="bar"] un élément E dont l'attribut "foo" est exactement "bar"
E[foo~="bar"] un élément E dont l'attribut "foo" est une liste de valeurs séparées par des espaces, dont l'une est "bar"
E[foo|="en"] un élément E dont l'attribut "foo" a une liste de valeurs séparées par des tirets commençant par "en"
Pseudo-classes
E:first-child un élément E, premier enfant de son parent
E:lang(fr) un élément de type E dans la langue "fr"
Pseudo-éléments
E::before contenu généré avant le contenu d'un élément E
E::after contenu généré après le contenu d'un élément E

Sélecteur universel

Le «*» correspond à n'importe quel élément. Ce n'est souvent pas très utile, mais si vous souhaitez réinitialiser les marges par défaut, par exemple, vous pouvez le faire:

 * { margin: 0; }

Sélecteurs d'attributs

Les sélecteurs d'attributs permettent aux styles d'être ciblés très spécifiquement, filtrés par l'attribut d'un élément:

 a[title] { text-decoration: underline dotted; }

Combinateur d'enfant: un élément immédiatement à l'intérieur d'un autre

Similaire au combinateur descendant, mais celui-ci ne correspond qu'aux enfants immédiats, pas aux descendants plus bas dans l'arbre. Par exemple, «ul> li» correspondra uniquement au texte «Section 1» ici, et non à «Section 1.1»:

 <ul>
<li>
Section 1
<ul>
<li>Section 1.1</li>
<li>Section 1.2</li>
</ul>
<li>
</ul>

Combinateur de frères et sœurs adjacents: le prochain frère

 h1 + p { font-weight: bold; }

Souvent utile pour contrôler les marges, ou un paragraphe d'introduction sans classe spécifique, ce sélecteur ne correspond à un élément que s'il en suit immédiatement un autre. Dans l'exemple, seul le premier paragraphe sera mis en correspondance, pas le second:

 <h1>Contents</h1>
some extra text
<p>Introductory paragraph</p>
<p>Following paragraph</p>

Notez que ce sélecteur ne prend en compte que les éléments (et non le texte) pour décider quel est le prochain frère.

Héritage

Certaines propriétés CSS héritent de leur valeur d'un élément ancêtre. En pratique, cela signifie, par exemple, que la définition de la police de l'élément «corps» signifie que chaque paragraphe, tableau, etc. utilise également cette même police.

Bien sûr, c'est exactement ce à quoi vous vous attendez, mais considérez une propriété qui n'hérite pas: «margin», par exemple. Vous ne voudriez pas que chaque paragraphe ou chaque morceau de texte en gras ait la même marge que l'ensemble du document.

En relation: Exemples de code CSS simples que vous pouvez apprendre en 10 minutes

Une bonne règle de base est de cibler les éléments aussi généralement que cela a du sens – ne ciblez pas chaque élément individuel quand un simple sélecteur «corps» fera l'affaire.

Sélecteurs de niveau 3

De nombreuses pseudo-classes ont été ajoutées à ce niveau, aux côtés de certains sélecteurs d'attributs et d'un nouveau combinateur.

Modèle Allumettes
E ~ F un élément F précédé d'un élément E
Sélecteurs d'attributs
E[foo^="bar"] un élément E dont l'attribut "foo" commence par la chaîne "bar"
E[foo$="bar"] un élément E dont l'attribut "foo" se termine par la chaîne "bar"
E[foo*="bar"] un élément E dont l'attribut "foo" contient la sous-chaîne "bar"
Pseudo-classes
E:root un élément E, racine du document
E:nth-child(n) un élément E, le n-ième enfant de son parent
E:nth-last-child(n) un élément E, le n-ième enfant de son parent, à partir du dernier
E:nth-of-type(n) un élément E, le n-ième frère de son type
E:nth-last-of-type(n) un élément E, le n-ième frère de son type, à compter du dernier
E:last-child un élément E, dernier enfant de son parent
E:first-of-type un élément E, premier frère de son type
E:last-of-type un élément E, dernier frère de son type
E:only-child un élément E, seul enfant de son parent
E:only-of-type un élément E, seul frère de son type
E:empty un élément E qui n'a pas d'enfants (y compris les nœuds de texte)
E:target un élément E étant la cible de l'URI référent
E:enabled un élément d'interface utilisateur E qui est activé
E:disabled un élément d'interface utilisateur E qui est désactivé
E:checked un élément d'interface utilisateur E qui est vérifié
E:not(s) un élément E qui ne correspond pas aux sélecteurs simples

Sélecteurs d'attributs

Vous pouvez sélectionner des éléments avec un attribut commençant par une valeur donnée: a[href^="https:"] , se terminant par une valeur donnée: img[src$=".gif"] , ou contenant une valeur: a[*="value"] .

Pseudo classes

Les pseudo-classes supplémentaires incluent «: last-child», «: empty» (pour correspondre à un élément sans contenu) et «: checked» qui correspond à un élément comme une entrée de case à cocher, mais uniquement lorsqu'il est coché.

Combinateur général des frères et sœurs: un frère ou une sœur suivant

Semblable au combinateur de frères et sœurs adjacents du niveau 2, cela correspond à n'importe quel frère qui vient après un autre, pas seulement le suivant:

 h1 ~ p { font-size: 110%; }

Sélecteurs CSS et comment les utiliser

Vous savez maintenant à peu près tout ce qu'il faut savoir sur la façon de sélectionner une partie d'une page Web en utilisant CSS. Vous êtes maintenant prêt à styliser vos pages avec la grande variété de propriétés CSS qui couvrent tout, des couleurs à la mise en page.

Crédit d'image: Pankaj Patel / Unsplash