CSS 特性如何决定应用哪些样式?

Posted

技术标签:

【中文标题】CSS 特性如何决定应用哪些样式?【英文标题】:How does CSS specificity decide which styles to apply? 【发布时间】:2012-02-26 08:40:15 【问题描述】:

CSS 如何确定何时将一种样式应用于另一种样式?

我经历过几次W3 CSS3 selectors document,这有助于我了解如何在 jQuery 中更好地使用 CSS 选择器,但它并没有真正帮助我了解何时将一个 CSS 规则应用于另一个。

我有以下 html

<div class='item'>
    <a>Link 1</a>
    <a class='special'>Link 2</a>
</div>

我有以下 CSS:

.item a 
    text-decoration: none;
    color: black;
    font-weight: bold;
    font-size: 1em;


.special 
    text-decoration: underline;
    color: red;
    font-weight: normal;
    font-size: 2em;

鉴于上述情况,链接 1 和链接 2 的样式将相同,由 .item a CSS 确定。为什么与.special 关联的样式不优先链接 2?

显然,我可以这样绕过它:

.special 
    text-decoration: underline !important;
    color: red !important;
    font-weight: normal !important;
    font-size: 1em !important;

但是,由于缺乏理解,我觉得这是一个我必须散布的技巧。

【问题讨论】:

这个链接看起来很彻底,作为奖励,还有冲锋队和达斯维达的照片。 CSS Specificity 【参考方案1】:

我建议您熟悉this 以供将来参考。对于这种特殊情况,请注意级联顺序下的第 3 点:

    统计选择器中 ID 属性的数量。 统计选择器中 CLASS 属性的数量。 统计选择器中 HTML 标记名称的数量。

如果将这些应用于您的代码,.item a 有 1 个类属性 + 1 个 HTML 标记名称,而 .special 只有一个类属性。因此,前者赢得了对特殊链接进行样式设置的权利。

【讨论】:

【参考方案2】:

http://www.w3.org/TR/CSS21/cascade.html#specificity 是官方的具体规范。

但如果是 TL;DR,那么(太)短的版本是您的选择器中的单词越多,特异性就越高。 !important 甚至更高。就是这样。

编辑:哦,我看到您的链接与我的信息相同。对此感到抱歉。

【讨论】:

这不是真的,这取决于那些“词”是什么。更多并不总是意味着它更具体。 也许这就是为什么它是“太”短版本。 是的,这是真的。 W3C 是这么说的!哦等等,你的意思是我的话。这是为了回答为什么.item a.special 更具体的问题。对不起,如果我没有说清楚。该链接包含更多信息。【参考方案3】:

它基于IDsclassestagsIDs 的特异性最高,然后是classes,然后是tags,所以:

.item a     == 0 1 1      0 (id) 1 (class=item) 1 (tag=a)
.special    == 0 1 0
#foo        == 1 0 0
#foo .bar a == 1 1 1
#foo #bar   == 2 0 0

以最多者获胜 :) 如果是平局,则以文件中最后出现的为准。请注意,1 0 0 击败 0 1000 1000

如果您想申请.special,请更具体:.item a.special

【讨论】:

这非常清楚。那么,如果我将.special 更改为a.special 它会赢,因为它是文档中的最后一个? @Jonathan -- 是的,他们会打成平手,a.special 会赢。 关于“note”,取胜的风格是得分最高的,但是,它偏向于更高的特异性?例如,1 0 0 将击败 0 100 100。同样,0 1 100 会击败 0 0 1000? @Jonathan 只是一个改进:属性也很重要。它们与类名具有相同的特异性。因此,例如img[title](具有标题属性的图像)与img.cname(具有 class="cname" 的图像)一样具体 @Mr Lister:也是伪类(:not() 除外,它的工作方式不同)。伪元素与类型(而非标签)选择器属于同一类别。

以上是关于CSS 特性如何决定应用哪些样式?的主要内容,如果未能解决你的问题,请参考以下文章

layer.css 样式跟原来的有冲突怎么办

面试题汇总

CSS 用法和特性

详解CSS三大特性之层叠性继承性和重要性——Web前端系列学习笔记

详解CSS三大特性之层叠性继承性和重要性——Web前端系列学习笔记

css3新特性都有哪些