私が試しているのは、このCSSを要素に設定することです。
background: red !important;
しかし、私がこれをやろうとすると:
background: yellow;
それでも、私が望むように、その1つのフィールドの赤だけが表示され、黄色は表示されません(外部CSSを使用していません)。
私が求めているのは、それをオーバーライドする方法です、それは可能ですか?
Ans is[〜#〜] yes [〜#〜]!important
はオーバーライドできますが、!important
をオーバーライドすることはできません通常の宣言。それは他のすべての宣言よりも高い特異性でなければなりません。
ただし、より高い特異性の!important
宣言でオーバーライドできます。
Firefoxのパーサーのこのコードスニペットは説明します それがどのように機能するか :
if (HasImportantBit(aPropID)) {
// When parsing a declaration block, an !important declaration
// is not overwritten by an ordinary declaration of the same
// property later in the block. However, CSSOM manipulations
// come through here too, and in that case we do want to
// overwrite the property.
if (!aOverrideImportant) {
aFromBlock.ClearLonghandProperty(aPropID);
return PR_FALSE;
}
changed = PR_TRUE;
ClearImportantBit(aPropID);
}
良い読み
CSSをオーバーライドする方法を示す例を次に示します
[〜#〜] html [〜#〜]
<div id="hola" class="hola"></div>
[〜#〜] css [〜#〜]
div { height: 100px; width: 100px; }
div { background-color: green !important; }
.hola{ background-color:red !important; }
#hola{ background-color:pink !important;}
出力は
また、インライン!important
をオーバーライドすることはできません
[〜#〜] html [〜#〜]
<div id="demo" class="demo" style="background-color:yellow !important;"></div>
[〜#〜] css [〜#〜]
div { height: 100px; width: 100px; }
div { background-color: green !important; }
.demo{ background-color:red !important; }
#demo{ background-color:pink !important;}
出力は
w3 spec で説明されているように、!important
宣言は特異性を変更せず、「通常の」宣言よりも優先されます。事実上、そのような宣言はそれらの間でのみ「競合」します-したがって、より高い特異性の別の!important
宣言で自分の宣言をオーバーライドできます。
/*
these below are all higher-specificity selectors and, if both
rules are applicable to the same element, background colour
will be set to "yellow":
*/
.some-class.some-other-class, div.some-class, #some-id {background: yellow !important;}
.some-class {background: red !important;}
考慮すべき宣言の順序もあります。セレクターの特異性が同じである場合、CSSのさらに下の宣言が以前の宣言よりも優先されます。
注目に値するのは、インライン宣言と衝突する場合です。直感に反して(ただし、仕様に完全に一致しています)、!important
値が一番上に表示されます!これは、
<style>
#secret-container {display:none !important;}
</style>
<script>
$('#secret-container').show();//using jQuery etc.
</script>
<div id="secret-container">...</div>
問題のdivは非表示のままになります!インラインルールを!important
ルールよりも優先させる唯一の方法は、それに!important
を適用することです。私はあなたにಠ_ಠである練習がどれほど良いかを判断させます
!important
はbackground: yellow;
を上書きします!important
の使用は避けてください。 cssの特異性を見てください。 http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/