recherche
Maisoninterface Webtutoriel CSSNe combattez pas la cascade, contrôlez-la!

Maître la cascade CSS: dites au revoir au chaos et embrassez le contrôle! Cet article explorera comment utiliser les nouvelles fonctionnalités CSS pour contrôler les cascades pour écrire le code CSS plus concis et plus efficace. Dans le passé, les styles provenant de différentes sources ont souvent rendu les cascades difficiles à gérer et ont finalement produit du code redondant. Même avec des méthodes comme ITCSS et BEM, nous sommes toujours confrontés à des défis posés par les cascades, tels que la nécessité de contrôler avec précision la position de la déclaration @import ou de recourir !important Heureusement, de nouveaux outils sont sortis, ce qui nous permet de contrôler efficacement la cascade.

Ne combattez pas la cascade, contrôlez-la!

Drive :where pseudo sélecteur

:where le pseudo-électror nous permet de supprimer la particularité du sélecteur afin qu'il ne soit plus élevé que le style par défaut de l'agent utilisateur, quel que soit l'ordre de chargement CSS. Cela signifie que la particularité du sélecteur est en fait nul, ce qui est très utile pour les composants à usage général.

Par exemple, utilisez :where définir un style de table commun:

 : où (table) {
  Color en arrière-plan: Tan;
}

Même si d'autres styles de table étaient définis avant cela:

 tableau {
  Color en arrière-plan: hotpink;
}

: où (table) {
  Color en arrière-plan: Tan;
}

La couleur de l'arrière-plan du tableau est toujours tan car :where élimine la particularité du sélecteur. Cela fait :where parfait pour CSS réinitialise.

:where 's Brother Selector :is l'effet inverse:

La particularité du :is() pseudo-classe est déterminée par la particularité de ses paramètres les plus spéciaux. Par conséquent, les sélecteurs écrits avec :is() n'ont pas nécessairement la même spécialité que les sélecteurs équivalents écrits sans :is() . —— Spécification de niveau 4 de l'élector

Continuez avec l'exemple précédent:

 est (table) {
  --tbl-bgc: orange;
}
tableau {
  --TBL-BGC: Tan;
}
: où (table) {
  --tbl-bgc: hotpink;
  Color d'arrière-plan: var (- tbl-bgc);
}

La couleur d'arrière-plan de la table sera tan car :is la même particularité que table , et table est située derrière. Mais si nous le changeons en:

 est (table, .c-tbl) {
  --tbl-bgc: orange;
}

La couleur d'arrière-plan sera orange parce que :is le même poids que son sélecteur le plus spécial.c .c-tbl .

Exemple: composants de table configurables

Construisons un composant de table avec le HTML suivant:

Ensuite, nous enroulons .c-tbl dans :where sélecteur et ajoutant les coins arrondis:

 : où (.c-tbl) {
  Border-Collapse: séparé;
  Espacement des bordures: 0;
  Table-Layout: Auto;
  Largeur: 99,9%;
}

Les cellules de table utilisent différents styles:

 : où (.c-tbl thead th) {
  / * ... * /
}
: où (.c-tbl tbody td) {
  / * ... * /
}

En raison des coins arrondis et border-collapse: separate , nous devons ajouter des styles supplémentaires:

 : où (.c-tbl tr td: premier de type) {
  / * ... * /
}
/ * ... * /

Maintenant, nous pouvons créer des variations du composant de la table en injectant d'autres styles avant ou après le style général (bénéficie de :where 's Specialty Elimination):

 .c-tbl --purple th {
  Color en arrière-plan: HSL (330, 50%, 40%)
}
/ * ... * /

Propriétés personnalisées CSS

Nous utiliserons data-component pour définir le composant:


Des styles génériques seront appliqués à toutes les instances de composants, et les styles pour des instances de composants spécifiques seront inclus dans la classe générale, et les propriétés personnalisées du composant commun sont utilisées.

 : où ([data-component = "table"]) {
  / * ... * /
}
.c-tbl --puple {
  / * ... * /
}

Dans un composant commun, chaque propriété CSS pointe vers une propriété personnalisée. Les attributs qui doivent agir sur des éléments enfants (tels que border-color ) sont spécifiés à la racine de la composante générale:

 : où ([data-component = "table"]) {
  --tbl-hue: 200;
  / * ... * /
}
: où ([data-component = "table"] td) {
  Border-Color: var (- TBL-BDC);
}

D'autres propriétés peuvent être définies des valeurs statiques ou configurées à l'aide de propriétés personnalisées. Si vous utilisez des propriétés personnalisées, n'oubliez pas de définir une valeur par défaut pour une utilisation lorsque des classes de variantes sont manquantes.

 : où ([data-component = "table"]) {
  Color d'arrière-plan: var (- tbl-bgc, transparent);
  / * ... * /
}

Nous pouvons utiliser des propriétés personnalisées pour contrôler l'alignement et la largeur des colonnes:

 : où ([data-component = "table"] tr> *: nth-of-type (1)) {
  Text-Align: var (- CA1, initial);
  / * ... * /
}

Maintenant, créons un style de composant spécifique, en utilisant la classe régulière .c-tbl :

 .c-tbl {
  --tbl-hue: 330;
}

Nous avons juste besoin de mettre à jour les propriétés sans écrire un tout nouveau CSS! Modifiez une propriété pour mettre à jour la couleur de la table.

Nous pouvons écrire des styles plus complexes, tels que les rayures zébrées:

 .c-tbl tr: nth-child (même) td {
  --tbl-td-bgc: hsl (var (- tbl-hue), var (- tbl-sat), 95%);
}

Ajouter des paramètres à l'aide d'un autre data-attribute

Nous pouvons ajouter une autre propriété data-param pour ajouter plus de paramètres:

Ensuite, dans CSS, nous pouvons utiliser le sélecteur de propriétés pour faire correspondre le mot entier dans la liste des paramètres. Par exemple, une rangée de rayures zébrés:

 [data-component = "Table"] [Data-Param ~ = "Zebrarow"] tr: nth-child (même) td {
  --tbl-td-bgc: var (- tbl-zebra-bgc);
}

Ou colonne de bandes zébrés:

 [data-component = "Table"] [Data-Param ~ = "Zebracol"] TD: Nth-of-Type (Odd) {
  --tbl-td-bgc: var (- tbl-zebra-bgc);
}

Couche en cascade

Le dernier outil pour contrôler la cascade est la "Couche de cascade". Actuellement, il s'agit d'une caractéristique expérimentale qui peut être accessible dans Safari ou Chrome pour activer le drapeau #enable-cascade-layers .

La couche de cascade nous permet d'injecter des feuilles de style dans un ordre spécifique. Une structure simplifiée est la suivante:

 @layer générique, composants;

Cela détermine l'ordre des couches. Il y a d'abord un style général, puis un style spécifique aux composants.

Même si le style de composant est écrit avant le style général, le calque de style composant a toujours la priorité:

 @layer Components {
  corps {
    Color en arrière-plan: LightEagreen;
  }
}

@layer générique { 
  corps {
    Color en arrière-plan: tomate;
  }
}

Résumer

:where et :is pseudo-selecteurs nous permettent data-attribute contrôler la spécificité; CSS Cascade n'est plus un ennemi, mais un outil que nous pouvons contrôler.

Image de Stephen Leonardi sur Unsplash

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
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
Quelle est la spécificité de @rules, comme @keyframes et @media?Quelle est la spécificité de @rules, comme @keyframes et @media?Apr 18, 2025 am 11:34 AM

J'ai eu cette question l'autre jour. Ma première pensée est: une question étrange! La spécificité concerne les sélecteurs, et les rubriques ne sont pas des sélecteurs, donc ... non pertinents?

Pouvez-vous nist @media et @Support Queries?Pouvez-vous nist @media et @Support Queries?Apr 18, 2025 am 11:32 AM

Oui, vous le pouvez, et cela n'a pas vraiment d'importance dans quel ordre. Un préprocesseur CSS n'est pas requis. Il fonctionne dans CSS ordinaire.

Buste de cache de gorgée rapideBuste de cache de gorgée rapideApr 18, 2025 am 11:23 AM

Vous devriez à coup sûr définir des en-têtes de cache éloignés sur vos actifs comme CSS et JavaScript (et des images et polices et quoi que ce soit d'autre). Cela dit au navigateur

À la recherche d'une pile qui surveille la qualité et la complexité de CSSÀ la recherche d'une pile qui surveille la qualité et la complexité de CSSApr 18, 2025 am 11:22 AM

De nombreux développeurs écrivent sur la façon de maintenir une base de code CSS, mais peu d'entre eux écrivent sur la façon dont ils mesurent la qualité de cette base de code. Bien sûr, nous avons

Le datalist est destiné à suggérer des valeurs sans appliquer de valeursLe datalist est destiné à suggérer des valeurs sans appliquer de valeursApr 18, 2025 am 11:08 AM

Avez-vous déjà eu un formulaire qui devait accepter un petit texte arbitraire? Comme un nom ou autre chose. C'est exactement à quoi sert. Il y a beaucoup de

Conférence avant à ZurichConférence avant à ZurichApr 18, 2025 am 11:03 AM

Je suis tellement excité de me diriger vers Zurich, en Suisse pour la conférence de Front (j'adore ce nom et URL!). Je n'ai jamais été en Suisse auparavant, donc je suis excité

Construire une application sans serveur complète avec des travailleurs CloudFlareConstruire une application sans serveur complète avec des travailleurs CloudFlareApr 18, 2025 am 10:58 AM

L'un de mes développements préférés dans le développement de logiciels a été l'avènement de Serverless. En tant que développeur qui a tendance à s'enliser dans les détails

Création de routes dynamiques dans une application NuxtCréation de routes dynamiques dans une application NuxtApr 18, 2025 am 10:53 AM

Dans cet article, nous utiliserons une démo de magasin de commerce électronique que j'ai construit et déployé sur Netlify pour montrer comment nous pouvons faire des itinéraires dynamiques pour les données entrantes. C'est assez

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles