CSS 伪 Class 选择无效
CSS Pseudo Class Selection not working
我有以下 HTML 结构:
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
我想 select #c 通过 CSS。我试过:
ol > li:not(.active):last-child > a {
border: 1px solid green;
}
据我了解 li:not(.active) select 是所有 li 元素,但带有 class .active.
的元素除外
在这个 selection 上,我使用 :last-child 来获取这些 li 元素中的最后一个。但这行不通。怎么了?这可能是我想要实现的目标吗?
非常感谢:)
PS: 列表长度是动态的,元素没有任何可用于 CSS selection 的 id (我只是在示例中使用了一些来阐明我想要哪个元素 select);)
您编写的伪代码有效! <li>
中没有 last-child
,也没有 active
class。所以你的代码随时都会失败!检查另一个,其中最后一个 <li>
没有 active
.
或者您需要使用last-of-type
。检查 fiddle:
ol > li:not(.active):last-child > a {
border: 1px solid green;
}
ol > li:not(.active):last-of-type > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li class="active"><span>Not this</span></li>
<li><a id="c" href="#">This one</a></li>
</ol>
需要注意的一件事是,last-of-type
不考虑 :not()
。检查CSS: How to say .class:last-of-type [classes, not elements!]!您可能需要为此使用 JavaScript 或 jQuery。
部分解
如果你知道 Not this
总是出现在最后,你可以使用 nth-last-child(2)
:
ol > li:not(.active):nth-last-child(2) > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
您可以尝试以下方法CSS:
ol > li:not(.active):nth-last-child(1) > a,
ol > li:not(.active):nth-last-child(2) > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a>
</li>
<li><a id="b" href="#">Not this</a>
</li>
<li><a id="c" href="#">This one</a>
</li>
<li class="active"><a id="d" href="#">Not this</a>
</li>
</ol>
<ol>
<li><a id="e" href="#">Not this</a>
</li>
<li><a id="f" href="#">Not this</a>
</li>
<li class="active"><a id="g" href="#">Not this</a>
</li>
<li><a id="h" href="#">This one</a>
</li>
</ol>
只有当最后两个不能同时激活 class 时,此代码才有效。如果他们在某个时候都具有活动 class,则此 css 也会失败。
看看这个:https://css-tricks.com/useful-nth-child-recipies/
如果你想select倒数第二个child那么你可以试试:
ol li:nth-last-child(2) a{
border:1px solid green
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
我有以下 HTML 结构:
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
我想 select #c 通过 CSS。我试过:
ol > li:not(.active):last-child > a {
border: 1px solid green;
}
据我了解 li:not(.active) select 是所有 li 元素,但带有 class .active.
的元素除外在这个 selection 上,我使用 :last-child 来获取这些 li 元素中的最后一个。但这行不通。怎么了?这可能是我想要实现的目标吗?
非常感谢:)
PS: 列表长度是动态的,元素没有任何可用于 CSS selection 的 id (我只是在示例中使用了一些来阐明我想要哪个元素 select);)
您编写的伪代码有效! <li>
中没有 last-child
,也没有 active
class。所以你的代码随时都会失败!检查另一个,其中最后一个 <li>
没有 active
.
或者您需要使用last-of-type
。检查 fiddle:
ol > li:not(.active):last-child > a {
border: 1px solid green;
}
ol > li:not(.active):last-of-type > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li class="active"><span>Not this</span></li>
<li><a id="c" href="#">This one</a></li>
</ol>
需要注意的一件事是,last-of-type
不考虑 :not()
。检查CSS: How to say .class:last-of-type [classes, not elements!]!您可能需要为此使用 JavaScript 或 jQuery。
部分解
如果你知道 Not this
总是出现在最后,你可以使用 nth-last-child(2)
:
ol > li:not(.active):nth-last-child(2) > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>
您可以尝试以下方法CSS:
ol > li:not(.active):nth-last-child(1) > a,
ol > li:not(.active):nth-last-child(2) > a {
border: 1px solid green;
}
<ol>
<li><a id="a" href="#">Not this</a>
</li>
<li><a id="b" href="#">Not this</a>
</li>
<li><a id="c" href="#">This one</a>
</li>
<li class="active"><a id="d" href="#">Not this</a>
</li>
</ol>
<ol>
<li><a id="e" href="#">Not this</a>
</li>
<li><a id="f" href="#">Not this</a>
</li>
<li class="active"><a id="g" href="#">Not this</a>
</li>
<li><a id="h" href="#">This one</a>
</li>
</ol>
只有当最后两个不能同时激活 class 时,此代码才有效。如果他们在某个时候都具有活动 class,则此 css 也会失败。
看看这个:https://css-tricks.com/useful-nth-child-recipies/
如果你想select倒数第二个child那么你可以试试:
ol li:nth-last-child(2) a{
border:1px solid green
}
<ol>
<li><a id="a" href="#">Not this</a></li>
<li><a id="b" href="#">Not this</a></li>
<li><a id="c" href="#">This one</a></li>
<li class="active"><span>Not this</span></li>
</ol>