Нужно ли иметь <th>в любой таблице? - PullRequest
2 голосов
/ 17 февраля 2010

необходимо ли иметь <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>

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

Ответы [ 7 ]

13 голосов
/ 17 февраля 2010

Согласно 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>), которые вы можете использовать в строке таблицы. <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> или будут первой ячейкой в ​​каждой строке в зависимости от структуры и характера вашей таблицы.

4 голосов
/ 17 февраля 2010

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

2 голосов
/ 17 февраля 2010

Нет, не обязательно иметь 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>
1 голос
/ 17 февраля 2010

Ответ

ДА!

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

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

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

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

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

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

    <b>Feb</b> <b>May</b> <b>Aug</b> <b>Nov</b>
<b>ITH</b>
<b>JFK</b>
<b>IST</b>

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

<b>Average Temperatures by Month at Selected Airports</b>
    <b>Feb</b> <b>May</b> <b>Aug</b> <b>Nov</b>
<b>ITH</b>
<b>JFK</b>
<b>IST</b>

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

<b>Average Temperatures by Month at Selected Airports</b>
    <b>Feb</b> <b>May</b> <b>Aug</b> <b>Nov</b>
<b>ITH</b>
<b>JFK</b>
<b>IST</b>
Temperatures in &deg;F. Source: Publication #456 MNMO

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

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

0 голосов
/ 17 февраля 2010

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

0 голосов
/ 17 февраля 2010
<table>
     <tr>
        <td>text</td>
     </tr>      
</table>

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

0 голосов
/ 17 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...