#css #cascade
#css #Каскад
Вопрос:
У меня есть следующие CSS и HTML
.comTable {
width: 95%;
cellpadding: 2px;
margin: auto;
border-collapse: collapse;
}
.comTable td {
text-align: left;
}
.comTable td:first-child {
text-align: right;
width: 25%;
}
<table id="tableMain" class="comTable">
<tr>
<td>
Some texts 1
</td>
<td>
<table id="table2">
<tr>
<td>
Some more texts
</td>
<td>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
Some texts 2
</td>
<td>
<table id="table3">
<tr>
<td>
Some more texts...
</td>
<td>
</td>
</tr>
</table>
</td>
</tr>
</table>
Проблема в том, что класс CSS comTable применяется к таблицам2 и таблицам3, так что для первого столбца таблицы2 и таблицы3 также установлено значение 25%. Как я могу сделать так, чтобы .comTable td:first-child применялся только к TableMain? Пожалуйста, обратите внимание, что у меня слишком много строк в TableMain, поэтому, насколько это возможно, я не хочу применять класс к каждому первому td там.
Ответ №1:
Вы можете сделать
.comTable > tr > td:first-child {
text-align: right;
width: 25%;
}
для достижения желаемого эффекта.
>
означает, что будут затронуты только дочерние элементы первого уровня, а не дочерние элементы глубоко внутри.
Комментарии:
1. Спасибо. После некоторых усилий я, наконец, заставил его работать. Обнаружил, что он обернут tbody, поэтому я должен сделать
.comTable > tbody > tr > td:first-child
Ответ №2:
Используйте >
вместо
: например .comTable > tr > td
, или .comTable > * > td
.
Ответ №3:
Чтобы добавить к ответу Соломона:
вы можете сложить >
(дочерний селектор) с *
(селектор для всех элементов). Таким образом, можно получить td
данные из tbody и thead.
.comTable > * > * > td
где html выглядит как
<table id="tableMain" class="comTable">
<tbody>
<tr>
<td> ...