Saya secara peribadi berfikir BEM adalah baik dan saya fikir anda harus menggunakannya. Tetapi saya juga dapat memahami mengapa anda mungkin tidak menggunakannya.
Apa pun pendapat anda tentang BEM, ia menawarkan beberapa faedah, manfaat terbesar ialah ia membantu mengelakkan konflik tertentu dalam lata CSS. Ini kerana, jika digunakan dengan betul, mana -mana pemilih yang ditulis dalam format BEM harus mempunyai skor kekhususan yang sama (0,1,0). Selama bertahun -tahun, saya telah merancang CSS untuk banyak laman web besar (berfikir kerajaan, universiti, dan bank) dan ini adalah projek -projek besar yang membuat saya dapati di mana BEM benar -benar bersinar. Menulis CSS lebih menyeronokkan apabila anda yakin bahawa gaya yang anda tulis atau penyuntingan tidak menjejaskan bahagian lain di laman web.
Malah, dalam beberapa kes, menambah kekhususan dianggap benar -benar boleh diterima. Contohnya:
:hover
dan :focus
-skor kekhususan itu adalah 0,1,1. Walau bagaimanapun, dalam artikel ini, marilah kita mengandaikan bahawa kita tidak mengharapkan penyebaran khusus lain. ? ::before
::after
Tetapi saya tidak mahu menjual bem anda. Sebaliknya, saya ingin bercakap tentang bagaimana kita menggunakannya bersempena dengan pemilih CSS moden (mis. , , :is()
, dan lain -lain) untuk kawalan cascade yang lebih kuat. :has()
:where()
Apakah pemilih CSS moden?
Spesifikasi CSS Selector Level 4 memberikan kita beberapa cara yang kuat dan agak baru untuk memilih elemen. Beberapa kegemaran saya termasuk
, dan :is()
, yang semuanya disokong oleh semua pelayar moden dan kini selamat digunakan dalam hampir mana -mana projek. :where()
:not()
pada dasarnya sama, kecuali bahawa mereka mempunyai kesan yang berbeza terhadap kekhususan. Khususnya, skor kekhususan :is()
sentiasa 0,0,0. Ya, walaupun :where()
tidak spesifik. Pada masa yang sama, kekhususan :where()
adalah kekhususan elemen yang paling spesifik dalam senarai parameternya. Oleh itu, kita sudah mempunyai perbezaan dalam penamat Cascade antara dua pemilih moden yang boleh digunakan. :where(button#widget.some-class)
:is()
kelas pseudo yang kuat juga cepat mendapat sokongan pelayar (pada pendapat saya, ini adalah ciri baru CSS terbesar sejak grid). Walau bagaimanapun, pada masa penulisan, sokongan penyemak imbas untuk
:has()
izinkan saya menambah kelas pseudo ke bem saya ... :has()
<code>/* ❌ 特异性分数:0,2,0 */ .something:not(.something--special) { /* 所有 something 的样式,除了特殊的 something */ }</code>
oh tidak! Pernahkah anda melihat skor khusus itu? Ingat, dengan BEM, kami dengan idealnya mengharapkan pemilih kami mempunyai skor tertentu sebanyak 0,1,0. Mengapa 0,2,0 tidak baik? Pertimbangkan contoh lanjutan yang sama:
<code>.something:not(a) { color: red; } .something--special { color: blue; }</code>
Walaupun pemilih kedua akhirnya muncul dalam urutan kod sumber, kekhususan yang lebih tinggi pemilih pertama (0,1,1) akan menang, dan warna unsur .something--special
akan ditetapkan ke merah. Iaitu, anggap bahawa BEM anda ditulis dengan betul dan elemen yang dipilih menggunakan kedua -dua kelas asas .something
dan kelas pengubah .something--special
dalam HTML.
Jika digunakan secara tidak wajar, kelas pseudo ini boleh menjejaskan lata dengan cara yang tidak dijangka. Ia adalah ketidakkonsistenan yang boleh menyebabkan masalah kemudian, terutamanya dalam pangkalan kod yang lebih besar dan lebih kompleks.
oh. Jadi apa yang perlu dilakukan sekarang?
ingat apa yang saya katakan :where()
dan kekhususannya adalah sifar? Kita boleh memanfaatkannya:
<code>/* ✅ 特异性分数:0,1,0 */ .something:where(:not(.something--special)) { /* 等 */ }</code>
Bahagian pertama pemilih ini (.something
) memperoleh skor kekhususan biasa 0,1,0. Tetapi kekhususan :where()
-dan segala -galanya di dalamnya -adalah 0, dan tidak lagi meningkatkan kekhususan pemilih.
: di mana () membolehkan kita bersarang
Mereka yang tidak peduli tentang kekhususan seperti yang saya lakukan (dan bersikap adil, mungkin banyak orang) telah melakukan yang baik dalam bersarang. Dengan beberapa menaip papan kekunci rawak, kami mungkin mendapat CSS seperti ini (perhatikan bahawa saya menggunakan sass untuk kesederhanaan):
<code>.card { ... } .card--featured { /* 等 */ .card__title { ... } .card__title { ... } } .card__title { ... } .card__img { ... }</code>
Dalam contoh ini, kita mempunyai komponen .card
. Apabila ia adalah kad "dipaparkan" (menggunakan kelas .card--featured
), tajuk dan imej kad perlu menjadi gaya yang berbeza. Walau bagaimanapun, seperti yang kita ketahui sekarang, skor kekhususan yang disebabkan oleh kod di atas tidak konsisten dengan sistem kami yang lain.
Fanatik khusus yang degil mungkin melakukan ini:
tidak buruk, bukan? Terus terang, ini adalah CSS yang cantik.
<code>.card { ... } .card--featured { ... } .card__title { ... } .card__title--featured { ... } .card__img { ... } .card__img--featured { ... }</code>
kepada tiga elemen (
,, dan --featured
), tetapi mungkin lebih banyak dalam contoh dunia nyata. Terdapat banyak jika kenyataan. .card
Pemilih .card__title
.card__img
boleh membantu kami menulis kurang logik template -dan kurang kelas BEM -tanpa meningkatkan tahap kekhususan.
:where()
Berikut adalah kandungan yang sama dalam SASS (perhatikan trailing versus):
<code>.card { ... } .card--featured { ... } .card__title { ... } :where(.card--featured) .card__title { ... } .card__img { ... } :where(.card--featured) .card__img { ... }</code>
sama ada anda harus memilih kaedah ini dan bukannya menggunakan kelas pengubah kepada pelbagai elemen kanak -kanak bergantung kepada keutamaan peribadi. Tetapi sekurang -kurangnya
sekarang kita mempunyai pilihan!<code>.card { ... } .card--featured { ... } .card__title { /* 等 */ :where(.card--featured) & { ... } } .card__img { /* 等 */ :where(.card--featured) & { ... } }</code>
Apa yang harus saya lakukan jika saya tidak mempunyai BEM HTML?
kita hidup dalam dunia yang tidak sempurna. Kadang -kadang anda perlu berurusan dengan HTML yang berada di luar kawalan anda. Sebagai contoh, suntikan skrip pihak ketiga yang anda perlukan untuk gaya HTML. Tag ini biasanya tidak ditulis menggunakan nama kelas BEM, dan dalam beberapa kes, gaya ini tidak menggunakan kelas sama sekali, tetapi ID!
Begitu juga, :where()
juga boleh membantu kita menyelesaikan masalah ini. Penyelesaian ini agak kekok kerana kita perlu merujuk kepada kelas di dalam pokok Dom yang kita tahu ada.
<code>/* ❌ 特异性分数:0,2,0 */ .something:not(.something--special) { /* 所有 something 的样式,除了特殊的 something */ }</code>
memetik elemen induk terasa sedikit berisiko dan ketat. Bagaimana jika kelas induk berubah atau tidak wujud atas sebab tertentu? Penyelesaian yang lebih baik (tetapi mungkin sama -sama canggung) adalah menggunakan :is()
sebaliknya. Ingat bahawa kekhususan :is()
adalah sama dengan pemilih yang paling spesifik dalam senarai pemilihnya.
jadi kita boleh menggunakan :is()
untuk merujuk kepada kelas yang kita tahu (atau harapan!) Ada, bukannya menggunakan :where()
seperti dalam contoh di atas.
<code>.something:not(a) { color: red; } .something--special { color: blue; }</code>
yang sentiasa sedia ada body
akan membantu kami memilih elemen #widget
, dan kehadiran kelas :is()
dalam .dummy-class
yang sama akan menjadikan pemilih body
mempunyai skor kekhususan yang sama (0,1,0) sebagai kelas ... dan gunakan :where()
untuk memastikan pemilih tidak lebih spesifik daripada ini.
itu sahaja!
Ini adalah bagaimana kita mengambil kesempatan daripada keupayaan pengurusan khusus moden :is()
dan :where()
kelas pseudo dan keupayaan pencegahan konflik tertentu yang diperoleh ketika menulis CSS dalam format BEM. Dalam masa terdekat, sekali :has()
disokong oleh Firefox (ia kini disokong di belakang logo pada masa penulisan), kita mungkin mahu memasangkannya dengan :where()
untuk membatalkan kekhususannya.
Sama ada anda menamakan sepenuhnya dengan BEM atau tidak, saya harap kami boleh bersetuju bahawa kekhususan pemilih adalah perkara yang baik!
Atas ialah kandungan terperinci Menjinakkan lata dengan pemilih BEM dan moden CSS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kursor adat dengan CSS adalah hebat, tetapi kita boleh mengambil sesuatu ke peringkat seterusnya dengan JavaScript. Menggunakan JavaScript, kita boleh beralih antara negeri kursor, letakkan teks dinamik dalam kursor, gunakan animasi kompleks, dan gunakan penapis.

Animasi CSS interaktif dengan unsur -unsur yang menghilangkan satu sama lain kelihatan lebih masuk akal pada tahun 2025. Walaupun tidak perlu untuk melaksanakan pong dalam CSS, peningkatan fleksibiliti dan kuasa CSS mengukuhkan kecurigaan Lee '

Petua dan cara untuk menggunakan harta penapis latar belakang CSS ke antara muka pengguna gaya. Anda akan belajar bagaimana untuk meletakkan penapis latar belakang di antara pelbagai elemen, dan mengintegrasikannya dengan kesan grafik CSS yang lain untuk membuat reka bentuk yang rumit.

Nah, ternyata ciri-ciri animasi terbina dalam SVG ' s tidak pernah ditamatkan seperti yang dirancang. Pasti, CSS dan JavaScript lebih mampu membawa beban, tetapi ia baik untuk mengetahui bahawa SMIL tidak mati di dalam air seperti sebelumnya

Yay, let ' s melompat untuk teks-wrap: Pretty Landing dalam Pratonton Teknologi Safari! Tetapi berhati -hatilah bahawa ia ' s berbeza dari bagaimana ia berfungsi dalam pelayar kromium.

Kemas kini trik CSS ini menyoroti kemajuan yang ketara dalam almanak, penampilan podcast baru-baru ini, panduan kaunter CSS baru, dan penambahan beberapa penulis baru yang menyumbang kandungan berharga.

Kebanyakan masa, orang mempamerkan ciri-ciri Tailwind ' Apabila dipamerkan dengan cara ini, @apply tidak menjanjikan sama sekali. Jadi obvio

Menggunakan seperti idiot datang ke ketidakcocokan antara alat yang anda gunakan untuk menggunakan dan ganjaran dalam kerumitan dikurangkan berbanding kerumitan yang ditambah.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan