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


116

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

input {
 ... 
 ...
}

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

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

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

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

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

input.mod {
 ...
 ...
}

Думаю, вы ответили на свой вопрос. Поместите стиль в input.mod и добавьте класс mod в желаемый тег ввода.
Nazmul

Ответы:


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; }

OMG ... Я знал, что это существует :) Да, это так! Спасибо.
Alex Ivasyuv

2
Поддержка отсутствует в основном в IE8 (и более старых версиях). Если кому-то интересен полифилл: selectivizr.com
franzlorenzon

1
@Guru: вы можете объединить несколько :not()селекторов: input:not(.avoidme):not(.avoidmetoo)избегайте элементов с любым классом, input:not(.avoidme.andme)избегайте элементов с обоими классами.
Томас Ашан

1
@TomasLycken, на самом деле, используя несколько селекторов является сложной один в CSS, например , :not(.this.that) { }может работать, но если вы делаете что - то такое , как :not(.this, .that) { }вы будете падать вниз, вы должны гирляндные их , такие как: :not(.this):not(.that). Я понимаю, что вы, наверное, знаете это, я пытаюсь помочь будущим читателям :)
Can O 'Spam

1
Оставьте здесь комментарий для будущих читателей: комментарий @SamSwift 웃 по-прежнему точен, но поддержка списков (возможно) появится в будущем . Однако на данный момент внутри поддерживаются только одиночные селекторы :not().
Томас Ашан

24

Вы также можете сделать это, «отменив» изменения в классе сброса только в CSS.

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

8

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

input:not(.reset) { }

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

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


6

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

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

В этом случае все поля, не относящиеся к типу флажка, будут иметь ширину 100%.


4

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

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

Эта страница содержит 168 блоков, в которых нет класса 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 carnate

Селекторы @devlincarnate "CSS" просочились в JS ( около 2013 г. ), поэтому люди ищут его.
Nick T

0

вместо class = "reset" вы можете изменить логику, указав class = "valid". Вы можете добавить это по умолчанию и удалить класс, чтобы сбросить стиль.

Итак, из вашего примера и Томаша

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.