CSS和特异性 - 类vs ids

时间:2011-07-01 15:57:24

标签: css class css-specificity text-decorations

考虑以下html:

<div id="rightBar">
    <div class="barElement">
        <div class="barText"><a href="#">Not underlined</a><br /></div>
        <div class="barLinks"><a href="#">Should be underlined</a></div>
    </div>
</div>

以下css:

#rightBar a
{
    text-decoration: none;
}
#rightBar a.barLinks
{
    text-decoration: underline;
}

“应加下划线”链接没有下划线,不应该是因为它继承了类barLinks和id右栏。另外'#rightBar a.barLinks'(0,1,1,1)比'#rightBar a'(0,1,0,1)更具特异性,所以它应该覆盖后者吗?

如果不使用任何内联规范(css或html),我还能如何得到“应加下划线”的链接下划线

5 个答案:

答案 0 :(得分:7)

您的a元素没有类barLinks。这样做:

#rightBar .barLinks a
{
    text-decoration: underline;
}

示例:http://jsfiddle.net/J34mj/2/

答案 1 :(得分:2)

这不是特异性问题,您使用了错误的选择器。它应该是这样的:

#rightBar .barLinks a {}

答案 2 :(得分:1)

#rightBar a.barLinks
{
    text-decoration: underline;
}

无效,因为class =“barLinks”不在<a>

试试这个;

#rightBar .barLinks a
{
    text-decoration: underline;
}

或者失败;

#rightBar .barLinks a
{
    text-decoration: underline !important;
}

答案 3 :(得分:0)

不应该是,barLinks仅适用于标签,如果你将你的css更改为#rightBar .barLinks,它应该有效。

答案 4 :(得分:0)

所以我在这里看到的问题是,您提到了使用CSS选择器无法正确到达锚标记元素的地址。如果您要使用更长和更突出的地址路线,则应如下所示:

#rightbar .barElement .barLinks a{
    text-decoration : underline;
}

但是,由于您正在寻找一种更具体的方法,因此您的方法是正确的,除了anchor标签没有它自己的类,因此a.barLink将什么也找不到。它应该是:

#rightBar .barLinks a{
text-decoration : underline;
}