Ben tahmin edemez !importanttasarımları gereği neyse, getirilmesini engellemektedir. Bununla birlikte, CSS'nizle doluysa !important, bu, seçicilerin üzerinde kalifiye olduğunuzu ve çok spesifik olduğunuzu ve özgüllük eklemek için ebeveynleriniz veya niteleyicilerinizin bittiğini gösterir. Sonuç olarak, CSS şişirilmiş olmak (ki olacak olacak performansı olumsuz) ve sürdürmek zor.
Verimli CSS yazmak istiyorsanız, sadece ihtiyacınız olduğu kadar spesifik olmak ve modüler CSS yazmak istiyorsunuz . Kimlik (karma) ile kullanmak, zincirleme seçicileri veya eleme seçicileri kullanmaktan kaçınmanız önerilir.
#CSS'de ön ekli kimlikler , 255 sınıfın bir kimliği geçersiz kılmayacağı noktaya ( kısaca : @Faust ) özgüdür . Kimliklerin de daha derin bir sorunu var, benzersiz olmaları gerekiyor, bu da onları yinelenen stiller için tekrar kullanamayacağınız, böylece tekrarlayan stillerle doğrusal css yazdığınız anlamına geliyor. Bunu yapmanın yankısı, ölçeğe bağlı olarak projeden projeye değişecektir, ancak sürdürülebilirlik son derece ve bazı durumlarda performansta da olumsuz etkilenecektir.
!importantZincirleme, nitelendirme veya kimlikler olmadan (yani #) özgüllüğü nasıl ekleyebilirsiniz?
HTML
<div class="eg1-foo">
<p class="eg1-bar">foobar</p>
</div>
<div id="eg2-foo">
<p id="eg2-bar">foobar</p>
</div>
<div class="eg3-foo">
<p class="eg3-foo">foobar</p>
</div>
CSS
.eg1-foo {
color: blue;
}
.eg1-bar {
color: red;
}
[id='eg2-foo'] {
color: blue;
}
[id='eg2-bar'] {
color: red;
}
.eg3-foo {
color: blue;
}
.eg3-foo.eg3-foo {
color: red;
}
JSFiddle
Tamam, bu nasıl çalışıyor?
İlk ve ikinci örnekler aynı şekilde çalışır, birincisi tam anlamıyla bir sınıftır ve ikincisi nitelik seçicidir. Sınıflar ve Öznitelik seçicileri aynı özgünlüğe sahiptir. .eg1/2-barrengini miras almaz .eg1/2-fooçünkü kendi kuralı vardır.
Üçüncü örnek, nitelikli veya zincirleme seçicilere benziyor, ancak ikisi de değil. Zincirleme, seçicilere ebeveynlerin, ataların vb. bu özgüllük katar. Nitelik benzerdir, ancak seçicinin uygulandığı öğeyi tanımlarsınız. eleme: ul.classve zincirleme:ul .class
Bu tekniğe ne diyeceğinizden emin değilim, ancak davranış kasıtlı ve W3C tarafından belgelendi
Aynı basit seçicinin tekrarlanan oluşumlarına izin verilir ve özgüllüğü arttırır.
İki kural arasındaki özgüllük aynı olduğunda ne olur?
As @BoltClock işaret birden varsa,! O zaman önemli bildirimleri Spec emirlerini en spesifik bir öncelik olmalıdır.
Aşağıdaki örnekte, her ikisi de .foove .baraynı özgüllüğe sahiptir, bu nedenle davranış CSS'nin basamaklı doğasına geri döner, bu şekilde CSS'de bildirilen son kural, örneğin önceliği olduğunu iddia eder .foo.
HTML
<div>
<p class="foo bar">foobar</p>
</div>
CSS
.bar {
color: blue !important;
}
.foo {
color: red !important;
}
JSFiddle