CSS优先级和针对特定元素

时间:2013-05-08 16:13:51

标签: html css css-selectors css-specificity

我的问题应该是相当紧张的。出于某种原因,我今天无法绕过它。

我正在制作一个类似结构的菜单

<div class="wrapper">
    <ul>
        <li class="menu-item"><a href="#">Menu Item</a>
            <div class="inner">
                <a href="#">Login</a> 
            </div>
        </li>
    </ul>
</div>

我正在尝试使用以下css选择器来定位登录链接:

.inner a{}

选择器正在工作,但是下面的选择器正在使用css,并覆盖上面的选择器:

li.menu-item a{}

我完全不知所措。为什么第二个选择器会优先考虑第一个?你们怎么建议我瞄准上面的“a”元素?

5 个答案:

答案 0 :(得分:10)

  

为什么第二个选择器会在第一个选择器上采用样式首选项?

因为第二个选择器比第一个选择器更specific。第一个包含一个类和一个类型选择器,而第二个包含一个类和两个类型选择器。

要计算特异性,请将选择器视为四个数字的组合,所有数字均从(0,0,0,0)

开始

另外:

答案 1 :(得分:2)

CSS选择器附加了一个“权重”系统,

  • 元素,伪元素:d = 1 - (0,0,0,1)
  • 类,伪类,属性:c = 1 - (0,0,1,0)
  • Id:b = 1 - (0,1,0,0)
  • 内联样式:a = 1 - (1,0,0,0)

所以你的第一个选择器得分为(0,0,1,1) 而你的第二个选择器的得分为(0,0,1,2),这个得分更高,因此优先

答案 2 :(得分:1)

这是因为li.menu a包含三个部分来识别元素:父元素(li),父类(menu-item)和元素(a)。您的预期选择器只有两个,因此您可以将其修改为:

li.inner a{}

它应该有用。

编辑:

我知道我之前已经回答过:Why does my HTML not use the last style defined in the CSS?

答案 3 :(得分:0)

具有最高特异性的DOM对象赢得CSS优先级。

那么获得特异性的是什么?

Element Selector -- 1
Class Selector -- 10
ID Selector -- 100
Inline Selector -- 1000

在你的例子中: .inner a将是11分

a(1) + .inner(10) = 11

li.menu-item a是12分

li(1) + .menu-item(10) + a(1) = 12

这就是为什么第二个将显示的原因。要制作正确的样式秀,只需使其更具体,例如使用     .menu-item .inner a

这里有一篇非常好的文章。 http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html

答案 4 :(得分:0)

您只能将CSS应用于每个元素内的锚点,如下所示:

li.menu-item > a{}
.inner > a

这样做,“li.menu-item a”的规则不会干扰其他锚。