Вопрос

необходимо ли иметь <th> в любой таблице?даже если таблица не имеет заголовка?

таблица имеет 3 других тега <thead> <tbody> <tfoot> нужно ли использовать все, даже если у меня ничего нет для нижнего колонтитула таблицы?Firefox по умолчанию добавляет все это в код.

и нужно ли это , <th> всегда должен быть в <thead>

и если у меня есть заголовок в содержимом, полученном от клиента, и заголовок находится за пределами таблицы, но связан с таблицей, то как я должен разместить этот заголовок для таблицы

В приведенной выше таблице

<h3>Heading of table<h3>
<table>......</table>

в качестве заголовка таблицы

<table>
<thead><tr rowspan=3><th>Heading of table</th></tr></thead>

или в качестве заголовка таблицы

<table>
<caption> Heading of table</caption>

Что хорошо для программы чтения с экрана и семантически корректно?

Это было полезно?

Решение

В соответствии с HTML DTD это модель содержимого для HTML-таблиц:

<!ELEMENT TABLE - -
     (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ELEMENT CAPTION  - - (%inline;)*     -- table caption -->
<!ELEMENT THEAD    - O (TR)+           -- table header -->
<!ELEMENT TFOOT    - O (TR)+           -- table footer -->
<!ELEMENT TBODY    O O (TR)+           -- table body -->
<!ELEMENT COLGROUP - O (COL)*          -- table column group -->
<!ELEMENT COL      - O EMPTY           -- table column -->
<!ELEMENT TR       - O (TH|TD)+        -- table row -->
<!ELEMENT (TH|TD)  - O (%flow;)*       -- table header cell, table data cell-->

Так что это незаконный синтаксис:

<thead><th>Heading of table</th></thead>

Это должно быть:

<thead><tr><th>Heading of table</th></tr></thead>

<th> элементы нигде не требуются.Это просто один из двух типов клеток (другой - <td>), который вы можете использовать в строке таблицы.A <thead> это необязательный раздел таблицы, который может содержать одну или несколько строк.

Редактировать: Что касается почему для использования <thead> на это есть несколько причин:

  1. Семантический: Вы проводите различие между содержимым вашей таблицы и "метаданными".Чаще всего это используется для разграничения заголовков столбцов и строк данных;
  2. Специальные возможности: это помогает людям, использующим программы чтения с экрана, разобраться в содержимом таблицы;
  3. Неэкранные носители информации: Печать многостраничной таблицы может позволить вам поместить <thead> содержимое вверху каждой страницы, чтобы люди могли понять, что означают столбцы, не перелистывая несколько страниц назад.;
  4. Укладка: CSS может быть применен к <tbody> элементы, <thead> элементы, оба или какая-то другая комбинация.Это дает вам что-то еще, против чего можно написать селектор;
  5. Javascript: это часто возникает при использовании jQuery и подобных библиотек.Дополнительная информация полезна при написании кода.

В качестве примера из (5) вы могли бы сделать это:

$("table > tbody > tr:nth-child(odd)").addClass("odd");

Тот самый <thead> элемент означает, что эти строки не будут оформлены таким образом.Или вы могли бы сделать:

$("table > tbody > tr").hover(function() {
  $(this).addClass("hover");
}, function() {
  $(this).removeClass("hover");
});

с:

tr.hover { background: yellow; }

что опять же исключает <thead> ряды.

Наконец, многие из этих же аргументов применимы к использованию <th> элементы над <td> элементы:вы указываете, что эта ячейка является не данными, а каким-то заголовком.Часто такие ячейки группируются вместе в одну или несколько строк в <thead> разделять или быть первой ячейкой в каждой строке в зависимости от структуры и характера вашей таблицы.

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

Использовать <th>s, если вы отображаете табличные данные — используйте по одному для каждого столбца.Это удобно для ваших постоянных пользователей и важно для программ чтения с экрана.Не использовать <th>s, если вы используете таблицу для макетирования (или других гнусных схем...)

Нет, не обязательно это иметь.Но не похоже, что ты используешь это правильно.Обычно у вас есть один для каждого столбца.Простой пример правильного использования th:

<table>
<tr><th>Breed</th><th>Name</th></tr>
<tr><td>Pekingese</td><td>Pluto</td></tr>
<tr><td>Lab</td><td>Buddy</td></tr>
</table>

Вы также можете сделать:

<table>
<thead><tr><th>Breed</th><th>Name</th></tr></thead>
<tr><td>Pekingese</td><td>Pluto</td></tr>
<tr><td>Lab</td><td>Buddy</td></tr>
</table>

Ответ таков

ДА!

если вы используете таблицы для отображения табличных данных.

Табличные данные организованы в строки и столбцы не просто так. Значение элемента данных в ячейке таблицы определяется значением столбца и строки, в которых он появляется.

Важно идентифицировать те ячейки, которые придают значение строкам и столбцам, а не ячейки, которые просто содержат данные.

Например, следующая таблица не содержит абсолютно никакой значимой информации:

34 56 90 15
45 65 85 30
50 55 70 35

Цифры имеют значение только в том случае, если строкам и столбцам присвоены имена.Эти имена помечены с помощью <th>:

    Февраль Май Август Ноябрь
ИТ - Й
Кеннеди
IST

Конечно, мы до сих пор не знаем, что означают эти цифры, и именно поэтому <caption> необходим:

Средние температуры по месяцам в отдельных аэропортах
    Февраль Май Август Ноябрь
ИТ - Й
Кеннеди
IST

Наконец, важно отметить такие детали, как единицы измерения, источники данных и т.д.Такого рода информация обычно содержится в нижнем колонтитуле таблицы:

Средние температуры по месяцам в отдельных аэропортах
    Февраль Май Август Ноябрь
ИТ - Й
Кеннеди
IST
Temperatures in °F. Source: Publication #456 MNMO

Заголовок таблицы переходит в <caption>.Тот самый <thead> и <tfoot> разделы особенно полезны, когда таблица становится большой.Видишь Как бороться с разрывами страниц при печати большой HTML-таблицы для примера.

Вы можете использовать <colgroups> сгруппировать логически связанные данные.

Вы хотите использовать то, что лучше всего описывает ваши данные.

<caption> опишет всю таблицу. th создаст одну ячейку, которая обычно используется для описания одного столбца (но также может использоваться для заголовков строк).

thead, tfoot, и tbody.все они могут использоваться и являются необязательными при условии, что они расположены в указанном порядке, если используются, и у вас есть только один thead и один tfoot (но вы можете иметь несколько tbody.Многие браузеры (все?) добавят их неявно, если вы этого не сделаете, но в спецификации сказано, что они не являются обязательными.

th может появиться внутри любого tr независимо от того, где tr является.

<table>
     <tr>
        <td>text</td>
     </tr>      
</table>

Это минимальная таблица, которую я могу придумать.

Преимущества заключаются в семантике.Тот самый <th> означает T способный H идер.Используйте его для разметки заголовков ваших столбцов.Как правило, в пределах <thead>.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top