mata utama
blok yang boleh dicampur dan dipadankan untuk mewujudkan antara muka. Blok hanyalah sebahagian daripada dokumen, seperti tajuk, footer, atau bar sisi, seperti yang ditunjukkan dalam angka berikut. Mungkin mengelirukan, "blok" di sini merujuk kepada coretan HTML yang membentuk halaman atau aplikasi.
Blok boleh mengandungi blok lain. Sebagai contoh, blok tajuk juga boleh mengandungi logo, navigasi, dan blok borang carian seperti yang ditunjukkan di bawah. Blok footer mungkin mengandungi jubin peta tapak.
unsur -unsur lebih halus daripada blok. Seperti dokumentasi BEM menerangkan:
adalah sebahagian daripada blok yang melaksanakan fungsi tertentu. Unsur -unsur bergantung pada konteks: mereka hanya masuk akal dalam konteks blok yang mereka milik.
Sebagai contoh, blok borang carian mengandungi elemen input teks dan menyerahkan elemen butang, seperti yang ditunjukkan dalam gambar di bawah. (Demi kejelasan, kita menggunakan "elemen" dalam arti unsur -unsur reka bentuk, bukan "elemen" dalam erti elemen HTML.)
Sebaliknya, blok kandungan utama mungkin mempunyai blok senarai artikel. Blok senarai pos ini mungkin mengandungi satu siri blok promosi pos. Setiap blok promosi artikel mungkin mengandungi imej, petikan, dan "baca lebih lanjut" elemen seperti yang ditunjukkan di bawah.
Blok dan unsur -unsur bersama -sama membentuk asas konvensyen penamaan BEM. Menurut peraturan BEM:
Nama blok mestilah unik dalam projek
variasi borang ini dengan latar belakang gelap boleh menggunakan tag berikut:
<div class="search"> <label for="s" class="search__label">Search for: </label> <input type="text" id="s" class="search__input"> <button class="search__submit">Search</button> </div>
CSS kami mungkin kelihatan seperti ini:
<div class="search search--inverse"> <label for="s" class="search__label search__label--inverse">Search for: </label> <input type="text" id="s" class="search__input"> <button class="search__submit search__submit--inverse">Search</button> </div>
Dalam tag dan CSS kami, carian-Inverse dan Search__Label-Inverse adalah nama kelas yang dilampirkan pada
. Mereka bukan alternatif untuk mencari dan mencari__label. Nama kelas adalah satu -satunya jenis pemilih yang digunakan dalam sistem BEM. Subselektor dan keturunan boleh digunakan, tetapi keturunan juga harus menjadi nama kelas. Elemen dan pemilih ID dilarang. Menguatkuasakan keunikan blok dan nama elemen juga menghalang konflik penamaan, yang boleh menjadi masalah dalam pasukan. Kaedah ini mempunyai beberapa kelebihan:.search { color: #333; } .search--inverse { color: #fff; background: #333; } .search__submit { background: #333; border: 0; color: #fff; height: 2rem; display: inline-block; } .search__submit--inverse { color: #333; background: #ccc; }
ahli pasukan baru dapat membaca tanda dan CSS dengan mudah dan memahami tingkah laku mereka
Menambah lebih banyak pemaju dapat meningkatkan produktiviti pasukanJika BEM adalah sayang industri, maka CSS atom adalah pemberontaknya. Thierry Kobleentz dari Yahoo menamakan dan menerangkan CSS Atom dalam artikel 2013 "Praktik Terbaik CSS yang mencabar", yang menggunakan perpustakaan kompak nama kelas. Nama kelas ini biasanya disingkat dan tidak disentuh dengan apa yang mereka mempengaruhi. Dalam sistem CSS atom, anda boleh mengetahui nama kelas apa - tetapi tidak ada hubungan antara nama kelas (sekurang -kurangnya, nama kelas yang digunakan dalam lembaran gaya) dan jenis kandungan. Mari kita gunakan contoh untuk menggambarkan. Berikut adalah satu set peraturan yang mungkin kita panggil dalam apa yang kita panggil seni bina CSS tradisional. Set peraturan ini menggunakan nama kelas yang menggambarkan kandungan aplikasi mereka -kotak mesej global, dan gaya kejayaan, amaran, dan kotak mesej ralat:
<div class="search"> <label for="s" class="search__label">Search for: </label> <input type="text" id="s" class="search__input"> <button class="search__submit">Search</button> </div>
mari kita bandingkan dengan sistem atom, di mana setiap perisytiharan menjadi kelasnya sendiri:
<div class="search search--inverse"> <label for="s" class="search__label search__label--inverse">Search for: </label> <input type="text" id="s" class="search__input"> <button class="search__submit search__submit--inverse">Search</button> </div>
Ini lebih CSS. Sekarang mari kita buat semula komponen mesej ralat kami. Menggunakan CSS Atom, tag kami menjadi:
.search { color: #333; } .search--inverse { color: #fff; background: #333; } .search__submit { background: #333; border: 0; color: #fff; height: 2rem; display: inline-block; } .search__submit--inverse { color: #333; background: #ccc; }
tanda kami juga lebih lama. Tetapi apa yang berlaku apabila kita membuat komponen mesej amaran?
.msg { background-color: #a6d5fa; border: 2px solid #2196f3; border-radius: 10px; font-family: sans-serif; padding: 10px; } .msg-success { background-color: #aedbaf; border: 2px solid #4caf50; } .msg-warning { background-color: #ffe8a5; border-color: #ffc107; } .msg-error { background-color: #faaaa4; border-color: #f44336; }
Kedua-dua nama kelas telah berubah: BG-D dan BC-D digantikan oleh BG-C dan BC-C. Kami menggunakan semula lima set peraturan. Sekarang, mari buat butang:
<p class="msg msg-error">An error occurred.</p>
hei! Di sini kita menggunakan semula empat set peraturan dan elakkan menambah lebih banyak peraturan ke stylesheet kami. Dalam seni bina CSS atom yang kuat, menambah komponen HTML baru (seperti bar sisi pasca) tidak memerlukan menambah lebih banyak CSS (walaupun pada hakikatnya, ia mungkin memerlukan menambah lebih banyak). CSS atom agak seperti menggunakan kelas utiliti dalam CSS, tetapi ia mencapai hadnya. Khususnya, ia:
.bg-a { background-color: #a6d5fa; } .bg-b { background-color: #aedbaf; } .bg-c { background-color: #ffe8a5; } .bg-d { background-color: #faaaa4; } .bc-a{ border-color: #2196f3; } .bc-b { border-color: #4caf50; } .bc-c { border-color: #ffc107; } .bc-d { border-color: #f44336; } .br-1x { border-radius: 10px; } .bw-2x { border-width: 2px; } .bss { border-style: solid; } .sans { font-style: sans-serif; } .p-1x { padding: 10px; }
Pastikan CSS ringkas dengan mewujudkan gaya yang sangat halus, sangat boleh diguna semula dan bukannya membuat set peraturan untuk setiap komponen
CSS atom yang bertentangan dengan hampir semua yang kita pelajari tentang menulis CSS. Rasanya hampir sama buruknya dengan ciri -ciri gaya penampan di mana -mana. Malah, salah satu kritikan utama metodologi CSS atom adalah bahawa ia mengaburkan garis antara kandungan dan persembahan. Jika anda mengapung elemen ke kiri dan tambahkan margin sepuluh piksel, apa yang perlu anda lakukan apabila kita tidak lagi mahu elemen terapung ke kiri? Sudah tentu, satu jawapan adalah untuk mengeluarkan kelas FL dari elemen kami. Tetapi sekarang kita mengubah HTML. Keseluruhan alasan untuk menggunakan CSS adalah untuk memastikan tag tidak terjejas oleh demonstrasi dan sebaliknya. . CSS. Dalam artikel asal Kobleentz, dia menggunakan nama kelas seperti.-10 (margin: 10px) dan .p-10 (padding: 10px). Masalah dengan konvensyen penamaan ini harus jelas. Menukar kepada margin lima piksel atau 20 piksel bermakna kita perlu mengemas kini CSS dan
belajar bila hendak pergi jalan anda sendiri
Dalam praktiknya, CSS anda mungkin mengandungi campuran pelbagai kaedah. Sebagai tambahan kepada nama kelas utiliti yang mempengaruhi susun atur, anda juga mungkin mempunyai beberapa nama kelas yang menggambarkan kandungan atau komponen. Jika anda tidak mempunyai kawalan penuh ke atas tag (contohnya menggunakan CMS), kaedah ini tidak berguna. Anda mungkin perlu menggunakan pemilih yang panjang dan khusus untuk mencapai apa yang anda mahukan.bem (blok, elemen, pengubah) dan CSS atom adalah kedua -dua metodologi untuk menganjurkan dan membina kod CSS. BEM memberi tumpuan kepada konvensyen penamaan yang menjadikan CSS lebih mudah dibaca dan difahami. Ia membahagikan reka bentuk ke dalam blok, elemen, dan pengubah untuk mewujudkan hubungan yang jelas dan ketat antara CSS dan HTML. CSS Atom, sebaliknya, adalah tentang menulis kelas CSS yang kecil, satu tujuan yang mencerminkan fungsi visual. Ia menggalakkan kebolehgunaan dan bertujuan untuk mengurangkan jumlah kod.
BEM meningkatkan skalabilitas CSS dengan menyediakan hubungan yang jelas dan ketat antara CSS dan HTML. Ia menggunakan konvensyen penamaan khusus untuk memudahkan untuk memahami hubungan antara unsur -unsur yang berbeza. Ini menjadikan kod lebih mudah untuk mengekalkan dan skala kerana lebih mudah untuk menambah ciri -ciri baru atau mengubah suai ciri sedia ada tanpa memecahkan apa -apa.
Ya, BEM dan CSS atom boleh digunakan serentak. Sesetengah pemaju telah mendapati bahawa menggabungkan kedua -dua pendekatan ini dapat mencapai yang terbaik dari kedua -dua dunia. Konvensyen penamaan yang ketat BEM boleh digunakan untuk membina CSS, manakala kelas satu tujuan CSS atom boleh digunakan untuk gaya satu elemen. Gabungan ini boleh menghasilkan asas kod CSS yang sangat teratur dan mudah untuk dijaga.
CSS atom memberikan banyak faedah. Ia menggalakkan kebolehgunaan semula, yang boleh mengurangkan jumlah CSS yang anda perlukan untuk menulis. Ia juga meningkatkan konsistensi reka bentuk, kerana kelas yang sama digunakan untuk komponen yang berbeza. Di samping itu, CSS atom boleh menjadikan stylesheets anda lebih mudah untuk dikendalikan dan difahami, kerana setiap kelas mempunyai satu tujuan yang jelas.
BEM membantu menangani isu kekhususan CSS dengan menggalakkan pemaju menggunakan pemilih kelas dan bukan pemilih ID. Ini menghasilkan konsistensi dalam kekhususan sepanjang projek, menjadikannya lebih mudah untuk menutup gaya jika perlu. Selain itu, konvensyen penamaan BEM jelas menunjukkan unsur -unsur yang berkaitan, dengan itu mengurangkan kemungkinan konflik gaya yang tidak dijangka.
Ya, CSS atom sesuai untuk projek besar. Tumpuannya terhadap kebolehgunaan semula dan kelas tujuan tunggal dapat membantu mengekalkan CSS walaupun projek terus berkembang. Walau bagaimanapun, ia memerlukan pendekatan yang ketat untuk memastikan kelas konsisten dan bermakna.
Konvensyen penamaan yang jelas dan ketat BEM menjadikannya lebih mudah bagi ahli pasukan untuk memahami kod CSS setiap kali mereka menyertai projek. Ini meningkatkan kerjasama kerana pemaju dapat dengan mudah memahami dan mengubah suai kod yang ditulis oleh orang lain.
Kelemahan potensi CSS atom adalah bahawa ia boleh membawa kepada sejumlah besar kelas dalam HTML. Ini mungkin menjadikan HTML lebih sukar untuk dibaca dan difahami. Tambahan pula, CSS atom memerlukan pendekatan yang ketat untuk memastikan kelas adalah konsisten dan bermakna.
Untuk mula melaksanakan BEM, anda perlu membahagikan reka bentuk ke dalam blok, elemen, dan pengubah. Kemudian, gunakan konvensyen penamaan BEM untuk menamakan kelas CSS anda. Ini akan mewujudkan hubungan yang jelas antara CSS dan HTML anda, menjadikan kod anda lebih mudah dibaca dan diselenggara.
Ya, kedua -dua BEM dan CSS atom boleh digunakan dengan preprocessors CSS seperti SASS atau kurang. Preprocessors ini boleh menjadikan menguruskan CSS lebih mudah, dan mereka sesuai dengan prinsip -prinsip organisasi BEM dan CSS atom.
Atas ialah kandungan terperinci Senibina CSS: Pengubah Elemen Blok (BEM) & CSS Atom. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!