今日問題が発生した後、CSSクラスの優先順位について質問があります。状況は次のとおりです。
クラスが関連付けられている順序付けられていないリストがあります。 LI
タグにもいくつかのスタイルが定義されています。クリック後にLI
sのスタイルを(追加された"selected"
クラスを介して)変更したいのですが、追加されたクラスのスタイルが適用されません。これは正常な動作ですか、それともこのコードは機能するはずですか?
CSS:
.dynamicList
{
list-style: none;
}
.dynamicList li
{
display: block;
width: 400px;
height: 55px;
padding: 10px 10px 10px 10px;
border: 1px solid #000;
background-color: #ff0000;
}
.selectedItem
{
background-color: #0000ff;
}
HTML:
<ul class="dynamicList">
<li>First Item</li>
<li class="selectedItem">Second (Selected) Item</li>
</ul>
"selected"
リスト項目の背景色は変更されません。これは、スタイルをLI
要素に適用せずに、別のクラスを作成し、それをすべてのリストアイテムに適用して読み取る場合にも当てはまります。
<li class="listitem selectedItem">xxxx</li>
これは CSSの特異性 の問題のように聞こえます。 .selectedItem
ルールセットを次のように変更してみてください:
.dynamicList li.selectedItem {
background-color: #0000ff;
}
簡単に言うと、以前のスタイルはより具体的であり、優先度が高いため、.selectedItemスタイルは適用されません。 まともなランダウン :
それでは、CSSの内部優先度の一般的なリストを作成しましょう(3が最高の優先度です)。
element .class #id
これがデフォルトの優先順位です。これに加えて、特異性もカウントされ、f.ex ulliはliをオーバーライドします。 W3Cは、内部重量の計算方法について適切な表を作成しました。
LI {...} /* a=0 b=0 c=1 -> specificity = 1 */ UL LI {...} /* a=0 b=0 c=2 -> specificity = 2 */ UL OL LI {...} /* a=0 b=0 c=3 -> specificity = 3 */ LI.red {...} /* a=0 b=1 c=1 -> specificity = 11 */ UL OL LI.red {...} /* a=0 b=1 c=3 -> specificity = 13 */ #list {...} /* a=1 b=0 c=0 -> specificity = 100 */
そしてここに W3C仕様 があります。
selectedItem
ルールを次のように変更します。
.dynamicList li.selectedItem
{
background-color: #0000ff;
}
Cletusの投稿では言及されていない小さな追加。W3C
リンクによると、最高の優先順位は、html要素/タグで使用されるstyle
属性です。
例えば。あなたが持っている場合
<a id= bar style="color: red">foo</a>
そして
<style>
#bar {
color: blue;
}
</style>
インラインHTMLスタイルの優先度が最も高く、#
よりも高いため、色はred
になります。