Sifat tersuai skop CSS tidak dikenali apabila digunakan untuk menilai pembolehubah dalam skop induk
P粉006847750
P粉006847750 2023-11-01 21:53:10
0
1
443

Saya cuba menskalakan saiz melaluivarsifat 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; }
  1. size 1
  2. size 2
  3. size 3
  1. size 1
  2. size 2
  3. size 3
  1. size 1
  2. size 2
  3. size 3


P粉006847750
P粉006847750

membalas semua (1)
P粉440453689

Dalam kes anda, anda telah menilai--scale自定义属性来定义--size-*属性,然后定义了--scaledi peringkat akarsekali lagidi dalam elemen kanak-kanak. Ini tidak akan mencetuskan penilaian lagi kerana ia sudah dilakukan dilapisan atas.

Berikut adalah contoh mudah untuk menggambarkan masalah ini:

.box { --color: var(--c, blue); } span { color: var(--color); }
I will not be red because the property is already evaluated and --color is set to blue using the default value
I will be red because at the time of the evaluation --c is red (inherited from the upper div)

Untuk menyelesaikan masalah anda, anda perlu mentakrifkan pengisytiharan dari:root移至与--scaleke tahap yang sama:

.scale { --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; }
  1. size 1
  2. size 2
  3. size 3
  1. size 1
  2. size 2
  3. size 3
  1. size 1
  2. size 2
  3. size 3

Dalam kes ini,--scale的定义级别与其评估相同,因此将为每种情况正确定义--size-*.


DariSpesifikasi:

Dalam kes pertama, anda terperangkap pada3kerana tiada nilai ditentukan untuk --skala pada peringkat akar. Dalam kes terakhir, kami terperangkap pada --scale指定值。在最后一种情况下,我们陷入了 2,因为我们在同一级别定义了 --scale2

kerana kami menentukan --skala pada tahap yang sama dan kami mempunyai nilainya.

:rootDalam semua kes kita harus mengelakkan sebarang penilaian di peringkat

kerana ia tidak berguna. Tahap akar ialah tahap teratas dalam DOM, jadi semua elemen akan mewarisi nilai yang sama, adalah mustahil untuk mempunyai nilai yang berbeza dalam DOM melainkan kita menilai semula pembolehubah itu.

Kod anda bersamaan dengan kod ini:
:root { --size-1: calc(1 * 1 * 1rem); --size-2: calc(2 * 1 * 1rem); --size-3: calc(3 * 1 * 1rem); }

Mari beri contoh lain:

:root { --r:0; --g:0; --b:255; --color:rgb(var(--r),var(--g),var(--b)) } div { color:var(--color); } p { --g:100; color:var(--color); }
some text

some text

:root级别定义的 3 个变量之一来更改--colorSecara intuitif, kita mungkin berfikir bahawa kita boleh menukar --warna dengan menukar salah satu daripada 3 pembolehubah yang ditakrifkan pada tahap

, tetapi kita tidak boleh melakukan ini dan kod tindakan di atas adalah sama seperti ini:

:root { --color:rgb(0,0,255) } div { color:var(--color); } p { --g:100; color:var(--color); }
some text

some text

--r--g--b)在:root3 pembolehubah ( --r, --g, --b) dinilai dalam

kod> jadi kami telah menggunakannya Nilai menggantikan mereka.

Dalam kes ini kita ada 3 kemungkinan:
  • :rootGunakan JS atau peraturan CSS lain untuk menukar pembolehubah dalam
  • . Ini tidak membenarkan kita mempunyai warna yang berbeza:

:root { --r:0; --g:0; --b:255; --color:rgb(var(--r),var(--g),var(--b)) } div { color:var(--color); } p { --g:200; /*this will not have any effect !*/ color:var(--color); } :root { --g:200; /*this will work*/ }
some text

some text

  • Nilai pembolehubah sekali lagi dalam elemen yang diperlukan. Dalam kes ini, kita kehilangan sebarang fleksibiliti dan definisi di dalam:rootakan menjadi tidak berguna (atau sekurang-kurangnya akan menjadi lalai):

:root { --r:0; --g:0; --b:255; --color:rgb(var(--r),var(--g),var(--b)) } div { color:var(--color); } p { --g:200; --color:rgb(var(--r),var(--g),var(--b)); color:var(--color); }
some text

some text

  • Tukar pemilih:root选择器更改为通用选择器*kepada pemilih universal * . Ini akan memastikan bahawa fungsi kami ditakrifkan dan dinilai di semua peringkat. Dalam sesetengah kes yang rumit ini mungkin menghasilkan beberapa keputusan yang tidak diingini

* { --r:0; --g:0; --b:255; --color:rgb(var(--r),var(--g),var(--b)) } div { color:var(--color); } p { --g:200; color:var(--color); }
some text

some text


Dengan mengambil kira perkara ini, kita harus sentiasa mengekalkan penilaian ke tahap paling rendah yang mungkin dalam pepohon DOM, terutamanyaselepas pembolehubah berubah(atau pada tahap yang sama)

Ini adalah sesuatu yang kita tidak patut lakukan

:root { --r: 0; --g: 0; --b: 0; } .color { --color: rgb(var(--r), var(--g), var(--b)) } .green { --g: 255; } .red { --r: 255; } p { color: var(--color); } h1 { border-bottom: 1px solid var(--color); }

Red

I want to be red :(

Green

I want to be green :(

Inilah yang patut kita lakukan

:root { --r:0; --g:0; --b:0; } .color { --color:rgb(var(--r),var(--g),var(--b)); } .green { --g:255; } .red { --r:255; } p { color:var(--color); } h1 { border-bottom: 1px solid var(--color); }

Red title

Yes I am red :D

Green title

Yes I am green :D

Kita juga boleh melakukan ini:

:root { --r:0; --g:0; --b:0; } .color { --color:rgb(var(--r),var(--g),var(--b)); } .green { --g:255; } .red { --r:255; } p { color:var(--color); } h1 { border-bottom: 1px solid var(--color); }

Red title

Yes I am red :D

Green title

Yes I am green :D

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!