!important
本来、パフォーマンスの低下を予測することはできません。ただし、CSSにが含まれて!important
いる場合は、セレクターを修飾しすぎて具体的すぎて、親または修飾子が不足して具体性を追加したことを示しています。その結果、あなたのCSSは、肥大化(どのようになっただろうになるパフォーマンスを低下)し、維持するのが難しいです。
効率的なCSSを記述したい場合は、必要なだけ具体的にして、モジュラーCSSを記述したい。ID(ハッシュを含む)、チェーンセレクター、または修飾セレクターの使用は控えることをお勧めします。
#
CSSで接頭辞が付けられたID は、255のクラスがIDをオーバーライドしないところまで、悪質に特定されています(次のように調整します:@Faust)。しかし、IDにはより深いルーティングの問題もあります。IDは一意である必要があります。つまり、IDを重複したスタイルに再利用することができないため、繰り返しのスタイルで線形のCSSを作成することになります。これを行うことの影響は、規模によってプロジェクトごとに異なりますが、保守性は非常に悪化し、場合によってはパフォーマンスも低下します。
!important
、チェーン、修飾、またはID(つまり#
)なしで具体性を追加するにはどうすればよいですか?
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
さて、それはどのように機能しますか?
最初と2番目の例は同じように機能し、最初の例は文字通りクラスであり、2番目の例は属性セレクターです。クラスと属性セレクターは同一の特異性を持っています。.eg1/2-bar
から色を継承しない.eg1/2-foo
独自のルールがあるため。
3番目の例は、セレクターの修飾またはチェーンのように見えますが、どちらでもありません。連鎖とは、セレクターに親、祖先などのプレフィックスを付けることです。これは特異性を追加します。修飾も同様ですが、セレクターが適用する要素を定義します。適格性:ul.class
および連鎖:ul .class
このテクニックを何と呼ぶかわかりませんが、動作は意図的なものであり、W3Cによって文書化されています
同じ単純なセレクターの繰り返し出現が許可され、特異性が向上します。
2つのルール間の特異性が同一である場合はどうなりますか?
以下のよう@BoltClockが指摘そこの、複数の!重要な宣言というスペックおもむくままならば、ほとんどの特定の 1を優先すべきです。
以下の例では、両方が同じ特異性.foo
を.bar
持っているため、動作はCSSのカスケードの性質にフォールバックし.foo
ます。これにより、CSSで宣言されている最後のルールが優先順位を要求します。
HTML
<div>
<p class="foo bar">foobar</p>
</div>
CSS
.bar {
color: blue !important;
}
.foo {
color: red !important;
}
JSFiddle