Maison > interface Web > tutoriel CSS > Comment le CSS: est, où et: les sélecteurs de pseudo-classe fonctionnent-ils

Comment le CSS: est, où et: les sélecteurs de pseudo-classe fonctionnent-ils

Joseph Gordon-Levitt
Libérer: 2025-02-09 11:38:10
original
598 Les gens l'ont consulté

Comment le CSS: est, où et: les sélecteurs de pseudo-classe fonctionnent-ils

Les plats clés

  • Les sélecteurs de pseudo-claire CSS: IS () ,: où (), et: a () fournir de nouvelles façons de cibler les éléments HTML. Le sélecteur: IS () permet un style plus efficace de plusieurs éléments, réduisant le besoin de chaînes de sélecteur verbeux. Le sélecteur: où () fonctionne de manière similaire à: est (), mais avec une spécificité nulle, ce qui le rend utile pour appliquer des styles de base sans augmenter la spécificité. Le sélecteur: a () cible un élément contenant un ensemble d'autres, offrant un moyen tant attendu de cibler les éléments parents.
  • le: est () et: où () les sélecteurs de pseudo-classe sont pris en charge dans tous les navigateurs modernes, mais pas dans Internet Explorer. Le sélecteur: a () est plus récent avec un support limité actuellement, mais devrait être largement disponible d'ici 2023. L'utilisation de ces sélecteurs peut simplifier la syntaxe CSS et réduire le besoin de préprocesseurs CSS.
  • La spécificité de: est () et: où () les sélecteurs diffèrent. Le sélecteur: IS () a la même spécificité que le sélecteur le plus spécifique dans ses arguments, tandis que le sélecteur: où () a une spécificité nulle. Cela peut être pratique pour les réinitialisations du CSS, qui appliquent une base de styles de base lorsqu'aucun style spécifique n'est disponible, permettant de remplacer tout style de réinitialisation CSS quelle que soit la spécificité.
Les sélecteurs CSS vous permettent de choisir des éléments par type, attributs ou emplacement dans le document HTML. Ce tutoriel explique trois nouvelles options -: is () ,: où (), et: a (). Les sélecteurs sont couramment utilisés dans les feuilles de style. L'exemple suivant localise tous les éléments de paragraphe

et change le poids de la police en gras:

<span>p {
</span>  <span>font-weight: bold;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Vous pouvez également utiliser des sélecteurs en JavaScript pour localiser les nœuds DOM:
  • Document.QuerySelector () Renvoie le premier élément HTML correspondant
  • Document.QuerySelectorall () Renvoie tous les éléments HTML correspondants dans un NodeList de type tableau
Les sélecteurs de pseudo-classe ciblent les éléments HTML en fonction de leur état actuel. Le plus connu est peut-être le plus connu: Hover, qui applique des styles lorsque le curseur se déplace sur un élément, il est donc utilisé pour mettre en surbrillance les liens et les boutons cliquables. Les autres options populaires comprennent:
  • : Visité: correspond aux liens visités
  • : Target: correspond à un élément ciblé par une URL de document
  • : Premier-enfant: cible le premier élément enfant
  • : nième-enfant: sélectionne des éléments enfants spécifiques
  • : vide: correspond à un élément sans contenu ni éléments enfants
  • : coché: correspond à une case à cocher à baisse ou à un bouton radio
  • : blanc: styles un champ de saisie vide
  • : Activé: correspond à un champ de saisie activé
  • : Désactivé: correspond à un champ de saisie désactivé
  • : requis: cible un champ de saisie requis
  • : valide: correspond à un champ de saisie valide
  • : non valide: correspond à un champ de saisie non valide
  • : Playing: cible un élément audio ou vidéo de lecture
Les navigateurs ont récemment reçu trois autres sélecteurs de classe pseudo…

le CSS: est le sélecteur de pseudo-classe

Remarque: il a été initialement spécifié comme: Matches () et: tout (), mais: est () est devenu la norme CSS. Vous devez souvent appliquer le même style à plus d'un élément. Par exemple, le texte de paragraphe

est noir par défaut, mais gris lorsqu'il apparaît dans un

, ou <span>p { </span> <span>font-weight: bold; </span><span>} </span> Ceci est un exemple simple, mais des pages plus sophistiquées conduiront à des chaînes de sélecteur plus compliquées et verbales. Une erreur de syntaxe dans n'importe quel sélecteur pourrait casser le style pour tous les éléments. Prérocesseurs CSS tels que Sass permettent la nidification (qui arrive également au CSS natif):
<span>/* default black */
</span><span>p {
</span>  <span>color: #000;
</span><span>}
</span>
<span>/* gray in <article>, <section>, or <aside> */
</span><span>article p<span>,
</span></span><span>section p<span>,
</span></span><span>aside p {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Cela crée un code CSS identique, réduit l'effort de frappe et peut empêcher les erreurs. Mais:
  • jusqu'à ce que la nidification native arrive, vous aurez besoin d'un outil de construction CSS. Vous voudrez peut-être utiliser une option comme SASS, mais cela peut introduire des complications pour certaines équipes de développement.
  • La nidification peut causer d'autres problèmes. Il est facile de construire des sélecteurs profondément imbriqués qui deviennent de plus en plus difficiles à lire et à sortir Verbose CSS.
: is () fournit une solution CSS native qui a un support complet dans tous les navigateurs modernes (pas IE):
<span>article, section, aside {
</span>
  <span>p {
</span>    <span>color: #444;
</span>  <span>}
</span>
<span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Un seul sélecteur peut contenir n'importe quel nombre de: est () pseudo-classes. Par exemple, le sélecteur complexe suivant applique une couleur de texte vert à tous les éléments

,

et

qui sont des enfants d'un qui a une classe de. Primaire ou. Le premier enfant d'un

:
<span><span>:is(article, section, aside) p</span> {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Le code équivalent sans: est () requis six sélecteurs CSS:
<span>article section<span>:not(:first-child):is(.primary, .secondary) :is(h1, h2, p)</span> {
</span>  <span>color: green;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Notez que: est () ne peut pas correspondre à :: avant et :: après les pseudo-éléments, donc cet exemple de code échouera:
<span>article section<span>.primary:not(:first-child) h1,
</span></span><span>article section<span>.primary:not(:first-child) h2,
</span></span><span>article section<span>.primary:not(:first-child) p,
</span></span><span>article section<span>.secondary:not(:first-child) h1,
</span></span><span>article section<span>.secondary:not(:first-child) h2,
</span></span><span>article section<span>.secondary:not(:first-child) p</span> {
</span>  <span>color: green;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

Le CSS: où le sélecteur de pseudo-classe

: où () la syntaxe du sélecteur est identique à: est () et est également prise en charge dans tous les navigateurs modernes (pas IE). Cela entraînera souvent un style identique. Par exemple:
<span>/* NOT VALID - selector will not work */
</span><span>div<span>:is(::before, ::after)</span> {
</span>  <span>display: block;
</span>  <span>content: '';
</span>  <span>width: 1em;
</span>  <span>height: 1em;
</span>  <span>color: blue;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
La différence est Spécificité . La spécificité est l'algorithme utilisé pour déterminer quel sélecteur CSS doit remplacer tous les autres. Dans l'exemple suivant, l'article P est plus spécifique que P seul, donc tous les éléments de paragraphe dans un
seront gris:
<span><span>:where(article, section, aside) p</span> {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Dans le cas de: est (), la spécificité est le sélecteur le plus spécifique trouvé dans ses arguments. Dans le cas de: où (), la spécificité est nulle. Considérez le CSS suivant:
<span>article p { color: #444; }
</span><span>p { color: #000; }
</span>
Copier après la connexion
Appliquons ce CSS au HTML suivant:
<span>article p {
</span>  <span>color: black;
</span><span>}
</span>
<span><span>:is(article, section, aside) p</span> {
</span>  <span>color: red;
</span><span>}
</span>
<span><span>:where(article, section, aside) p</span> {
</span>  <span>color: blue;
</span><span>}
</span>
Copier après la connexion
Le texte du paragraphe sera coloré en rouge, comme le montre la démo de codep suivante.

Voir le stylo Utilisation du: est sélecteur par SitePoint (@SitePoint) sur Codepen.

Le sélecteur: est () a la même spécificité que l'article P, mais il vient plus tard dans la feuille de style, donc le texte devient rouge. Il est nécessaire de supprimer à la fois les sélecteurs de l'article P et: est () pour appliquer une couleur bleue, car le sélecteur: où () est moins spécifique que l'un ou l'autre. Plus de bases de code utiliseront: est () que: où (). Cependant, la spécificité zéro de: où () pourrait être pratique pour les réinitialisations du CSS, qui appliquent une base de référence des styles standard lorsqu'aucun style spécifique n'est disponible. En règle générale, les réinitialisations appliquent une police par défaut, des couleurs, des paddages et des marges. Ce code de réinitialisation CSS applique une marge supérieure de 1EM à

les en-têtes à moins que ne soit le premier enfant d'un élément
:
<span>p {
</span>  <span>font-weight: bold;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Tenter de définir une marge supérieure

personnalisée plus tard dans la feuille de style n'a aucun effet, car l'article: First-enfant a une spécificité plus élevée:
<span>/* default black */
</span><span>p {
</span>  <span>color: #000;
</span><span>}
</span>
<span>/* gray in <article>, <section>, or <aside> */
</span><span>article p<span>,
</span></span><span>section p<span>,
</span></span><span>aside p {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Vous pouvez résoudre ce problème en utilisant un sélecteur de spécificité supérieure, mais c'est plus de code et pas nécessairement évident pour les autres développeurs. Vous finirez par oublier pourquoi vous l'avez besoin:
<span>article, section, aside {
</span>
  <span>p {
</span>    <span>color: #444;
</span>  <span>}
</span>
<span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Vous pouvez également résoudre le problème en appliquant! Important à chaque style, mais Veuillez éviter de le faire! Cela rend plus difficile le style et le développement:
<span><span>:is(article, section, aside) p</span> {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Un meilleur choix consiste à adopter la spécificité zéro de: où () dans votre réinitialisation CSS:
<span>article section<span>:not(:first-child):is(.primary, .secondary) :is(h1, h2, p)</span> {
</span>  <span>color: green;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Vous pouvez désormais remplacer tout style de réinitialisation CSS quelle que soit la spécificité; Il n'y a pas besoin de sélecteurs supplémentaires ou! IMPORTANT:
<span>article section<span>.primary:not(:first-child) h1,
</span></span><span>article section<span>.primary:not(:first-child) h2,
</span></span><span>article section<span>.primary:not(:first-child) p,
</span></span><span>article section<span>.secondary:not(:first-child) h1,
</span></span><span>article section<span>.secondary:not(:first-child) h2,
</span></span><span>article section<span>.secondary:not(:first-child) p</span> {
</span>  <span>color: green;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion

Le CSS: a un sélecteur de pseudo-classe

Le sélecteur: a () utilise une syntaxe similaire pour: est () et: où (), mais il cible un élément qui contient un ensemble d'autres. Par exemple, voici le CSS pour ajouter une bordure bleue à deux pixels à n'importe quel lien qui contient une ou plusieurs balises ou
:
<span>/* NOT VALID - selector will not work */
</span><span>div<span>:is(::before, ::after)</span> {
</span>  <span>display: block;
</span>  <span>content: '';
</span>  <span>width: 1em;
</span>  <span>height: 1em;
</span>  <span>color: blue;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
C'est le développement CSS le plus excitant depuis des décennies! Les développeurs ont enfin un moyen de cibler les éléments parents! Le «sélecteur parent» insaisissable a été l'une des fonctionnalités CSS les plus demandées, mais elle augmente les complications de performance pour les fournisseurs de navigateurs, et cela a été longtemps à venir. En termes simplistes:
  • Les navigateurs appliquent les styles CSS à un élément lorsqu'il est dessiné sur la page. L'ensemble de l'élément parent doit donc être redéfini lors de l'ajout d'éléments enfants.
  • L'ajout, la suppression ou la modification des éléments en JavaScript pourrait affecter le style de toute la page jusqu'à l'enclosage .
En supposant que les fournisseurs ont résolu les problèmes de performance, l'introduction de: a () permet des possibilités qui auraient été impossibles sans JavaScript dans le passé. Par exemple, vous pouvez définir les styles d'une forme extérieure
et le bouton de soumission suivant lorsque tout champ intérieur requis n'est pas valide:
<span>p {
</span>  <span>font-weight: bold;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Comment le CSS: est, où et: les sélecteurs de pseudo-classe fonctionnent-ils Cet exemple ajoute un indicateur sous-menu de liaison de navigation qui contient une liste des éléments du menu des enfants:
<span>/* default black */
</span><span>p {
</span>  <span>color: #000;
</span><span>}
</span>
<span>/* gray in <article>, <section>, or <aside> */
</span><span>article p<span>,
</span></span><span>section p<span>,
</span></span><span>aside p {
</span>  <span>color: #444;
</span><span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Ou peut-être pourriez-vous ajouter des styles de débogage, tels que la mise en évidence de tous les éléments
sans IMG intérieur:
<span>article, section, aside {
</span>
  <span>p {
</span>    <span>color: #444;
</span>  <span>}
</span>
<span>}
</span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Comment le CSS: est, où et: les sélecteurs de pseudo-classe fonctionnent-ils Avant de sauter dans votre éditeur et de refacter votre base de code CSS, sachez que: a () est nouveau et le support est plus limité que pour: est () et: où (). Il est disponible dans Safari 15.4 et Chrome 101 derrière un drapeau expérimental, mais il devrait être largement disponible d'ici 2023.

Résumé du sélecteur

Le: est () et: où () sélecteurs de pseudo-classe simplifient la syntaxe CSS. Vous aurez moins besoin de nidification et de préprocesseurs CSS (bien que ces outils fournissent d'autres avantages tels que les partiels, les boucles et les minifications). : a () est considérablement plus révolutionnaire et excitant. La sélection des parents deviendra rapidement populaire, et nous oublierons les temps sombres! Nous publierons un tutoriel complet: a () lorsqu'il sera disponible dans tous les navigateurs modernes. Si vous souhaitez creuser plus profondément aux sélecteurs de pseudo-classe CSS - ainsi que toutes les autres choses CSS, telles que Grid et Flexbox - consultez le livre impressionnant CSS Master , par Tiffany Brown.

Questions fréquemment posées (FAQ) sur CSS: est () et: où () sélecteurs de pseudo-classe

Quelle est la principale différence entre: est () et: où () sélecteurs de classe pseudo réside dans leur spécificité. Le sélecteur de pseudo-classe: est () a la même spécificité que le sélecteur placé à l'intérieur. D'un autre côté, le sélecteur de pseudo-classe: où () n'a pas de spécificité, ce qui signifie qu'il ne contribue pas à la spécificité globale d'un sélecteur. Cela peut être particulièrement utile lorsque vous souhaitez appliquer des styles à un groupe d'éléments sans augmenter la spécificité.

Puis-je utiliser: est () et: où () sélecteurs de classe pseudo avec toutes les propriétés CSS?

Oui, vous pouvez utiliser: is () et: où () sélecteurs de classe pseudo avec toutes les propriétés CSS. Ces sélecteurs de pseudo-classe ne sont pas liés à des propriétés CSS spécifiques. Ils sont utilisés pour sélectionner des éléments en fonction de certaines conditions, et vous pouvez appliquer n'importe quelle propriété CSS aux éléments sélectionnés.

sont: est () et: où () sélecteurs de pseudo-classe pris en charge dans tous les navigateurs?

Le: est () et: où () les sélecteurs de classe pseudo Soutenu dans la plupart des navigateurs modernes. Cependant, ils peuvent ne pas être pris en charge dans les navigateurs plus âgés ou certaines versions d'Internet Explorer. C'est toujours une bonne idée de vérifier la prise en charge actuelle du navigateur sur un site comme puis-je utiliser avant d'utiliser ces sélecteurs dans votre code.

Comment puis-je utiliser le sélecteur de classe pseudo-() dans CSS?

Le sélecteur de pseudo-classe: est () dans CSS vous permet de regrouper plusieurs sélecteurs en un seul. Par exemple, au lieu d'écrire trois sélecteurs distincts pour H1, H2 et H3, vous pouvez les regrouper en utilisant le sélecteur de pseudo-classe: est () comme ceci :: IS (H1, H2, H3) {Color: Blue; }.

Comment puis-je utiliser le sélecteur de pseudo-classe: où () dans CSS?

Le: où () sélecteur de pseudo-classe dans CSS est utilisé de la même manière que le:: Sélecteur de pseudo-classe (), mais il n'a aucune spécificité. Par exemple, vous pouvez l'utiliser pour sélectionner tous les éléments avec une certaine classe sans augmenter la spécificité :: Où (.Class1, .class2, .class3) {Color: Blue; }.

Puis-je nid: est () et: où () sélecteurs de pseudo-classe?

Oui, vous pouvez nist: is () et: où () sélecteurs de pseudo-claire. Cela peut être utile lorsque vous souhaitez sélectionner des éléments qui remplissent plusieurs conditions. Par exemple, vous pouvez sélectionner tous les éléments H1 et H2 à l'intérieur d'un élément div comme celui-ci: div: Is (H1, H2) {Color: Blue; }.

-Classe des sélecteurs avec des pseudo-éléments. Par exemple, vous pouvez sélectionner toutes les premières lettres d'éléments H1 et H2 comme ceci :: Is (H1, H2) :: Première lettre {Color: Blue; }.

Sécoupeurs de classe avec sélecteurs d'attribut. Par exemple, vous pouvez sélectionner tous les éléments avec un attribution de données comme ceci :: est ([[Data-Attribute]) {Color: Blue; }.

sélecteurs de classe avec sélecteurs de classe. Par exemple, vous pouvez sélectionner tous les éléments avec une certaine classe comme celle-ci :: est (.class1, .class2, .class3) {Color: Blue; }.

Sécoupeurs de classe avec sélecteurs d'ID. Par exemple, vous pouvez sélectionner tous les éléments avec un certain identifiant comme ceci :: est (# id1, # ​​id2, # id3) {Color: Blue; }.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal