cari
Rumahhujung hadapan webtutorial cssDiselesaikan oleh CSS: Donuts Scopes

Solved by CSS: Donuts Scopes

Bayangkan anda mempunyai komponen web yang boleh menunjukkan banyak kandungan yang berbeza. Ia mungkin mempunyai slot di mana komponen lain boleh disuntik. Komponen induk juga mempunyai gaya tersendiri yang tidak berkaitan dengan gaya komponen kandungan yang mungkin dipegangnya.

Ini menjadikan keadaan yang mencabar:

bagaimana kita dapat menghalang gaya komponen induk dari bocor ke dalam?

Ini bukan masalah baru - Nicole Sullivan menggambarkannya kembali pada tahun 2011! Masalah utama ialah menulis CSS supaya ia tidak menjejaskan kandungan, dan dia mencipta dengan tepat sebagai

scoping donat .

"Kami memerlukan cara untuk mengatakan, bukan hanya di mana skop bermula, tetapi di mana ia berakhir. Oleh itu, donat skop ".

Walaupun scoping donat adalah isu kuno dalam tahun -tahun web, jika anda melakukan carian cepat pada "Skop Donat CSS" dalam enjin carian pilihan anda, anda mungkin melihat dua perkara:

    Kebanyakan mereka bercakap tentang @scope at-rule yang masih baru-baru ini.
  1. Hampir setiap hasil adalah dari 2021 dan seterusnya.
Kami mendapat hasil yang sama walaupun dengan pertanyaan "CSS Donut Scope -@Skop" yang bijak, dan pergi tahun demi tahun nampaknya tidak membawa apa -apa yang baru ke Jadual . Nampaknya skop donat tinggal di belakang minda kita sebagai satu lagi sakit kepala skop global CSS sehingga @scope. dan (spoiler!), Walaupun @Scope at-rule membawa jalan yang lebih mudah untuk scoping donat, saya rasa ada lebih banyak penyelesaian percubaan selama bertahun-tahun. Kami akan meneroka setiap mereka, membuat perhentian terakhir pada penyelesaian hari ini, @scope. Ini latihan yang bagus dalam sejarah CSS!

ambil, sebagai contoh, skrin permainan berikut. Kami mempunyai elemen yang bersesuaian dengan set tab dan slot. Sekiranya kita menukar warna yang sesuai, maka begitu juga warna di dalam. Kandungan.

bagaimana kita boleh menghentikan ini daripada berlaku? Saya mahu menghalang teks di dalam. Konkelompok dari mewarisi warna Parent.

hanya mengabaikannya!

Penyelesaian pertama tidak ada penyelesaian sama sekali! Mari kita lebih nyata di sini, ia bukan hanya dengan jelas mengabaikannya, tetapi menerima skop global dan gaya penulisan CSS dengan itu. Kembali ke contoh pertama kami, kami menganggap kami tidak dapat menghentikan gaya ibu bapa dari bocor ke dalam komponen kandungan, jadi kami menulis gaya ibu bapa kami dengan kurang spesifik, supaya mereka dapat ditindih oleh gaya kandungan.

body {
  color: blue;
}

.parent {
  color: orange; /* Initial background */
}

.content {
  color: blue; /* Overrides parent's background */
}

Walaupun pendekatan ini mencukupi untuk sekarang, menguruskan gaya hanya dengan kekhususan mereka sebagai projek yang semakin besar menjadi membosankan, paling baik, dan huru -hara paling teruk. Komponen mungkin berkelakuan berbeza bergantung kepada di mana mereka diletakkan dan mengubah CSS atau HTML kami dapat memecahkan gaya lain dengan cara yang tidak dijangka.

Dua sifat CSS berjalan ke bar. Barstool di bar yang sama sekali berbeza jatuh.

Thomas Fuchs

anda dapat melihat bagaimana dalam contoh kecil ini kita perlu mengatasi gaya dua kali:

skop donat cetek dengan: tidak ()

Matlamat kami maka hanya untuk skop. Parent, meninggalkan apa sahaja yang boleh dimasukkan ke dalam slot. Jadi, bukan. Konktasi tetapi selebihnya. Dengan cara ini gaya. Content tidak akan diganggu oleh gaya yang ditakrifkan dalam .paren mereka:

body {
  color: blue;
}

.parent > :not(.content) {
  color: orange;
}
anda dapat melihat perbezaan yang besar apabila kita membuka DevTools untuk setiap contoh:

sebaik penambahbaikan, contoh terakhir mempunyai jangkauan cetek. Oleh itu, jika terdapat satu lagi slot yang bersarang lebih dalam, kita tidak akan dapat mencapainya kecuali kita tahu terlebih dahulu di mana ia akan diturunkan.

Ini kerana kita menggunakan pemilih keturunan langsung (& gt;), tetapi saya tidak dapat mencari jalan untuk membuatnya berfungsi tanpa ia. Malah menggunakan gabungan pemilih kompleks di dalam: tidak () nampaknya tidak membawa di mana -mana sahaja. Sebagai contoh, kembali pada tahun 2021, Dr. Lea Verou menyebut scoping donat dengan: tidak () menggunakan koktail pemilih berikut:

Walau bagaimanapun, coretan ini kelihatan sepadan dengan kelas.

sehingga semua pelayar moden kini menyokong pemilih kompleks dalam: tidak ()! Ujian ujian: httpsJardvsWWWWsWWWWsWWshy, (@Leaverou) 28 Januari 2021
.container:not(.content *) {
  /* Donut Scoped styles (?) */
}


donat scoping dengan @scope



Jadi langkah terakhir kami untuk penyempurnaan scoping donat dapat melampaui satu lapisan DOM. Nasib baik, tahun lepas kami berbakat @scope at-rule (anda boleh membaca lebih lanjut mengenainya dalam entri Almanac). Ringkasnya, ia membolehkan kita memilih subtree di dom di mana gaya kita akan dilengkapkan, jadi tidak ada lagi skop global!

Apa yang lebih baik, kita boleh meninggalkan slot di dalam subtree yang kita pilih (biasanya dipanggil akar skop). Dalam kes ini, kita mahu gaya elemen yang tidak sesuai tanpa scoping .Content:
body {
  color: blue;
}

.parent {
  color: orange; /* Initial background */
}

.content {
  color: blue; /* Overrides parent's background */
}

Dan apa yang lebih baik, ia mengesan setiap elemen. Jadi kita tidak perlu bimbang tentang di mana kita menulis slot kita. Dalam contoh terakhir, kita boleh menulis gaya berikut untuk menukar warna teks elemen dalam .paren tanpa menyentuh.

body {
  color: blue;
}

.parent > :not(.content) {
  color: orange;
}
Walaupun ia mungkin kelihatan tidak selesa untuk menyenaraikan semua elemen yang akan kita ubah, kita tidak boleh menggunakan sesuatu seperti pemilih sejagat (*) kerana ia akan merosakkan slot bersarang. Dalam contoh ini, ia akan meninggalkan. Oleh kerana harta warna mewarisi, yang bersarang. Kandungan akan mengubah warna tanpa mengira!

dan voilà! Kedua -dua. Slot Konten berada di dalam lubang donat kami:

scoping cetek masih boleh dilakukan dengan kaedah ini, kita hanya perlu menulis semula pemilih slot kita supaya hanya langsung. Keturunan. Parent ditinggalkan dari skop. Walau bagaimanapun, kita perlu menggunakan: pemilih skop, yang merujuk kembali kepada akar scoping, atau .paren dalam kes ini:

.container:not(.content *) {
  /* Donut Scoped styles (?) */
}
kita boleh menggunakan pemilih sejagat dalam contoh ini kerana ia adalah cetek cetek.

Kesimpulan

Donut Scoping, ciri wannabe yang dicipta pada tahun 2011 akhirnya telah dibawa ke kehidupan pada tahun 2024. Walau bagaimanapun, tidak adil, untuk mengatakan bahawa ia berada di bawah radar semua orang sejak CSSWG (orang-orang di belakang menulis spec untuk ciri-ciri CSS baru) dengan jelas mempunyai niat untuk mengatasinya ketika menulis spec untuk @scope at-rule.

Apa pun yang mungkin, saya bersyukur kita boleh mempunyai scoping donat yang benar di CSS kami. Untuk beberapa tahap, kita masih perlu menunggu Firefox untuk menyokongnya. ?

Data sokongan penyemak imbas ini adalah dari Caniuse, yang mempunyai lebih terperinci. Nombor menunjukkan bahawa penyemak imbas menyokong ciri pada versi itu dan ke atas.

Atas ialah kandungan terperinci Diselesaikan oleh CSS: Donuts Scopes. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
@KeyFrames vs CSS Transitions: Apakah perbezaannya?@KeyFrames vs CSS Transitions: Apakah perbezaannya?May 14, 2025 am 12:01 AM

@keyframesandcsstransitionsdifferincomplexity:@keyframesallowsfordetailedanimationseSseSeSs, whileCstransitionShandlesImplestateShanges.usecsstransitionsforhovereffectsLikeButtonColorchanges, dan@keyframesforintricateanimation.

Menggunakan halaman CMS untuk pengurusan kandungan tapak statikMenggunakan halaman CMS untuk pengurusan kandungan tapak statikMay 13, 2025 am 09:24 AM

Saya tahu, saya tahu: terdapat satu tan pilihan sistem pengurusan kandungan yang tersedia, dan sementara saya telah menguji beberapa, tidak ada yang benar -benar menjadi satu, y ' tahu? Model harga pelik, penyesuaian yang sukar, sesetengahnya akhirnya menjadi keseluruhan &

Panduan Terbaik untuk Menghubungkan Fail CSS di HTMLPanduan Terbaik untuk Menghubungkan Fail CSS di HTMLMay 13, 2025 am 12:02 AM

Menghubungkan fail CSS ke HTML boleh dicapai dengan menggunakan unsur -unsur dalam sebahagian HTML. 1) Gunakan tag untuk menghubungkan fail CSS tempatan. 2) Pelbagai fail CSS boleh dilaksanakan dengan menambahkan beberapa tag. 3) Fail CSS luaran menggunakan pautan URL mutlak, seperti. 4) Pastikan penggunaan laluan fail yang betul dan pesanan pemuatan fail CSS, dan mengoptimumkan prestasi boleh menggunakan preprocessor CSS untuk menggabungkan fail.

CSS Flexbox vs Grid: Kajian KomprehensifCSS Flexbox vs Grid: Kajian KomprehensifMay 12, 2025 am 12:01 AM

Memilih Flexbox atau Grid bergantung kepada keperluan susun atur: 1) Flexbox sesuai untuk susun atur satu dimensi, seperti bar navigasi; 2) Grid sesuai untuk susun atur dua dimensi, seperti susun atur majalah. Kedua -duanya boleh digunakan dalam projek untuk meningkatkan kesan susun atur.

Cara memasukkan fail CSS: Kaedah dan amalan terbaikCara memasukkan fail CSS: Kaedah dan amalan terbaikMay 11, 2025 am 12:02 AM

Cara terbaik untuk memasukkan fail CSS adalah menggunakan tag untuk memperkenalkan fail CSS luaran di bahagian HTML. 1. Gunakan tag untuk memperkenalkan fail CSS luaran, seperti. 2. Untuk pelarasan kecil, css sebaris boleh digunakan, tetapi harus digunakan dengan berhati -hati. 3. Projek besar boleh menggunakan preprocessors CSS seperti SASS atau kurang untuk mengimport fail CSS lain melalui @import. 4. Untuk prestasi, fail CSS harus digabungkan dan CDN harus digunakan, dan dimampatkan menggunakan alat seperti CSSNANO.

Flexbox vs Grid: Sekiranya saya belajar kedua -duanya?Flexbox vs Grid: Sekiranya saya belajar kedua -duanya?May 10, 2025 am 12:01 AM

Ya, youdyhouldlearnbothflexboxandgrid.1) flexboxisidealforone-dimensi, flexiblelayoutslikenavigasiMenus.2)

Mekanik Orbital (atau bagaimana saya mengoptimumkan animasi kerangka utama CSS)Mekanik Orbital (atau bagaimana saya mengoptimumkan animasi kerangka utama CSS)May 09, 2025 am 09:57 AM

Apa yang kelihatan seperti refactor kod anda sendiri? John Rhea memisahkan animasi CSS lama yang dia tulis dan berjalan melalui proses pemikiran mengoptimumkannya.

Animasi CSS: Adakah sukar untuk mencipta mereka?Animasi CSS: Adakah sukar untuk mencipta mereka?May 09, 2025 am 12:03 AM

Csanimationsarenotinherenthardbutrequirepracticeandundunderpanderofcsspropertiesandtimingfunctions.1) startwithsimpleanimationslikescalingabuttonhoverusingkeyframes.2)

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.