我想编写一个CSS选择器规则,选择所有没有特定类的元素。例如,给定以下HTML:
<html class="printable">
<body class="printable">
<h1 class="printable">Example</h1>
<nav>
<!-- Some menu links... -->
</nav>
<a href="javascript:void(0)" onclick="javascript:self.print()">Print me!</a>
<p class="printable">
This page is super interresting and you should print it!
</p>
</body>
</html>
我想编写一个选择器,选择所有没有“可打印”类的元素,在本例中,这些元素是nav和a元素。
这可能吗?
注意:在我想要使用的实际HTML中,没有“可打印”类的元素将比没有“可”类的多得多(我意识到在上面的示例中是相反的)。
通常,向:not()伪类添加一个类选择器,如下所示:
:not(.printable) {
/* Styles */
}
:not([attribute]) {
/* Styles */
}
但是,如果您需要更好的浏览器支持(IE8和更旧版本不支持:not()),您可能最好为具有“可打印”类的元素创建样式规则。如果尽管您对实际标记做了什么,但这仍然不可行,那么您可能必须围绕这一限制进行标记。
请记住,根据您在此规则中设置的财产,其中一些属性可能由可打印的后代继承,或者以某种方式影响它们。例如,尽管display不是继承的,但在:not(.propprinted)上设置display:none将阻止它及其所有子体显示,因为它将从布局中完全删除元素及其子树。您通常可以通过使用visibility:hidden来解决这个问题,这将允许显示可见的子体,但隐藏的元素仍然会像最初那样影响布局。简而言之,就是要小心。
正如其他人所说,您只需输入:not(.class)。对于CSS选择器,我建议访问此链接,这在我的整个旅程中非常有用:https://code.tutsplus.com/tutorials/the-30-css-selectors-you-must-memorize--net-16048
div:not(.success) {
color: red;
}
否定伪类特别有用。假设我想选择所有div,除了id为container的div。上面的代码片段将完美地处理该任务。
或者,如果我想选择除段落标记之外的每个元素(不建议),我们可以这样做:
*:not(p) {
color: green;
}
通常,向:not()伪类添加一个类选择器,如下所示:
:not(.printable) {
/* Styles */
}
:not([attribute]) {
/* Styles */
}
但是,如果您需要更好的浏览器支持(IE8和更旧版本不支持:not()),您可能最好为具有“可打印”类的元素创建样式规则。如果尽管您对实际标记做了什么,但这仍然不可行,那么您可能必须围绕这一限制进行标记。
请记住,根据您在此规则中设置的财产,其中一些属性可能由可打印的后代继承,或者以某种方式影响它们。例如,尽管display不是继承的,但在:not(.propprinted)上设置display:none将阻止它及其所有子体显示,因为它将从布局中完全删除元素及其子树。您通常可以通过使用visibility:hidden来解决这个问题,这将允许显示可见的子体,但隐藏的元素仍然会像最初那样影响布局。简而言之,就是要小心。