CSS 中的特殊性问题

Posted

技术标签:

【中文标题】CSS 中的特殊性问题【英文标题】:Specificity issue in CSS 【发布时间】:2017-11-11 16:21:07 【问题描述】:

所以我有一个div 内的项目列表,其类为book-select,而我的无序列表中的li 之一具有类selected。根据我定义的 CSS 规则,div 中的li 的背景颜色为skyblue,而带有所选类的li 将是steelblue

问题是 book-select 类正在覆盖选定的类,我不明白。 div 类不会比选择类的 li 更具体吗? li 位于 ul 中,而 ul 位于 div 中。

这里是相关的 CSS 和 html

.book-select li 
    font-size: 0.75em;
    text-align: center;
    list-style: none;
    background: skyblue;
    width: 25%;
    margin: auto;


.selected 
    background: steelblue;


<div class="book-select">
    <h2>Pick a book:</h2>
    <ul>
        <li>Set A Volume 1, Course Foundation</li>
        <li>Set A Volume 2, Expeditionary Airman</li>
        <li>Set A Volume 3, Professional Airman</li>
        <li>Set B Volume 1, Supervisory Communicator</li>
        <li>Set B Volume 2, Supervisor of Airmen</li>
        <li class="selected">All</li>
    </ul>
</div>

这是测验的一部分,其想法是用户单击一本书,jQuery 会将所选项目的类更改为单击的任何内容,最后一个 li 带有文本 "All" 是默认选择的书。我可以使用不同的 jQuery 方法来更改背景颜色,但是 CSS 给我这个特异性错误的事实让我很困扰。

我知道.book-select li 正在覆盖.select,因为控制台显示background: steelblue; 被划掉。

不应该反过来吗? .selected 不是更具体的类吗,因为它只包含一个元素,就是它自己?

【问题讨论】:

【参考方案1】:

使用此选择器来增加该 CSS 规则的特异性

.book-select li.selected 
   background: steelblue;

关于“特异性”:简单地说,一类加一个标签(.book-select li)在特异性方面比一个类(.selected)有更多的“权重”,所以一个类加一个标签的规则会覆盖一个规则只有一节课。上面显示的选择器将再次推翻这一点,因为它由两个类和一个标签组成。

【讨论】:

啊,我明白了。那行得通。我认为随着您深入了解 DOM 树,特异性会起作用。我想,你越深入这棵树,它就越具体。就像一个包含一堆元素的 div 将不如该 div 中的单个元素那么具体。您是说它与规则本身中指定的内容有关吗? 整个事情是根据一个系统来工作的,这种系统给加起来的不同元素提供了“重量单位”。该值越高,特异性越高。这里有一篇文章,虽然老了但是还是有用的:css-tricks.com/specifics-on-css-specificity 还有这个网站:cssspecificity.com【参考方案2】:

对于可能的解决方案,您可以这样做:

.selected 
    background: steelblue !important;

important 会避免这种样式被覆盖

【讨论】:

只有在你想覆盖背景的所有地方时才应该使用这个解决方案。 像任何事情一样,有时重要是有意义的,但根据我的经验,它们很少,通常有更好的方法。重要的事情往往会在你最意想不到的时候跳出来咬你【参考方案3】:

即使是这么简单的事情

li.selected

background: steelblue;

应该为你覆盖背景:)

【讨论】:

以上是关于CSS 中的特殊性问题的主要内容,如果未能解决你的问题,请参考以下文章

前端学习:CSS性质

CSS的特性之层叠性介绍

css的三大特性

css - 根据父母数量的奇偶性选择每个元素(CSS或Less但没有JS)

1.3切图

这是不是可以在 css(双线性渐变)中创建 2 轴 4 颜色渐变?