11   Таблицы

Содержание

  1. Введение
  2. Элементы конструирования таблиц
  3. Форматирование таблицы Пользовательскими Агентами (ПА)
  4. Представление таблиц невизуальными ПА
  5. Образец таблицы


11.1
  Введение

Модель таблиц HTML позволяет авторам упорядочивать данные - текст, форматированный текст, изображения, гиперссылки, формы, поля форм, другие таблицы и т.д. - в ряды и столбцы ячеек.

Каждая таблица может иметь ассоциированный заголовок (см. элемент CAPTION), представляющий краткое описание назначения таблицы. Полное описание также может быть представлено (атрибутом summary) для использования в ПА по системе Брайля.

Ряды таблицы могут быть сгруппированы в разделы head, foot и body (элементами THEAD, TFOOT и TBODY соответственно). Группы рядов дополнительно структурируют информацию и могут отображаться в ПА так, чтобы подчеркнуть эту структуризацию. ПА могут использовать разделение head/body/foot для поддержки прокрутки раздела body независимо от разделов head и foot. Если распечатываются большие таблицы, head и foot информация может повторяться на каждой странице с данными таблицы.

Авторы могут также группировать столбцы, чтобы предоставлять дополнительно структурированную информацию, которая может быть использована ПА. Кроме того, авторы могут объявлять свойства столбцов в начале определения таблицы (элементами COLGROUP и COL) таким образом, чтобы дать ПА возможность просматривать таблицу частями, а не заставлять пользователя ждать загрузки всех данных таблицы, прежде чем начать её отображение.

Ячейки таблицы могут содержать или "header" информацию (см. элемент TH), или "data" (см. элемент TD). Ячейки могут занимать несколько рядов или столбцов. Модель таблиц HTML 4 позволяет авторам помечать каждую ячейку так, что невизуальные ПА могут легче предавать заголовочную информацию о ячейке пользователю. Эти механизмы не только существенно помогают пользователям с дефектами зрения, они делают также возможным  показ таблиц во многорежимных беспроводных браузерах с ограниченными возможностями отображения (например, пэйджеры и телефоны с возможностью отображения Web).

Таблицы не должны использоваться только с целью форматирования содержимого документа, так как это может создавать проблемы для невизуальных устройств. К тому же, при использовании с графикой, такие таблицы могут потребовать горизонтальной прокрутки для просмотра таблиц, созданных в системе с более широким дисплеем. Чтобы минимизировать эти проблемы, авторы должны использовать для управления выводом таблицы стиля, а не таблицы.

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

Вот простая таблица, иллюстрирующая возможности табличной модели HTML.
Следующее определение таблицы:

<TABLE border="1"
          summary="This table gives some statistics about fruit
                   flies: average height and weight, and percentage
                   with red eyes (for both males and females).">
<CAPTION><EM>A test table with merged cells</EM></CAPTION>
<TR><TH rowspan="2"><TH colspan="2">Average
    <TH rowspan="2">Red<BR>eyes
<TR><TH>height<TH>weight
<TR><TH>Males<TD>1.9<TD>0.003<TD>40%
<TR><TH>Females<TD>1.7<TD>0.002<TD>43%
</TABLE>

может отображаться на устройстве tty примерно так:

          A test table with merged cells
    /-----------------------------------------\
    |          |      Average      |   Red    |
    |          |-------------------|  eyes    |
    |          |  height |  weight |          |
    |-----------------------------------------|
    |  Males   | 1.9     | 0.003   |   40%    |
    |-----------------------------------------|
    | Females  | 1.7     | 0.002   |   43%    |
    \-----------------------------------------/

или так в графическом ПА:

A table with merged cells


11.2
  Элементы конструирования таблиц

11.2.1 Элемент TABLE

<!ELEMENT TABLE - -
     (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ATTLIST TABLE                        -- элемент table --
  %attrs;                              -- %coreattrs, %i18n, %events --
  summary     %Text;         #ПРЕДПОЛАГАЕТСЯ  -- назначение/структура для речевого вывода --
  width       %Length;       #ПРЕДПОЛАГАЕТСЯ  -- ширина таблицы --
  border      %Pixels;       #ПРЕДПОЛАГАЕТСЯ  -- толщина рамки вокруг таблицы --
  frame       %TFrame;       #ПРЕДПОЛАГАЕТСЯ  -- какие части фрэйма отображать --
  rules       %TRules;       #ПРЕДПОЛАГАЕТСЯ  -- линии между рядами и столбцами --
  cellspacing %Length;       #ПРЕДПОЛАГАЕТСЯ  -- расстояние между ячейками --
  cellpadding %Length;       #ПРЕДПОЛАГАЕТСЯ  -- расстояние между
						рамкой ячейки и её содержимым --
  >

Начальный тег: необходим, Конечный тег: необходим

Определения атрибутов

summary = text [CS]
Определяет общую информацию о назначении и структуре таблицы для ПА с невизуальными носителями: речевых и по Брайлю.
align = left|center|right [CI]
Не рекомендуется. Этот атрибут определяет положение таблицы по отношению к документу. Допустимые значения:
  • left: влево;.
  • center: по центру документа;.
  • right: справа.
width = length [CN]
Определяет необходимую ширину всей таблицы и предназначен для ПА. Если значение указано в процентах, оно является относительным к доступному в ПА горизонтальному пространству. При отсутствии спецификации ширины, ширина таблицы определяется ПА.

Атрибуты, определённые в другом месте

Элемент TABLE содержит все другие элементы, определяющие заголовок таблицы, ряды, содержимое и форматирование.

Следующая информация описывает, какие операции ПА могут выполнять при отображении таблиц:

Модель таблиц HTML была разработана таким образом, что, с помощью авторов, ПА могут отображать таблицы частями (т.е. по мере получения рядов таблицы), вместо того, чтобы ожидать получения всех данных таблицы перед началом отображения.

Для того, чтобы ПА форматировали таблицы в один этап, авторы должны сообщить ПА:

Более точно ПА может отображать таблицу в один этап, если ширина столбцов определена комбинацией элементов COLGROUP и COL. Если какие-либо столбцы определены в относительных единицах или процентах (см. раздел подсчёт ширины столбцов), авторы должны также определить ширину всей таблицы.

Направление в таблице   

Направление в таблице или наследуется прямо (по умолчанию слева-направо), или определяется атрибутом dir элемента TABLE.

Для таблиц с направлением слева-направо нулевой столбец - самый левый, а нулевой ряд - самый верхний. Для таблиц с направлением справа-налево нулевой столбец - самый правый, а нулевой ряд - самый верхний.

Когда ПА добавляет дополнительные ячейки в ряд (см. раздел подсчёт количества столбцов таблицы), новые ячейки в ряду добавляются справа для таблиц с направлением слева-направо и слева - для таблиц с направлением справа-налево.

Обратите внимание, что TABLE это единственный элемент, в котором dir резервирует визуальный порядок столбцов; отдельный ряд (TR)ил группа столбцов (COLGROUP) не могут быть независимо зарезервированы.

При установке для элемента TABLE, атрибут dir также влияет на направление текста внутри ячеек таблицы (поскольку атрибут dir наследуется элементами уровня блока).

Для определения таблицы с направлением справа-налево, установите атрибут dir так:

<TABLE dir="RTL">
...таблица...
</TABLE>

Направление текста в конкретной ячейке может быть изменено установкой атрибута dir в том элементе, который определяет ячейку. См. раздел двунаправленный текст.

11.2.2  Заголовок таблицы: элемент CAPTION

<!ELEMENT CAPTION  - - (%inline;)*     -- заголовок таблицы -->

<!ATTLIST CAPTION
  %attrs;                              -- %coreattrs, %i18n, %events --
  >

Начальный тег: необходим, Конечный тег: необходим

Определение атрибута

align = top|bottom|left|right [CI]
Не рекомендуется. Для визуальных ПА этот атрибут определяет положение заголовка относительно таблицы. Возможные значения:
  • top: заголовок сверху над таблицей. Это значение по умолчанию;
  • bottom: заголовок снизу под таблицей;
  • left: заголовок слева от таблицы;
  • right: заголовок справа от таблицы.

Атрибуты, определённые в другом месте

Если элемент CAPTION присутствует, текст должен описывать сущность таблицы. Элемент CAPTION допускается только непосредственно после начального тега TABLE. Элемент TABLE может содержать только один элемент CAPTION.

Визуальные ПА позволяют зрячим людям разом охватить структуру таблицы, начиная с "шапки". Следствием этого может быть то, что заголовок часто не отражает общее назначение и структуру таблицы для тех, кто просматривает её в невизуальных ПА.

По этой причине авторы должны позаботиться о предоставлении дополнительной информации, суммирующей назначение и структуру таблицы, используя атрибут summary элемента TABLE. Это особенно важно для таблиц без заголовка. Данные ниже примеры иллюстрируют использование атрибута summary.

Визуальные ПА должны исключить усечение любой части таблицы, в том числе и заголовка, если только нет цели обеспечить доступ ко всей таблице целиком, например, с помощью горизонтальной или вертикальной прокрутки. Мы рекомендуем, чтобы текст заголовка был расположен на ту же ширину, что и таблица (см. также раздел рекомендуемый алгоритм вывода).

11.2.3  Группы рядов: элементы  THEAD, TFOOT  и  TBODY

<!ELEMENT THEAD    - O (TR)+           -- "шапка" таблицы -->
<!ELEMENT TFOOT    - O (TR)+           -- футер таблицы -->

Начальный тег: необходим, Конечный тег: не обязателен

<!ELEMENT TBODY    O O (TR)+           -- тело таблицы -->

Начальный тег: не обязателен, Конечный тег: не обязателен

<!ATTLIST (THEAD|TBODY|TFOOT)          -- раздел таблицы --
  %attrs;                              -- %coreattrs, %i18n, %events --
  %cellhalign;                         -- горизонтальное выравнивание в ячейках --
  %cellvalign;                         -- вертикальное выравнивание в ячейках --
  >

Атрибуты, определённые в другом месте

Ряды таблицы могут быть сгруппированы в "шапку", футер и один или более разделов тела документа с помощью элементов THEAD, TFOOT и TBODY соответственно. Это разделение делает возможным для ПА поддерживать прокрутку тела таблицы независимо от "шапки" и футера. Если распечатываются большие таблицы, информация "шапки" и футера может повторяться на каждой странице, содержащей данные таблицы.

"Шапка" и футер таблицы должны содержать информацию о столбцах таблицы. Тело таблицы должно содержать ряды данных таблицы.

Если элементы THEAD, TFOOT и TBODY установлены, каждый из них содержит группу рядов.
Каждая группа рядов должна содержать минимум один ряд, определённый элементом TR.

Этот пример иллюстрирует порядок и структуру "шапки", футера и тела таблицы.

<TABLE>
<THEAD>
     <TR> ...информация "шапки"...
</THEAD>
<TFOOT>
     <TR> ...информация футера...
</TFOOT>
<TBODY>
     <TR> ...первый ряд данных блока 1...
     <TR> ...второй ряд данных блока 1...
</TBODY>
<TBODY>
     <TR> ...первый ряд данных блока 2...
     <TR> ...второй ряд данных блока 2...
     <TR> ...третий ряд данных блока 2...
</TBODY>
</TABLE>

TFOOT должен появляться перед TBODY внутри определения TABLE так, чтобы ПА могли отобразить футер до получения (возможно, многочисленных) рядов данных. Вот краткое резюме того, какие теги необходимы и какие могут быть опущены:

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

Таблица предыдущего примера может быть укорочена за счёт удаления некоторых конечных тегов:

<TABLE>
<THEAD>
     <TR> ...информация "шапки"...
<TFOOT>
     <TR> ...информация футера...
<TBODY>
     <TR> ...первый ряд данных блока 1...
     <TR> ...второй ряд данных блока 1...
<TBODY>
     <TR> ...первый ряд данных блока 2...
     <TR> ...второй ряд данных блока 2...
     <TR> ...третий ряд данных блока 2...
</TABLE>     

Разделы THEAD, TFOOT и TBODY должны содержать одинаковое количество столбцов.

11.2.4  Группы столбцов: элементы  COLGROUP  и  COL

Группы столбцов позволяют авторам создавать структурированные подразделения внутри таблицы. Авторы могут сделать эту структуру более ясной с помощью таблиц стилей или атрибутов HTML (напр., атрибут rules элемента TABLE). См. пример визуального представления группы столбцов в образце таблицы.

Таблица может содержать единую подразумеваемую группу столбцов (нет элементов COLGROUP, разграничивающих столбцы) или любое количество явно определённых групп столбцов (каждая ограничена вхождением элемента COLGROUP).

Элемент COL позволяет авторам разделять использование атрибутов среди нескольких столбцов без применения какого-либо структурного группирования. Атрибут "span" элемента COL это количество столбцов, которые будут использовать атрибуты элемента.

Элемент COLGROUP  

<!ELEMENT COLGROUP - O (COL)*          -- группа столбцов таблицы -->
<!ATTLIST COLGROUP
  %attrs;                                -- %coreattrs, %i18n, %events --
  span        NUMBER         1        	 -- количество по умолчанию столбцов в группе --
  width       %MultiLength;  #ПРЕДПОЛАГАЕТСЯ  -- ширина по умолчанию
						для COL, входящих в группу --
  %cellhalign;                           -- горизонтальное выравнивание в ячейках --
  %cellvalign;                           -- вертикальное выравнивание в ячейках --
  >

Начальный тег: необходим, Конечный тег: не обязателен

Определения атрибутов

span = number [CN]
Должен быть целым числом > 0, определяет количество столбцов в группе столбцов. Значения предполагают следующее:
  • при отсутствии атрибута span, каждый COLGROUP определяет группу столбцов, содержащую один столбец;
  • если атрибут span установлен в N > 0, текущий элемент COLGROUP определяет группу столбцов, содержащую N столбцов.

ПА должны игнорировать этот атрибут, если элемент COLGROUP содержит один или более элементов COL.

width = multi-length [CN]

Этот атрибут определяет ширину по умолчанию для каждого столбца текущей группы столбцов. В дополнение к стандартным значениям в пикселах, процентах, относительных единицах, этот атрибут допускает специальную форму "0*" (нулевая звёздочка), которая означает, что ширина каждого столбца в группе должна быть наименьшей возможной для вмещения содержимого ячейки. Это предполагает, что всё содержимое столбца должно быть известно до того, как его ширина может быть корректно просчитана. Авторы должны помнить, что определение "0*" будет предупреждать визуальные ПА, что таблица не должна отображаться частями.

Этот атрибут переопределяется для любого столбца в группе, чей атрибут