是否有CSS不等于选择器?


116

CSS中是否有类似!=(不相等)的内容?例如,我有以下代码:

input {
 ... 
 ...
}

但是对于某些输入,我需要使此无效。我想通过在输入标签中添加“重置”类来做到这一点,例如

<input class="reset" ... />

然后只需从CSS跳过此标签即可。

我该怎么做?

我能看到的唯一方法是在输入标签中添加一些类,然后按如下所示重写CSS:

input.mod {
 ...
 ...
}

我想你回答了你的问题。将样式放在input.mod中,并在所需的输入标签中添加类'mod'。
纳兹穆尔2010年

Answers:


157

在CSS3中,您可以使用:not()过滤器,但是并不是所有的浏览器都完全支持CSS3,因此请确保您知道自己正在做什么所有主流浏览器现在都 支持(并且已经存在了一段时间;这是一个答案) ...)。

例:

<input type="text" value="will be matched" />
<input type="text" value="will not be matched" class="avoidme" />
<input type="text" value="will be matched" />

和CSS

input:not(.avoidme) { background-color: green; }

注意:该解决方法不再是必需的;我将其留在这里作为背景。

如果不想使用CSS3,则可以在所有元素上设置样式,然后使用一个类将其重置。

input { background-color: green; }
input.avoidme { background-color: white; }

天哪...我知道它的存在:)是的,是的!谢谢。
Alex Ivasyuv 2010年

2
IE8(和较早版本)主要缺少该支持。如果有人对
polyfill

1
@大师:您可以链接多个:not()选择器:input:not(.avoidme):not(.avoidmetoo)将避免使用任何一个类的input:not(.avoidme.andme)元素,将避免同时使用两个类的元素。
Tomas Aschan

1
@TomasLycken,实际上,在CSS中使用多个选择器是一个棘手的选择器,例如:not(.this.that) { }MAY可以工作,但是如果您执行某些操作(例如:not(.this, .that) { }摔倒),则必须以菊花链的方式链接到它们,例如::not(.this):not(.that)。我了解您可能知道这一点,我正在尝试帮助未来的读者:)
O'Spam能否

1
在这里为将来的读者留下评论:@SamSwift웃的评论仍然是准确的,但是将来可能会支持列表。不过,目前,仅支持单个选择器:not()
Tomas Aschan

24

您也可以通过仅在CSS中“恢复”对reset类的更改来做到这一点。

INPUT { 
    padding: 0px;
}
INPUT.reset {
    padding: 4px;
}


6

您还可以通过定位这样的属性来实现此目的:

input:not([type=checkbox]){ width:100%; }

在这种情况下,所有非“复选框”类型的输入的宽度均为100%。


4

有趣的是,刚刚尝试使用JQuery选择DOM元素,它起作用了!:)

$("input[class!='bad_class']");

此页面有168个div,其中没有class'comment-copy'

$("div[class!='comment-copy']").length => 168
$("div[class!='.comment-copy']").length => 168

11
[attr!="value"]仅jQuery选择器api.jquery.com/attribute-not-equal-selector
xec

这与CSS有什么关系?
devlin康乃馨

@devlincarnate“ CSS”选择器已渗入JS(大约在2013年),因此人们开始搜索它。
尼克T

0

代替class =“ reset”,您可以通过使class =“ valid”来颠倒逻辑。您可以默认添加它,并删除该类以重置样式。

因此,从您的示例和Tomas'

input.valid {
 ... 
 ...
}

<input type="text" value="will be matched" class="valid"/>
<input type="text" value="will not be matched" />
<input type="text" value="will be matched" class="valid"/>

2
我认为能够通过应用于类来“重置”的整个想法是,不应该具有默认样式的元素的数量大大超过了应有的样式,因此OP不想将任何类应用于大部分元素。
Tomas Aschan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.