2010-07-28 3 views
105

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

input { 
... 
... 
} 

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

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

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

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

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

input.mod { 
... 
... 
} 
+0

Ответы на ваш вопрос, я думаю. Поместите стиль в input.mod и добавьте класс 'mod' в желаемый тег ввода. – Hoque

ответ

143

В CSS3, вы можете использовать :not() фильтр, , но не все браузеры полностью поддерживают CSS3 еще, поэтому убедитесь, что вы знаете, что вы делаете который сейчас supported by all major browsers (и уже в течение некоторого времени, это старый ответ ...).

Пример:

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

и УС

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

Примечание: этот способ не должно быть необходимости больше; Я оставляю его здесь для контекста.

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

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

OMG ... Я знал, что он существует :) Да, это! Благодарю. –

+2

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

+0

Есть ли какой-либо вариант для нескольких классов в not()? – Guru

24

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

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

+1 для совместимости с кросс-браузером –

8

CSS3 имеет :not(), но он не реализован во всех браузерах еще. Однако он реализован в IE9 Platform Preview.

input:not(.reset) { } 

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

В то же время, вы должны будете придерживаться старомодных методов.

0

вместо класса = «сброс» вы можете полностью изменить логику, имея класс = «действует» Вы можете добавить это по умолчанию и удалить класс, чтобы сбросить стиль.

Так из вашего примера и 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 не хотел применять * any * класс для большинства элементов. –

4

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

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

Эта страница имеет 168 дивы, которые не имеют класс 'комментарий-копию'

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

'[attr! =" Value "]' является ** jQuery-only ** селектором http://api.jquery.com/attribute-not-equal-selector/ – xec

+0

Что это связано с CSS? –

+0

@devlincarnate Селектора «CSS» попали в JS ([около 2013 года] (https://www.w3.org/TR/selectors-api/#interface-definitions)), поэтому люди его ищут. –

1

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

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

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

Смежные вопросы