#html #css #css-selectors
#HTML #css #css-селекторы
Вопрос:
В следующем примере я бы не хотел применять какой-либо цвет фона к ячейке Not here...
.
Другими словами, я хотел бы применить свой CSS .class tag:modifer
только к первому дочернему элементу типа tag
.
.foo {
border-collapse: collapse;
}
.foo tr:nth-child(1) td:nth-child(1) {
background-color: green;
}
.foo tr:nth-child(2) td:nth-child(2) {
background-color: red;
}
<table class="foo">
<tr><td>A</td><td>B</td></tr>
<tr><td>C</td>
<td>
<table><tr><td>Not here...</td></tr></table>
</td>
</tr>
</div>
Комментарии:
1. может быть, добавить
>
после первого селектора?2. вероятно
.foo > tbody > tr:nth-child(1) ...
Ответ №1:
- Используйте комбинатор прямого потомка
>
- Найдите предка выше по дереву
<div>
- Используйте
nth-of-type
div > table > tbody > tr:first-of-type > td:first-of-type
.foo { border-collapse: collapse; } div>table>tbody>tr:first-of-type>td:first-of-type { background-color: green; } .foo tr:nth-child(2) td:nth-child(2) { background-color: red; }
<div> <table class="foo"> <tr> <td>A</td> <td>B</td> </tr> <tr> <td>C</td> <td> <table> <tr> <td>Not here...</td> </tr> </table> </td> </tr> </table> </div>
Комментарии:
1. В вашем решении вы избавляетесь от
tr:nth-child(1) td:nth-child(1)
. Я хотел бы рассмотреть общий случай.2. Если вы используете
nth
селекторы, то вам не следует беспокоиться об общих аспектах и ожидать конкретных исключений3. Также это таблица с вложенными таблицами и
nth-child(1)
==first-of-type
для всех намерений и целей при работе со структурами таблиц, поскольку таблица должна иметь tbody в качестве дочернего элемента, у tbody должен быть tr в качестве дочернего элемента, у tr должен быть th или td в качестве дочернего элемента.
Ответ №2:
Вы можете переопределить стиль с помощью другого селектора:
.foo {
border-collapse: collapse;
}
.foo tr:nth-child(1) td:nth-child(1) {
background-color: green;
}
.foo tr:nth-child(2) td:nth-child(2) {
background-color: red;
}
.foo table td:not(#random_id_for_specificity){
all:initial; /*to override everything*/
}
<table class="foo">
<tr>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>C</td>
<td>
<table>
<tr>
<td>Not here...</td>
</tr>
</table>
</td>
</tr>
</table>
Комментарии:
1. Это хорошо, но я не универсальный, поскольку мне приходится аннулировать каждое отдельное правило CSS. В моем случае использования у меня есть много других правил CSS
border, font-weight, ...
.2. @nowox вы можете использовать
all:unset
(обновите мой ответ), но обратите внимание на поддержку браузера