Ben tahmin edemez !important
tasarı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.
!important
Zincirleme, 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-bar
rengini 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.class
ve 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 .foo
ve .bar
aynı ö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