Выберите элемент на основе нескольких классов

360

У меня есть правило стиля, которое я хочу применить к тегу, когда у него есть два класса. Есть ли способ сделать это без JavaScript? Другими словами:

<li class='left ui-class-selector'>

Я хочу применить мое правило стиля только в том случае, если применяются liоба класса .leftи .ui-class-selectorклассы.

Ciel
источник
css-tricks.com/multiple-class-id-selectors - см. Селектор двойного класса
первый посткомментатор

Ответы:

595

Вы имеете в виду два класса? «Цепочка» селекторов (без пробелов между ними):

.class1.class2 {
    /* style here */
}

Это выбирает все элементы, class1которые также имеют class2.

В твоем случае:

li.left.ui-class-selector {

}

Официальная документация: селекторы класса CSS2 .


Как akamike указывает на проблему с этим методом в Internet Explorer 6, вы можете прочитать это: Использовать двойные классы в IE6 CSS?

Феликс Клинг
источник
6
Обратите внимание, что IE6 не нравится это, так как он не читает цепочку классов. Это будет только смотреть на последний класс в цепочке.
Акамике
16
это не так :) Все основные веб-сайты упали, удаляются или планируют в ближайшем будущем отказаться от поддержки IE6. Сделайте то же самое!
Томас Бонини
@ Андреас Бонини: Да, я знаю. Если честно, меня уже давно не волнует IE6. (Я удалил свой предыдущий комментарий, потому что нашел другой вопрос, который касается этой проблемы.)
Феликс Клинг
Да, вы не можете использовать их вообще в IE6, только используйте более длинные маршруты для стилизации ваших элементов. Например, стилизация каждого класса в отдельности и использование соответствующей специфики CSS, чтобы переопределить как можно лучше.
Акамике
2
Я с любовью помню танцы на могиле IE6. У меня даже не было поддержки IE10 в этом году, и вообще отказ от IE уже на горизонте. Я люблю будущее. ☺
Майкл Шепер
22

Селекторы цепочек не ограничиваются только классами, вы можете сделать это как для классов, так и для идентификаторов.

Классы

.classA.classB {
/*style here*/
}

ID класса

.classA#idB {
/*style here*/
}

Я сделал

#idA#idB {
/*style here*/
}

Все хорошие текущие браузеры поддерживают это, кроме IE 6, он выбирает на основе последнего селектора в списке. Таким образом, ".classA.classB" будет выбран на основе только ".classB".

Для вашего случая

li.left.ui-class-selector {
/*style here*/
}

или

.left.ui-class-selector {
/*style here*/
}
nidhi0806
источник
9
Id & Id - концептуально странный селектор.
Феликс Ганьон-Гренье
0

Вы можете использовать эти решения:

Правила CSS применяются ко всем тегам, которые имеют следующие два класса:

.left.ui-class-selector {
    /*style here*/
}

Правила CSS применяются ко всем тегам, имеющим <li>следующие два класса:

li.left.ui-class-selector {
   /*style here*/
}

Решение jQuery:

$("li.left.ui-class-selector").css("color", "red");

Решение Javascript:

document.querySelector("li.left.ui-class-selector").style.color = "red";
Бахман Парсаманеш
источник