CSS 类优先级

发布于 2024-07-27 00:52:52 字数 992 浏览 4 评论 0原文

今天遇到问题后,对CSS类的优先级产生了疑问。 情况如下:

我有一个无序列表,它有一个与之关联的类。 LI 标签也定义了一些样式。 我想在单击后更改 LI 的样式(通过添加的 "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>

I have a question about the priority of CSS classes after encountering a problem today. The situation is as follows:

I have an unordered list which has a class associated with it. The LI tags have some styles defined too. I want to change the styling of the LIs after a click (via an added "selected" class), but the added class's styles are never applied. Is this normal behavior or should this code work?

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>

The background color of the "selected" list item isn't changed. This is also the case if I don't apply the style to the LI element, but create another class and apply that to all the list items so it reads..

<li class="listitem selectedItem">xxxx</li>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

智商已欠费 2024-08-03 00:52:52

这听起来像是 CSS 特异性问题。 尝试将您的 .selectedItem 规则集更改为:

.dynamicList li.selectedItem {
  background-color: #0000ff;
}

This sounds like a CSS specificity problem. Try changing your .selectedItem ruleset to:

.dynamicList li.selectedItem {
  background-color: #0000ff;
}
扮仙女 2024-08-03 00:52:52

简而言之,您的 .selectedItem 样式没有被应用,因为以前的样式更具体,因此具有更高的优先级。 这是一个不错的概要

现在,让我们列出一个总体列表
CSS 的内部优先级(3 具有
最高优先级):

<前><代码>元素
。班级
#ID

这是默认的优先级顺序。 在
除此之外,特异性将
也算,f.ex ul li 将覆盖
李。 W3C 已经做出了不错的表
你应该如何计算内部
重量:

LI {...} /* a=0 b=0 c=1 ->   特异性 = 1 */ 
  UL LI {...} /* a=0 b=0 c=2 ->   特异性 = 2 */ 
  UL OL LI {...} /* a=0 b=0 c=3 ->   特异性 = 3 */ 
  LI.red {...} /* a=0 b=1 c=1 ->   特异性 = 11 */ 
  UL OL LI.red {...} /* a=0 b=1 c=3 ->   特异性 = 13 */ 
  #list {...} /* a=1 b=0 c=0 ->   特异性 = 100 */ 
  

这是W3C 规范

The short answer is that your .selectedItem style isn't getting applied because the previous style is more specific and thus has a higher priority. Here is a decent rundown:

Now, let’s make a general list of the
internal priorities for CSS (3 has the
highest priority):

element
.class
#id

This is the default priority order. In
addition to this, specificity will
also count, f.ex ul li will override
li. W3C has made a decent table over
how you should calculate internal
weight:

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 */

And here is the W3C specification.

烟酉 2024-08-03 00:52:52

selectedItem 规则更改为:

.dynamicList li.selectedItem
{
    background-color: #0000ff;
}

Change the selectedItem rule to:

.dynamicList li.selectedItem
{
    background-color: #0000ff;
}
吐个泡泡 2024-08-03 00:52:52

cletus 的帖子中没有提到的一个小补充。
根据W3C链接,最高优先级是html元素/标签中使用的style属性。

例如,如果你有

<a id= bar style="color: red">foo</a>

and

<style>
#bar {
    color: blue;
}
</style>

颜色将为red,因为内联html样式具有最高优先级,高于#

A small addition that was not mentioned by cletus' post.
According to the W3C link, the highest priority is the style attribute used in the html element/tag.

E.g. if you have

<a id= bar style="color: red">foo</a>

and

<style>
#bar {
    color: blue;
}
</style>

The color will be red because the inline html style has the highest priority, higher than #.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文