Как создать правило css для всех элементов, кроме одного класса?

97

Я создал таблицу стилей CSS для своего проекта. Есть ли способ создать правило css, которое применяется ко всем элементам таблицы, ЗА ИСКЛЮЧЕНИЕМ элементов таблицы, принадлежащих классу dojoxGrid? Что-то типа:

.not(dojoxGrid) table{
    width:100%;
    border-top:1px solid #dddddd;
    border-left:1px solid #dddddd;
    border-right:1px solid #dddddd;
    margin:1em auto;
    border-collapse:collapse;
}
Ник
источник
Это нужно для работы в разных браузерах? Браузеры по-разному поддерживают более гибкие селекторы CSS. Это может быть что-то, что вы могли бы сделать в сценарии, если это абсолютно необходимо и должно быть кроссбраузерным.
kibibu
да, мне это нужно для работы в основных браузерах. Есть ли другой способ добиться этого, кроме сценариев? ура
Ник
Подход Cori будет работать в браузерах вплоть до IE4, а может быть, и раньше.
kibibu

Ответы:

189

Отрицание псевдо-класса , кажется, что вы ищете.

table:not(.dojoxGrid) {color:red;}

Однако он не поддерживается IE8 .

Knu
источник
2
это хороший селектор css3, о котором нужно знать - надеюсь, можно использовать в IE9.
Cori
4
хотя мой комментарий не имеет прямого отношения к вопросу, стоит отметить, что :notМОЖЕТ использоваться как селектор jquery. то есть $("[data-name='bob']:not(a)"), что приятно.
имбирный пряник
3
Это должен быть принятый ответ, потому что это ответ на желаемый эффект. Текущий принятый ответ - это альтернативный способ достижения желаемого эффекта, но на самом деле он не отвечает на вопрос. Люди, которые находят этот вопрос, скорее всего, ищут ответ на то, что именно задают, в большинстве случаев альтернативный способ не применяется.
Педро Морейра
В ≤IE8 это будет полностью игнорироваться, и таблицы не будут получены color:red. Для некоторых это может быть полезно, но для меня я надеялся, что он будет читать как table {color:red;}и просто проигнорирует :not().
DutGRIFF
7
@FranciscoCorralesMorales :not(.classOne):not(.classTwo)cf stackoverflow.com/a/5684168/248058
Knu
12

Разве нельзя было бы установить правило css для всех таблиц, а затем последующее для таблиц, в которых работает class = "dojoxGrid"? Или я что-то упускаю?

Кори
источник
3
Да, это абсолютно сработает, но вы бы установили для всех этих свойств значение. Если вы хотите оставить их «незадействованными», тогда нет. Предположительно Ник пытается не сбивать значения для dojoxGrid, поскольку они установлены в другом месте.
kibibu
1
Я думаю, что да. Однако я устанавливаю кучу свойств для всех таблиц, я мог бы снова перезаписать их значениями по умолчанию, необходимыми для dojoxGrid. Однако я не уверен, что это за значения по умолчанию, поскольку они генерируются библиотекой dojo. Поэтому я искал другой способ добиться этого.
Ник
4

Самый безопасный вариант - создать класс для этих столов и использовать его. В настоящее время вряд ли что-то подобное будет работать во всех основных браузерах.

Джоэл
источник