Rumah >hujung hadapan web >tutorial css >Kekhususan pemilih dengan preprocessors CSS
mata utama
, izinkan saya mengingatkan anda: & gt; - Tony Nelson (@Tonynelson19) 18 November 2010 !important
!important
kekhususan CSS tidak rumit, tetapi masyarakat telah melakukan banyak kerja untuk menjadikannya mudah difahami mungkin, menulis panduan dengan menggunakan analogi untuk ikan dan Star Wars atau menggunakan istilah poker. Terdapat kalkulator interaktif yang terdapat dalam talian, dan juga Mixin khusus Sass, yang membolehkan anda menyemak dan mengeluarkan nilai kekhususan yang tepat bagi pemilih. Dalam strategi khusus CSS, lebih mudah lebih baik, penyelesaian khusus dalam artikel ini (yang mungkin merasakan sedikit kekok) sesuai untuk situasi di mana seni bina tidak membenarkan pembetulan mudah. Apabila memutuskan pendekatan mana yang terbaik untuk projek anda, gunakan penghakiman anda dan akhirnya cuba menyerang keseimbangan sempurna antara CSS yang bersih dan mudah untuk dikekalkan. !important
kaedah 0 - bem
BEM bukan sekadar konvensyen penamaan, ia adalah toolkit front-end yang dicipta oleh Yandex, dengan idea menjadi lebih dekat dengan pengaturcaraan berorientasikan objek. Dalam amalan, ini bermakna menggunakan nama kelas untuk semua yang anda mahu gaya. Walaupun "tidak selongsong dalam lembaran gaya cascading" mungkin terdengar tidak masuk akal bagi sesetengah orang, elakkan menggunakan pemilih jenis apabila membuat modul yang harus mudah dikekalkan, mudah alih, mandiri, mudah diubahsuai dan diperpanjang dan idea untuk mengelakkan sarang sangat membantu. Walau bagaimanapun, salah satu kelebihan utama kaedah BEM ialah ia mengekalkan kekhususan setiap pemilih tidak berubah, jadi hampir tidak ada masalah yang disebabkan oleh pemilih yang terlalu spesifik, itulah sebabnya kaedah ini adalah kaedah No 0 - jika anda mengamalkannya , anda sebenarnya menghapuskan sebarang isu masa depan dengan kekhususan pemilih dalam projek anda.
kerana anda hanya akan menggunakan kelas tunggal untuk semua yang anda tulis, kekhususan setiap pemilih akan menjadi 0,1,0
(contohnya, untuk menjadikannya lebih ringan), tetapi sebaliknya memerlukan anda untuk mencipta kelas untuk tag utama. Ini membawa kepada masalah - Editor Kandungan akan memasukkan pautan lalai melalui antara muka grafik, yang boleh menyebabkan pautan menjadi hampir tidak kelihatan. Ini juga boleh digunakan untuk semua perenggan, senarai, atau imej dalam bahagian tertentu. Kadang -kadang perlu menulis kandungan HTML tulen tanpa kelas, di mana penyelesaiannya adalah untuk mempunyai gaya induknya dengan pemilih keturunan. Penggunaan cascading ini membolehkan fleksibiliti konteks -ia mempunyai gaya tersuai apabila sesuatu dalam konteks yang berbeza. Oleh itu, kita memerlukan penyelesaian praktikal untuk situasi di mana kita tidak boleh menggunakan BEM tulen, yang agak biasa. Preprocessors CSS boleh membantu kami di sini, dan semua 3 preprocessors popular - kurang, sass dan stylus - dapat memudahkan kerja kita apabila kita perlu mengatasi pemilih dengan pemilih yang lebih spesifik. .Section--dark > a
Kaedah 1 - Gunakan pemilih untuk menambah awalan
Apabila anda menghadapi masalah kekhususan dan ingin membuat pemilih lebih berat, anda boleh menambah kelas, atribut, ID, atau pemilih taip sebelum pemilih yang sedia ada. Dengan cara ini, anda boleh sedikit meningkatkan kekhususan. Walaupun ciri ini digunakan terutamanya untuk mencari IE menggunakan tag HTML bersyarat, ia mempunyai lebih banyak ciri yang akan dibangunkan. Pemilih Rujukan Ibu Bapa (&) dalam preprocessor CSS membolehkan kami dengan mudah menambah awalan pemilih untuk menjadikannya lebih berat, jadi kami boleh melakukan perkara berikut:
<code>.class { body & { foo: bar; } }</code>dicipta CSS:
<code>.class { body & { foo: bar; } }</code>
Anda mungkin mahu menggunakan tag HTML atau badan untuk awalan, tetapi anda juga boleh menggunakan beberapa kandungan yang lebih spesifik yang ada pada halaman, seperti .page
, #wrapper
, html[lang]
, dan lain -lain. SASS membolehkan anda meletakkan pemilih yang diawali dalam pembolehubah apabila perubahan berlaku pada masa akan datang.
<code>body .class { foo: bar; }</code>ini akan menjana:
<code>$prepend1: "html &"; $prepend2: "#wrapper &"; .selector { #{$prepend1} { background: #cacaca; } #{$prepend2} { background: #fefefe; } }</code>Preprocessors popular lain seperti Less dan Stylus juga menawarkan ciri ini.
Spesifikasi Peraturan
), anda tidak boleh mengatasinya lagi melainkan jika anda mencipta pemilih yang baru, lebih berat, dan ini tidak selalu mungkin. #wrapper
Kaedah 2-Pemilih Rantaian Sendiri
Menambah awalan pemilih berguna, tetapi ia bukan penyelesaian yang tidak dapat disangkal - anda mungkin hanya mempunyai cara yang terhad untuk mencari ibu bapa. Di samping itu, sebaik sahaja anda awalan pemilih berganda dengan pilihan paling berat dalam kod anda, anda akan mengehadkan pilihan untuk menyelesaikan masalah kekhususan kemudian (terutamanya jika anda menggunakan ID). Masyarakat front-end baru-baru ini telah diingatkan tentang ciri CSS yang sangat berguna-pemilih rantaian diri untuk meningkatkan kekhususan mereka. Pemilih rantaian sendiri sesuai untuk pemilih ID, kelas, dan atribut, tetapi bukan untuk pemilih jenis. Walau bagaimanapun, jika anda menggunakan kelas untuk kandungan gaya, pemilih rantaian diri menyediakan anda dengan cara yang berskala yang tak terhingga untuk menimpa pemilih mana-mana. Dengan pemilih rujukan induk, anda boleh dengan mudah menghubungkan pemilih yang sama dengan dirinya sendiri beberapa kali (ini terpakai kepada pemilih ID, kelas, dan atribut, tetapi tidak menaip pemilih). Walau bagaimanapun, anda perlu memasukkan setiap & selepas yang pertama, keperluan minimum adalah SASS 3.4:
<code>html .selector { background: #cacaca; } #wrapper .selector { background: #fefefe; }</code>
<code>.selector { {&} { background: #cacaca; } {&}{&} { background: #fefefe; } }</code>Begitu juga, anda boleh melakukan ini dengan menggunakan kurang dan stylus. Jika ini terlalu hodoh untuk citarasa anda, anda sentiasa boleh membuat campuran yang secara beransur -ansur meningkatkan kekhususan mana -mana pemilih tunggal. Mixin ini menggunakan beberapa ciri canggih dan juga memerlukan SASS 3.4:
<code>.selector.selector { background: #cacaca; } .selector.selector.selector { background: #fefefe; }</code>dicipta CSS:
<code>@mixin specificity($num: 1) { $selector: &; @if $num > 1 { @for $i from 1 to $num { $selector: $selector + &; } @at-root #{$selector} { @content; } } @else { @content; } } .selector { @include specificity(2) { background: #cacaca; } @include specificity(3) { background: #fefefe; } }</code>anda boleh membuat campuran yang sama di stylus, malangnya tidak ada cara mudah untuk membuat campuran sedemikian kurang.
Spesifikasi Peraturan
Pemikiran Akhir
Langkah semulajadi seterusnya dalam menangani isu -isu kekhususan dalam CSS yang lebih bijak daripada sebelumnya adalah untuk mewujudkan cara untuk mengenal pasti pernyataan yang bercanggah, menggunakan sesuatu seperti sass mixin David Khourshid untuk setiap kekhususan entiti, kemudian menggunakan salah satu kaedah di atas untuk memperbaiki kekhususan. Mungkin saya terlalu optimis mengenai impian saya tentang gaya gaya diri, tetapi saya fikir logik kompleks dalam kod kami akan meningkat apabila preprocessors CSS berkembang. Antara kaedah di atas yang akan anda gunakan pada masa akan datang, anda perlu menangani masalah kekhususan? Apakah strategi lain yang anda gunakan untuk menyelesaikan masalah kekhususan anda?
Soalan Lazim Mengenai CSS Preprocessor dan Specifice Selector
Bagaimanakah bersarang mempengaruhi kekhususan pemilih dalam preprocessors CSS?
Bagaimana untuk mengira kekhususan pemilih dalam preprocessors CSS?
Apa maksud "&" dalam gaya CSS dalam preprocessors seperti SASS?
Bagaimana menggunakan pemilih dua dalam SASS untuk meningkatkan berat tertentu?
akan lebih tinggi daripada .class.class
. Walau bagaimanapun, kaedah ini harus digunakan dengan berhati -hati, kerana ia akan menjadikan CSS anda lebih sukar untuk mengekalkan dan menimpa. .class
Terdapat beberapa strategi untuk menguruskan kekhususan dalam preprocessors CSS. Satu adalah menggunakan pemilih spesifik rendah sebanyak mungkin. Satu lagi adalah untuk mengelakkan bersarang yang tidak perlu, kerana ini meningkatkan kekhususan. Anda juga boleh menggunakan kaedah BEM (blok, elemen, pengubahsuaian) untuk memastikan kekhususan rendah dan konsisten.
Ya, anda boleh menggunakan peraturan !important
untuk mengatasi kekhususan dalam preprocessor CSS. Walau bagaimanapun, ini harus menjadi usaha terakhir, kerana ia akan menjadikan CSS anda lebih sukar untuk mengekalkan dan boleh membawa kepada konflik tertentu.
Perintah pemilih mempengaruhi kekhususan dalam preprocessor CSS. Jika kekhususan kedua -dua pemilih adalah sama, pemilih terakhir yang muncul dalam CSS akan digunakan. Ini dipanggil kekhususan pesanan sumber.
Ya, gaya inline mempunyai kekhususan tertinggi dalam CSS dan boleh mengatasi gaya lain. Walau bagaimanapun, gunakannya dengan berhati -hati, kerana mereka boleh menjadikan CSS anda lebih sukar untuk dikekalkan dan boleh membawa kepada gaya yang tidak konsisten.
Atas ialah kandungan terperinci Kekhususan pemilih dengan preprocessors CSS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!