私はよく CSS オーバーライド ルールに混乱します。一般的に、より具体的なスタイル シートはあまり具体的でないスタイル シートをオーバーライドし、その具体性は指定されたセレクターの数によって決まることを認識しています。また!important
、同様に役割を果たすキーワードもあります。
簡単な例を次に示します。2 つのテーブル セルを含むテーブルがあります。テーブル自体には、テーブル内のすべてのセルに適用される CSS ルールがあります。ただし、2 番目のテーブル セルには、一般的なテーブル ルールをオーバーライドする独自のルールがあります。
<html>
<head>
<style type = "text/css">
table.rule1 tr td {
background-color: #ff0000;
}
td.rule2 {
background-color: #ffff00;
}
</style>
</head>
<body>
<table class = "rule1">
<tr>
<td>abc</td>
</tr>
<tr>
<td class = "rule2">abc</td>
</tr>
</table>
</body>
</html>
しかし...これをブラウザで開くと、rule2
オーバーライドされていないことがわかりますrule1
。わかりました-rule2
より「具体的」にする必要があると思いますが、特定のテーブルセルに適用したいだけなので、これ以上セレクターを定義することはできません。ということで、キーワードを入れてみました! important
が、それもうまくいきません。
rule2
次のように、テキスト ノードを でラップするとオーバーライドできます<div>
。
<td class = "rule2"><div>abc</div></td>
...次に、CSS ルールをより具体的にします。
td.rule2 div {
background-color: #ffff00; !important
}
これは機能しますが、私が望むものではありません。1 つには、ルールをDIV ではなくtable cellに適用したいということです。rule1
背景色がdiv の周囲の境界線として表示されるため、違いが生じます。
では、CSS に要素rule2
をオーバーライドrule1
するように指示するにはどうすればよいでしょうか?td