J'essaie d'augmenter la taille via var
propriétés personnalisées afin que les classes puissent être composées sans couplage. L'effet recherché est que les 3 listes auront 3 échelles différentes, mais comme indiqué sur CodePen, les 3 listes auront la même échelle. Je recherche une explication des techniques de portée et de propriétés personnalisées CSS qui peuvent y parvenir avec du code composable et faiblement couplé.
:root { --size-1: calc(1 * var(--scale, 1) * 1rem); --size-2: calc(2 * var(--scale, 1) * 1rem); --size-3: calc(3 * var(--scale, 1) * 1rem); } .size-1 { font-size: var(--size-1) } .size-2 { font-size: var(--size-2) } .size-3 { font-size: var(--size-3) } .scale-1x { --scale: 1 } .scale-2x { --scale: 2 } .scale-3x { --scale: 3 } html { font: 1em sans-serif; background: papayawhip; } ol { float: left; list-style: none; margin: 1rem; }
<ol class="scale-1x"> <li class="size-1">size 1</li> <li class="size-2">size 2</li> <li class="size-3">size 3</li> </ol> <ol class="scale-2x"> <li class="size-1">size 1</li> <li class="size-2">size 2</li> <li class="size-3">size 3</li> </ol> <ol class="scale-3x"> <li class="size-1">size 1</li> <li class="size-2">size 2</li> <li class="size-3">size 3</li> </ol>
Dans votre cas, vous avez évalué
--scale
自定义属性来定义--size-*
属性,然后定义了--scale
au niveau racine à nouveau à l'intérieur d'un élément enfant. Cela ne déclenchera pas à nouveau l'évaluation car elle est déjà effectuée dans la couche supérieure.Voici un exemple simple pour illustrer ce problème :
Pour résoudre votre problème vous devez définir la déclaration de
:root
移至与--scale
au même niveau :Dans ce cas,
--scale
的定义级别与其评估相同,因此将为每种情况正确定义--size-*
.De Spécifications :
Dans le premier cas, vous êtes bloqué à 3 car aucune valeur n'est spécifiée pour
car on a défini--scale
au niveau racine. Dans le dernier cas, on est bloqué à--scale
指定值。在最后一种情况下,我们陷入了2,因为我们在同一级别定义了--scale
2--scale
au même niveau et on a sa valeur.:root
Dans tous les cas, nous devons éviter toute évaluation au niveau:root
级别定义的 3 个变量之一来更改--color
Intuitivement, nous pourrions penser que nous pouvons changer--color
en changeant l'une des 3 variables définies au niveau--r
、--g
、--b
)在:root
3 variables (--r
,--g
,--b
) sont évaluées dans:root
Utilisez JS ou d'autres règles CSS pour modifier les variables dans:root
deviendra inutile (ou du moins deviendra la définition par défaut) ::root
选择器更改为通用选择器*
par le sélecteur universel*
. Cela garantira que nos fonctions sont définies et évaluées à tous les niveaux. Dans certains cas complexes, cela peut produire des résultats indésirablesDans cet esprit, nous devons toujours maintenir l'évaluation au point le plus bas possible dans l'arborescence DOM, surtout après qu'une variable a changé (ou au même niveau)
C'est quelque chose que nous ne devrions pas faire
C'est ce que nous devrions faire
Nous pouvons aussi faire ceci :