Чи є CSS, що не дорівнює селектору?


116

Чи є щось подібне! = (Не рівне) у CSS? наприклад, у мене є такий код:

input {
 ... 
 ...
}

але для деяких входів мені це потрібно анулювати. Я хотів би зробити це, додавши клас "скидання" до вхідного тегу, наприклад

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

а потім просто пропустити цей тег із CSS.

Як я можу це зробити?

Єдиний спосіб я бачу - додати якийсь клас до вхідного тегу та переписати CSS так:

input.mod {
 ...
 ...
}

Я думаю, ти відповів на своє запитання. Помістіть стиль у input.mod та додайте клас 'mod' у потрібний тег введення.
Назмул

Відповіді:


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 ... Я знав, що це існує :) Так, так! Дякую.
Олексій Івасюв

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 still все ще точний, але підтримка списків (можливо) надійде в майбутньому . Поки що всередині підтримуються лише окремі селектори :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 дівок, у яких немає класу "коментар-копія"

$("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?
девлін карнат

@devlincarnate "CSS" селектори взяли в JS ( близько 2013 року ), тому люди шукають його.
Нік Т

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
Я думаю, що вся ідея про можливість «скинути», застосувавши до класу, полягала в тому, що кількість елементів, які не повинні мати стиль за замовчуванням, значно перевищувала ті, що повинні, тому ОП не хотіла застосовувати жоден клас до більшість елементів.
Томаш Ашан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.