CSS выбирает либо <thead>, либо <tbody> из <table>

У меня следующая проблема. У меня много таблиц, но все они имеют разную структуру: у одной тип <table><thead><tbody>, а у других только <table><tbody>.

И мне нужно применить css для thead (если он установлен в таблице) ИЛИ для tbody (он всегда установлен). Я не должен устанавливать стили для них обоих, только для первого, кто идет после тега <table>.

Итак, если у меня есть

<table>
 <thead>...</thead>
   <tbody>...<tbody>
</table>

то CSS следует применять только для объявления.

И наоборот, если у меня:

<table>
  <tbody>...</tbody>
<table>

затем следует применить CSS для tbody.

Я бы хотел, чтобы было что-то вроде «если thead установлен, то...»

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если это вариант, вы можете использовать хак с селектором :first-child.

Например, вы выберете любой из них, который является первым потомком <table>:

table > thead:first-child, table > tbody:first-child{
  /* properties here */
}

В этом случае, если присутствует thead, tbody не будет первым потомком. В противном случае, если thead нет, tbody будет первым потомком.

Посмотрите в действии:

table > thead tr, /* Select the <tr> in a <thead> if present */
table > tbody:first-child tr:first-child /* Select the first <tr> in a <tbody> when the <thead> is not present */
{
  font-weight: bold;
  color: blue;
}

table{
margin-top:1em;
border: 1px solid black;
}
<table>
  <thead>
    <tr><th>This is a table with header</th></tr>
  </thead>
  <tbody>
    <tr><td>This is the body</td></tr>
  </tbody>
</table>

<table>
  <tbody>
    <tr><td>This is a table without header</td></tr>
  </tbody>
  <tbody>
    <tr><td>This is the body</td></tr>
  </tbody>
</table>

Спасибо большое! Вы решили мою проблему! Я пытался взломать :first-child, но мне кажется, что я использовал неправильный синтаксис или что-то в этом роде. Еще раз большое Вам спасибо!

Aftermaz 17.05.2022 19:30

Просто надеюсь, что ни в одной таблице нет элементов <caption> или каких-либо элементов <colgroup>.

Alohci 17.05.2022 19:52

Другие вопросы по теме