Есть ли селектор CSS not equals?

есть что-то вроде != (не равно) в CSS? е.г, у меня есть следующий код:

input {
 ... 
 ...
}

но для некоторых входов мне нужно аннулировать эту. Я хотел бы сделать это, добавив класс "reset" к тегу ввода, например

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

а затем просто пропустите этот тег из CSS.

как я могу это сделать?

единственный способ, который я вижу, - это добавить некоторый класс в тег ввода и переписать CSS следующим образом:

input.mod {
 ...
 ...
}

6 ответов


в CSS3 вы можете использовать , но не все браузеры полностью поддерживают 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; }

вы также можете сделать это, "возвращая" изменения в классе reset только в CSS.

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

CSS3 имеет :not(), но он не реализован во всех браузерах. Однако он реализован в предварительном просмотре платформы IE9.

input:not(.reset) { }

http://www.w3.org/TR/css3-selectors/#negation

тем временем вам придется придерживаться старомодных методов.


интересно просто попробовал это для выбора элемента DOM с помощью JQuery, и он работает! :)

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

эта страница имеет 168 divs, которые не имеют класса "comment-copy"

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

вы также можете подойти к этому, выбрав такой атрибут:

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

в этом случае все входы, которые не являются типом "checkbox", будут иметь ширину 100%.


вместо 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"/>