Цільові елементи з декількома класами в межах одного правила


117

У мене є якийсь HTML, який би містив елементи з кількома класами, і мені потрібно призначити їх у межах одного правила, щоб ті самі класи могли бути різними в різних контейнерах. Скажіть, у мене це є у моєму CSS:

.border-blue {
    border: 1px solid blue;
}
.background {
    background: url(bg.gif);
}

Тоді я маю це у своєму HTML:

<div class='border-blue background'>Lorum Crap No-one Cares About Ipsum</div>

Чи можу я націлити їх на одне правило? Наприклад, як, наприклад, який я знаю, не працює:

.border-blue, .background {
    border: 1px solid blue;
    background: url(bg.gif);
}

Відповіді:


182

.border-blue.background { ... }призначений для одного предмета з кількома класами.
.border-blue, .background { ... }призначений для декількох предметів, кожен з яких має свій клас.
.border-blue .background { ... }є для одного елемента, де ".background" є дочірньою ".border-blue".

Дивіться відповідь Кріса для більш ретельного пояснення.


2
Дякую! Я не знав, чи можливо це, тому я просив це дізнатися.
Таннер Оттінгер

Це рішення не працює для мене (або більше не працює ...).
fresko

вам потрібно розділити комами класи, як йдеться у відповіді Кріса
fresko

що ти маєш на увазі .border-blue .background { ... }дитина? я спробував це, і це не працює
Eliav Louski

174

На випадок, якщо хтось натрапить на це так, як я це зробив, і не усвідомлює, ці два варіанти є для різних випадків використання.

Наступне:

.blue-border, .background {
    border: 1px solid #00f;
    background: #fff;
}

призначено для того, коли ви хочете додати стилі до елементів, які мають клас блакитної рамки або фон, наприклад:

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

всі отримали б блакитний кордон та білий фон, застосований до них.

Однак прийнята відповідь відрізняється.

.blue-border.background {
    border: 1px solid #00f;
    background: #fff;
}

Це стосується стилів до елементів, які мають обидва класи, тому в цьому прикладі <div>слід застосовувати лише стилі обох класів (у браузерах, які правильно інтерпретують CSS):

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

Тому в основному думайте про це так, розділення комами застосовується до елементів одного класу АБО іншого класу, а розділення точок стосується елементів одного класу ТА іншого класу .


12
Це була дуже корисна відповідь, яку я майже не читав. Ура!
psicopoo

1
Просто будьте обережні. Пробілів немає.blue-border.background
Knu8

2
think of it as AND and OR: Чудова порада. Я можу додати, що .x .yможна думати якy && ancestors.has(x)
Сіддхарт Гарг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.