Saya cuba menskalakan saiz melalui var
sifat tersuai supaya kelas boleh digubah tanpa gandingan. Kesan yang diingini ialah 3 senarai akan mempunyai 3 skala berbeza, tetapi seperti yang ditunjukkan pada CodePen, kesemua 3 senarai mempunyai skala yang sama. Saya sedang mencari penjelasan tentang skop dan teknik sifat tersuai CSS yang boleh mencapainya dengan kod yang boleh digubah dan digandingkan secara longgar.
: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>
Dalam kes anda, anda telah menilai
--scale
自定义属性来定义--size-*
属性,然后定义了--scale
di peringkat akar sekali lagi di dalam elemen kanak-kanak. Ini tidak akan mencetuskan penilaian lagi kerana ia sudah dilakukan di lapisan atas.Berikut adalah contoh mudah untuk menggambarkan masalah ini:
Untuk menyelesaikan masalah anda, anda perlu mentakrifkan pengisytiharan dari
:root
移至与--scale
ke tahap yang sama:Dalam kes ini,
--scale
的定义级别与其评估相同,因此将为每种情况正确定义--size-*
.Dari Spesifikasi:
Dalam kes pertama, anda terperangkap pada 3 kerana tiada nilai ditentukan untuk--skala pada peringkat akar. Dalam kes terakhir, kami terperangkap pada
kerana kami menentukan--scale
指定值。在最后一种情况下,我们陷入了2,因为我们在同一级别定义了--scale
2:root
Dalam semua kes kita harus mengelakkan sebarang penilaian di peringkat:root
级别定义的 3 个变量之一来更改--color
Secara intuitif, kita mungkin berfikir bahawa kita boleh menukar--r
、--g
、--b
)在:root
3 pembolehubah (--g
,--b
) dinilai dalam:root
Gunakan JS atau peraturan CSS lain untuk menukar pembolehubah dalam:root
akan menjadi tidak berguna (atau sekurang-kurangnya akan menjadi lalai)::root
选择器更改为通用选择器*
kepada pemilih universalDengan mengambil kira perkara ini, kita harus sentiasa mengekalkan penilaian ke tahap paling rendah yang mungkin dalam pepohon DOM, terutamanya selepas pembolehubah berubah (atau pada tahap yang sama)
Ini adalah sesuatu yang kita tidak patut lakukan
Inilah yang patut kita lakukan
Kita juga boleh melakukan ini: