Использование нескольких ">" селекторов CSS
Учитывая этот html:
<table id="my-table">
<tr>
<td>
I want to apply my style to this
</td>
<td>
<table>
<tr>
<td>
But not to this
</td>
</tr>
</table>
</td>
</tr>
</table>
Я хотел бы применить стиль к ячейкам, которые являются дочерними элементами первого уровня таблицы.
Я думал, что могу использовать это:
#my-table > tr > td {
color: #ff0000;
}
... Но это не сработает. Это потому, что вы не можете использовать несколько селекторов >
? Как я могу это сделать?
Ответы
Ответ 1
Существует два аспекта:
-
В браузере будет добавлен элемент tbody
, если вы не включите его (или, по крайней мере, чаще всего, большую часть времени), я всегда использую явный, поэтому я не знаю края случаев), и поэтому даже если вы не используете его в своем HTML-коде, вам понадобится его в селекторе, если вы используете >
(дочерний комбинатор). Это изменит ваш селектор на #my-table > tbody > tr > td
. (Я всегда защищаю, в том числе tbody
явно в HTML, просто чтобы избежать путаницы и случаев краев.)
-
Таблица внутри td
наследует свой цвет от td
внутри. Поэтому, хотя ваш селектор нацелен на правильные элементы, их элементы-потомки наследуют цвет.
Вы можете обойти это, указав явный цвет элементам #my-table td
, а затем специальный цвет только для элементов #my-table > tbody > tr > td
.
Пример (обратите внимание на tbody
в HTML, а также в селекторе):
#my-table td {
color: black;
}
#my-table > tbody > tr > td {
color: #ff0000;
}
<table id="my-table">
<tbody>
<tr>
<td>
I want to apply my style to this
</td>
<td>
<table>
<tr>
<td>
But not to this
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
Ответ 2
Привет, вы можете попробовать таким образом
#my-table > tbody> tr > td {
color: #ff0000;
}
#my-table td{color:#000;}
<table id="my-table"><tbody>
<tr>
<td>
I want to apply my style to this
</td>
<td>
<table><tbody>
<tr>
<td>
But not to this
</td>
</tr></tbody>
</table>
</td>
</tr></tbody>
</table>
Ответ 3
Насколько мне известно, вам нужен и первый ребенок, иначе вы будете использовать последний TD, если хотите его:
#my-table > tbody > tr > td:first-child {
color: #ff0000;
border: 1px solid black;
}
<table id="my-table">
<tr>
<td>
I want to apply my style to this
</td>
<td>
<table>
<tr>
<td>
But not to this
</td>
</tr>
</table>
</td>
</tr>
</table>
Ответ 4
color
обладает тем свойством, что оно применяется ко всем его дочерним элементам. Поэтому вам нужно будет ограничить это. Вы можете сделать это с помощью >
и :nth-child(n)
#my-table > tbody > tr > td:nth-child(1) {
color: #ff0000;
}
Ваш HTML должен иметь tbody
, но это может быть необязательно, браузеры создадут их для вас, но он рекомендовал использовать tbody
самостоятельно.
Вы можете изменить это, если ваши таблицы становятся больше.. например, с использованием таких формул, как 3n+1
, odd/even
и т.д. Кроме того, вы можете использовать несколько пробелов или >
и теги элементов, чтобы указать все ваши потребности. В зависимости от того, что вы хотите.
Подробнее о nth-child() здесь