我可以写一个CSSselect器来select没有特定类的元素吗?

我想写一个CSSselect器规则,select所有没有特定类的元素。 例如,给定以下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> 

我想写一个select器,select所有没有“可打印的”类,在这种情况下,是导航和元素的元素。

这可能吗?

注意:在我想要使用的实际HTML中,将会有更多的元素没有 “可打印”类(比如我在上面的例子中,我意识到这是另一种方式)。

通常,你可以像下面这样将一个类select器添加到:not()伪类中:

 :not(.printable) { /* Styles */ } 

但是,如果您需要更好的浏览器支持(IE8及更高版本不支持:not() ),那么最好为具有“可打印”类的元素创build样式规则。 如果即使你说实际的标记是不可行的,你也可能不得不围绕这个限制工作。

请记住,根据您在此规则中设置的属性,其中一些可能会被 .printable的后代inheritance,或以其他方式影响它们。 例如,虽然display不是inheritance的,但是在:not(.printable)上设置display: none会阻止它及其所有后代显示,因为它完全从布局中删除了元素及其子树。 你通常可以通过使用visibility: hiddenvisibility: hidden而不是可见的后代显示,但隐藏的元素仍然会影响布局,就像他们原来那样。 总之,小心一点。

 :not([class]) 

实际上,这将select任何没有应用于它的CSS类( class="css-selector" )。

我做了一个jsfiddle演示

  h2 {color:#fff} :not([class]) {color:red;background-color:blue} .fake-class {color:green} 
  <h2 class="fake-class">fake-class will be green</h2> <h2 class="">empty class SHOULD be white</h2> <h2>no class should be red</h2> <h2 class="fake-clas2s">fake-class2 SHOULD be white</h2> <h2 class="">empty class2 SHOULD be white</h2> <h2>no class2 SHOULD be red</h2> 

:not否定伪类

否定的CSS伪类, :not(X) ,是一个以简单的select符X作为参数的函数表示法。 它匹配一个不是由参数表示的元素。 X不能包含另一个否定select器。

您可以使用:not排除匹配元素的任何子集,与正常的CSSselect器一样sorting。


简单的例子:排除类

div:not(.class)

将select所有div元素没有类.class

 div:not(.class) { color: red; } 
 <div>Make me red!</div> <div class="class">...but not me...</div> 

我认为这应该工作:

 :not(.printable) 

从“负面CSSselect器”的答案 。

就像上面的回答:not()可以在angular度forms中非常有效,而不是创build效果或调整视图/ DOM,

 input.ng-invalid:not(.ng-pristine) { ... your css here ie border-color: red; ...} 

确保在加载页面时,如果input的数据已添加(即不再原始),但input字段将仅显示无效(红色边框或背景等),但是无效。

您可以使用:not(.class) selector如前所述。

如果您关心Internet Explorer兼容性,我build议您使用http://selectivizr.com/

但记得在Apache下运行,否则你不会看到效果。

  [class*='section-']:not(.section-name) { @include opacity(0.6); // Write your css code here } 

//不透明度0.6全部“区域 – ”而不是“区域名称”