Поиск

Модель таблицы CSS

Модель таблиц CSS основана на модели таблиц HTML 4.0, в которой структура таблицы тесно связана с визуальным представлением таблицы. В этой модели таблица состоит из необязательного заголовка и произвольного количества строк ячеек. Такая модель таблиц считается "ориентированной на строки", так как в языке документа явным образом определяются строки, а не столбцы. Столбцы определяются только после указания всех строк -- первая ячейка каждой строки относится к первому столбцу, вторая - ко второму и так далее). Строки и столбцы могут образовывать структурные группы с отражением при представлении таблицы (например, вокруг группы строк может располагаться граница).

Таким образом, модель таблицы состоит из таблиц, заголовков, строк, групп срок, столбцов, групп столбцов и ячеек.

Для модели CSS не обязательно, чтобы язык документа включал элементы, соответствующие всем этим компонентам. Для языков документов (таких как приложения XML), не имеющих заранее определенных элементов таблиц, авторы могут отображать элементы языка документа на элементы таблицы; такая процедура осуществляется с помощью свойства 'display'. Следующие значения 'display' связывают семантику таблицы с произвольным элементом:

table (В HTML: TABLE)

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

inline-table (В HTML: TABLE)

Указывает, что элемент определяет таблицу уровня стоки: это прямоугольный блок, который используется в последовательном контексте форматирования).

table-row (В HTML: TR)

Указывает, что элемент является строкой ячеек.

table-row-group (В HTML: TBODY)

Указывает, что элемент группирует одну или несколько строк.

table-header-group (В HTML: THEAD)

Работает аналогично 'table-row-group', но для визуального форматирования эта группа строк всегда отображается вперед всех других строк и их групп, после главного заголовка. Агенты пользователей, осуществляющие вывод на печать, могут повторять строки нижнего заголовка на каждой странице, занимаемой таблицей.

table-footer-group (В HTML: TFOOT)

Работает аналогично 'table-row-group', но для визуального форматирования эта группа строк всегда отображается после всех строк и их групп, перед нижними заголовками. Агенты пользователей, осуществляющие вывод на печать, могут повторять строки нижнего заголовка на каждой странице, занимаемой таблицей.

table-column (В HTML: COL)

Указывает, что элемент определяет столбец ячеек.

table-column-group (В HTML: COLGROUP)

Указывает, что элемент объединяет один или несколько столбцов.

table-cell (В HTML: TD, TH)

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

table-caption (В HTML: CAPTION)

Задает заголовок таблицы.

Элементы, у которых для свойства 'display' установлено значение 'table-column' или 'table-column-group', не представляются (как если было указано значение 'display: none'), но они могут быть полезны, поскольку могут иметь атрибуты для создания определенного стиля для представляемых столбцов.

Использовании этих значений в HTML 4.0 показано в стандартной таблице стилей для HTML 4.0 в приложении:

TABLE { display: table }
TR { display: table-row }
THEAD { display: table-header-group }
TBODY { display: table-row-group }
TFOOT { display: table-footer-group }
COL { display: table-column }
COLGROUP { display: table-column-group }
TD, TH { display: table-cell }
CAPTION { display: table-caption }

Агенты пользователей могут игнорировать эти значения свойства 'display' для документов HTML, так как авторы не должны изменять предполагаемое поведение элемента.

Анонимные объекты таблицы

Языки документов, отличные от HTML, могут не включать все элементы из модели таблиц CSS2. В этом случае для работы модели таблиц должно считаться, что "отсутствующие" элементы существуют. Отсутствующие элементы генерируют анонимные объекты (например, анонимные блоки в визуальное схеме таблицы) согласно следующим правилам:

  1. Все элементы таблицы будут автоматически генерировать вокруг себя необходимые анонимные объекты таблицы, состоящие по меньшей мере из трех вложенных объектов, соответствующих элементам 'table'/'inline-table', a 'table-row' и 'table-cell'.
  2. Если родительский элемент P элемента T 'table-cell' не является элементом 'table-row', объект, соответствующий 'table-row', будет сгенерирован между элементами P и T. Этот объект будет охватывать все последующие элементы 'table-cell' (в дереве документа) в T.
  3. Если значение родительского элемента P элемента 'table-row' T отлично от 'table', 'inline-table' или 'table-row-group', объект, соответствующий элементу 'table', будет сгенерирован между элементами P и T. Этот объект будет охватывать все последовательные элементы (в дереве документа) элемента T, у которых родительский элемент 'table' должен быть 'table-row', 'table-row-group', 'table-header-group', 'table-footer-group', 'table-column', 'table-column-group' и 'caption'.
  4. Если родительский элемент P элемента T 'table-row-group' (или 'table-header-group' или 'table-footer-group') не является 'table' или 'inline-table', объект, соответствующий элементу 'table', будет сгенерирован между элементами P и T. Этот объект будет охватывать все последовательные элементы (в дереве документа) элемента T, у которых родительский элемент 'table' должен быть 'table-row', 'table-row-group', 'table-header-group', 'table-footer-group', 'table-column', 'table-column-group' и 'caption'.
  5. Если дочерний элемент T элемента P 'table-row' не является элементом 'table-cell', объект, соответствующий элементу 'table-cell', будет сгенерирован между элементами P и T. Этот объект будет охватывать все последовательные элементы T, которые не являются элементами 'table-cell'.
    1. В этом примере для XML элемент 'table' может содержать элемент HBOX:

      <HBOX>
      <VBOX>George</VBOX>
      <VBOX>4287</VBOX>
      <VBOX>1998</VBOX>
      </HBOX>

      так как с ним связана следующая таблица стилей:

      HBOX { display: table-row }
      VBOX { display: table-cell }

      В данном примере предполагается, что три элемента 'table-cell' в элементах ROW содержат. Обратите внимание, что далее текст помещается в анонимные последовательные блоки, как описано в модели визуального форматирования:

      <STACK>
      <ROW>Это <D>top</D> строка.</ROW>
      <ROW>Это <D>middle</D> строка.</ROW>
      <ROW>Это <D>bottom</D> строка.</ROW>
      </STACK>

      Таблица стилей:

      STACK { display: inline-table }
      ROW { display: table-row }
      D { display: inline; font-weight: bolder }

      Агенты пользователей HTML могут не создавать анонимные объекты согласно описанным выше правилам.