【问题标题】:Styling with CSS2 when attr is not set未设置 attr 时使用 CSS2 进行样式设置
【发布时间】:2009-12-17 00:43:06
【问题描述】:

使用属性集为元素设置样式很简单:E[attr]

有没有办法根据缺少属性来使用 CSS2 设置元素的样式,例如 E[!attr]? (JavaScript 解决方案不是一个选项)。

例如,有几个类规则后跟id规则:

.abc {padding:1em;}
.def {padding:2em;}
#n a {padding:0;}

html代码为:

<div id="n"><a href="" class="abc">.</a><a href="" class="def">.</a></div>

abcdef 类对 id-ed 规则的优先级较低,因此 a 都有填充 0。我无法更改上述规则的顺序,但我可以更改 id-ed 规则添加我自己的规则。我想避免为每个班级(有很多)编写像#n a.abc 这样的规则。相反,我需要像 #n a[!class] 这样的东西来保持所有 class-ed as 的完整性。

【问题讨论】:

    标签: css css-selectors


    【解决方案1】:

    很遗憾,CSS2 中没有。你能做的最好的就是级联你的声明:

    E {color: red}
    E[attr] {color: blue}
    

    但即使这样也不能真正依赖,因为 IE6 不支持属性选择器。

    不过,在 CSS3 中,有可爱的 ":not" 伪选择器 (http://www.w3.org/TR/css3-selectors/#negation)。

    编辑

    感谢您的澄清。怎么样:

    .abc {padding:1em; !important} .def{padding:2em; !important}
    
    #n a{padding: 1em}
    

    【讨论】:

    • @graphicdivine 谢谢。抱歉,我一开始没有表达清楚。请查看更新后的帖子。上面的技巧很好,但在我的情况下不起作用。
    • @graphicdivine 谢谢!完全忘记了这个 - 完美地工作!
    【解决方案2】:

    我不认为这可以在 CSS2 中完成。在 CSS3 中,您将使用 "not" syntax:

    input:not([type="file"])
    

    【讨论】:

    • @jvenema 谢谢,但我目前不能使用 CSS3。
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 2011-08-17
    • 2012-11-27
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多