私がしようとしているのは、このCSSを要素に設定することです:
background: red !important;
しかし、私がこれをやろうとすると:
background: yellow;
私が望むように、それはまだその1つのフィールドの黄色ではなく赤だけを示しています(私は外部CSSを使用していません)。
私が求めているのは、それをオーバーライドする方法です。それは可能ですか?
私がしようとしているのは、この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 仕様で説明されているように、!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
することです。それがどれだけ良い練習かはあなたに判断してもらいましょうಠ_ಠ</p>
ただし、インラインでオーバーライド!important
することはありません。
!important
をオーバーライドしますbackground: yellow;
の使用を避けるようにしてください!important
。CSS の特異性を見てみましょう。http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/