Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Таблицы в модели визуального форматирования



Введение в таблицы CSS

Таблицы представляют отношения между данными. Авторы определяют эти отношения в языке документа и указывают способ их представления в CSS: визуальное или звуковое.

Авторы могут определять визуальное форматирование таблиц в виде прямоугольной сетки ячеек. Строки и столбцы ячеек могут объединяться в группы строк и группы столбцов. Вокруг строк, столбцов, групп строк, групп строк и ячеек могут быть видимые границы (в спецификации CSS2 представлено две модели границ). Внутри ячейки данные могут выравниваться по вертикали или по горизонтали. Кроме того, данные могут выравниваться во всех ячейках или столбцах.

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

Пример(ы):

Далее представлена таблица из трех строк и трех абзацев, описанная на языке HTML 4.0:

< TABLE> < CAPTION> Обычная таблица размером 3x3< /CAPTION> < TR id=" row1" > < TH> Заголовок 1 < TD> Ячейка 1 < TD> Ячейка 2< TR id=" row2" > < TH> Заголовок 2 < TD> Ячейка 3 < TD> Ячейка 4< TR id=" row3" > < TH> Заголовок 3 < TD> Ячейка 5 < TD> Ячейка 6< /TABLE>

В этом коде создается одна таблица (элемент TABLE), три строки (элементы TR), три ячейки заголовков (элементы TH) и шесть ячеек данных (элементы TD). Обратите внимание, что три столбца в этом примере указаны неявно: в таблице столько столбцов, сколько понадобится для ячеек заголовков и данных.

С помощью следующего правила CSS текст в ячейках заголовка выравнивается горизонтально по центру, а данные отображаются жирным шрифтом:

TH { text-align: center; font-weight: bold }

Следующие правила позволяют выровнять текст ячеек заголовков по базовой линии, а текст каждой ячейки данных - вертикально по центру:

TH { vertical-align: baseline }TD { vertical-align: middle }

Следующие правила определяют наличие сплошной линии границы синего цвета толщиной 3 пиксела вокруг верхней строки и сплошной границы черного цвета толщиной в 1 пиксел вокруг каждой из последующих строк:

TABLE { border-collapse: collapse }TR#row1 { border-top: 3px solid blue }TR#row2 { border-top: 1px solid black }TR#row3 { border-top: 1px solid black }

Следует помнить, однако, что границы вокруг строк могут перекрываться в местах пересечения строк. Какого цвета (черная или синяя) и толщины (1 пиксел или 3 пиксела) будет граница между строкой 1 и 2? Это обсуждается в разделе об устранении конфликтов между границами.

Согласно следующему правилу заголовок таблицы помещается над самой таблицей:

CAPTION { caption-side: top }

И наконец, следующее правило указывает, что при звуковом представлении таблицы каждая строка данных будет произноситься в формате " Заголовок, Данные, Данные":

TH { speak-header: once }

Например, первая строка будет произноситься в формате " Заголовок1 Ячейка1 Ячейка2". А в соответствии со следующим правилом:

TH { speak-header: always }

эта строка будет произноситься в формате " Заголовок1 Ячейка1 Заголовок1 Ячейка2".

В предыдущих примерах показано, как CSS влияет на элементы HTML 4.0; в HTML 4.0 семантика различных элементов таблицы (TABLE, CAPTION, THEAD, TBODY, TFOOT, COL, COLGROUP, TH и TD) определена строго. В других языках документов (например, в приложениях XML) элементы таблицы могут быть не определены заранее. Таким образом, спецификация CSS2 позволяет авторам " отображать" элементы языка документа на элементы таблицы с помощью свойства 'display'. Например, за счет следующего правила элемент FOO действует как элемент HTML TABLE, а элемент BAR работает как элемент CAPTION:

FOO { display: table }BAR { display: table-caption }

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

Модель таблиц 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'.

Пример(ы):

В этом примере для 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 могут не создавать анонимные объекты согласно описанным выше правилам.

Селекторы столбцов

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

Следующие свойства применяются к элементам столбцов и групп столбцов:

'border'

Различные свойства границы применяются к столбцам, только если для свойства 'border-collapse' в элементе таблицы установлено значение 'collapse'. В этом случае границы устанавливаются вокруг столбцов, а группы столбцов передаются в алгоритм разрешения конфликтов, который выбирает стили границ для каждого края ячейки.

'background'

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

'width'

Свойство 'width' определяет минимальную ширину столбца.

'visibility'

Если свойству столбца 'visibility' присвоено значение 'collapse', ни одна ячейка столбца не представляется, а ячейки, охватывающие другие столбцы, урезаются. Кроме того, ширина таблиц уменьшается на ширину этого столбца. См. ниже раздел " Динамические эффекты". Другие значения свойства 'visibility' не имеют влияния.

Пример(ы):

Вот несколько примеров правил, определяющих свойства столбцов. Первые два правила реализуют атрибут " rules" HTML 4.0, имеющий значение " cols". Третье правил выделяет столбец " totals" синим цветом, а последние два правила указывают способ фиксирования размера столбца, используя алгоритм фиксированного расположения.

COL { border-style: none solid }TABLE { border-style: hidden }COL.totals { background: blue }TABLE { table-layout: fixed }COL.totals { width: 5em }

Top

Поле заголовка располагается над полем таблицы.

Bottom

Поле заголовка располагается ниже поля таблицы.

Left

Поле заголовка располагается слева от поля таблицы.

Right

Поле заголовка располагается справа от поля таблицы.

Заголовки, расположенные ниже или выше элемента 'table', форматируются подобно элементам блока, находящимся ниже или выше таблицы, с тем исключением, что они (1) наследуют наследуемые свойства таблицы и (2) не считаются блоками для элементов 'compact' или 'run-in', которые могут предшествовать таблице.

Заголовок, находящийся ниже или выше поля таблицы, действует также как блок для вычисления ширины; ширина вычисляется относительно ширины содержащего блока таблицы.

Для заголовка, располагающегося в правой или левой части поля таблицы, значение свойства 'width', отличное от 'auto', явным образом устанавливает ширину, в то время как значение 'auto' предписывает агенту пользователя выбрать " соответствующую ширину". Это значение может колебаться от " самого узкого блока " до " одной строки", поэтому пользователям рекомендуется не указывать значение 'auto' для установки ширины левого и правого заголовка.

Для выравнивания содержимого заголовка по горизонтали внутри поля заголовка используйте свойство 'text-align'. Для вертикального выравнивания левого и правого блока заголовка относительно блока таблицы используйте свойство 'vertical-align'. В этом случае смысл имеют только значения 'top', 'middle' и 'bottom'. Все другие значения трактуются как 'top'.

Пример(ы):

В этом примере свойство 'caption-side' определяет расположение заголовков под таблицей. Заголовок может иметь ширину родительского элемента таблицы, а текст заголовка будет выровнен по левому краю.

CAPTION { caption-side: bottom; width: auto; text-align: left }

Пример(ы):

В следующем примере показан способ помещения заголовка в левое поле. Таблица выровнена по центру за счет задания для левого и правого полей значения 'auto', а весь блок с таблицей и заголовком сдвинут в левое поле на расстояние, равное ширине заголовка.

BODY { margin-left: 8em}TABLE { margin-left: auto; margin-right: auto}CAPTION { caption-side: left; margin-left: -8em; width: 8em; text-align: right; vertical-align: bottom}

Если ширина таблицы меньше ширины пространства для отображения, то форматирование примет следующий вид:

[D]

Выровненная по центру таблица с заголовком, выступающим на левое поле в результате отрицательного значения свойства 'margin-left'.

Слои и прозрачность таблицы

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

[D]

Схема слоев таблицы.

1. Самый нижний слой представляет собой одну плоскость, представляющую сам блок таблицы. Как и все блоки, он может быть прозрачным.

2. Следующий слой содержит группы столбцов. Группы столбцов по высоте равны самой таблице, но не обязательно занимают всю ее ширину.

3. В верхней части групп столбцов находятся области, представляющие блоки столбцов. Как и группы столбцов, столбцы по высоте равны самой таблице, но не всегда занимают всю ширину таблицы.

4. Далее следует слой, содержащий группы строк. Каждая группа строк имеет ширину, равную ширине таблицы. Вместе взятые, группы полностью занимают таблицу сверху вниз.

5. Предпоследний слой содержит строки. Строки также занимают всю таблицу.

6. Самый верхний слой содержит собственно ячейки. Как показано на рисунке, хотя все строки и содержат одинаковое количество ячеек, не в каждой ячейке имеется содержимое. " Пустые" ячейки считаются прозрачными, поэтому через них будут видны нижние слои.

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

<! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.0//EN" > < HTML> < HEAD> < STYLE type=" text/css" > TABLE { фон: #ff0; border-collapse: collapse } TD { фон: red; border: double black } < /STYLE> < /HEAD> < BODY> < P> < TABLE> < TR> < TD> 1 < TD rowspan=" 2" > 2 < TD> 3 < TD> 4 < /TR> < TR> < TD> < /TD> < /TR> < /TABLE> < /BODY> < /HTML>

может форматироваться так:

[D]

Таблица с тремя пустыми ячейками в нижней строке.

17.5.2 Алгоритмы определения ширины таблицы: свойство 'table-layout'

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

'table-layout'

Значение: auto | fixed | inherit
Начальное значение: auto
Область применения: элементы 'table' и 'inline-table'
Наследование: нет
Процентное значение: не применяется
Устройства: визуальные

Свойство 'table-layout' управляет алгоритмом, используемым для размещения ячеек, строк и столбцов таблицы. Значения имеют следующий смысл:

Fixed

Используется алгоритм фиксированного положения таблицы

Auto

Используется любой алгоритм автоматического размещения таблицы

Ниже представлены описания обоих алгоритмов.

Baseline

Базовая линия ячейки располагается на той же высоте, что и базовая линия первой строки, занимаемой ячейкой (определение базовой линии ячеек и строк см. ниже).

Top

Верх блока ячейки совпадает с верхом первой строки, занимаемой ячейкой.

Bottom

Низ блока ячейки совпадает с низом последней строки, занимаемой ячейкой.

Middle

Середина ячейки совпадает с серединой строк, занимаемых ячейкой.

Границы

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

'border-collapse'

Значение: collapse | separate | inherit
Начальное значение: collapse
Область применения: элементы 'table' и 'inline-table'
Наследование: да
Процентные значения: N/A
Устройства: визуальные

Это свойство позволяет выбрать модель границ таблицы. Значение 'separate' означает модель с отдельными границами. Значение 'collapse' задает модель с пересекающимися границами. Эти модели описаны ниже.

Модель отдельных границ

'border-spacing'

Значение: < length> < length>? | inherit
Начальное значение:
Область применения: элементы 'table' и 'inline-table'
Наследование: да
Процентное задание: не определено
Устройства: визуальные

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

В этой модели каждая ячейка имеет собственные границы. Свойство 'border-spacing' определяет расстояние между границами соседних ячеек. Это расстояние заполняется фоном элемента таблицы. У строк, столбцов, групп строк и групп столбцов не может быть границ (т.е. агенты пользователей должны игнорировать свойства границ для данных элементов).

Пример(ы):

Таблицу, представленную на рисунке ниже, можно создать с помощью следующей таблицы стилей:

TABLE { border: outset 10pt; border-collapse: separate; border-spacing: 15pt } TD { border: inset 5pt } TD.special { border: inset 10pt } /* Верхняя левая ячейка */

[D]

Таблица, в которой для свойства 'border-spacing' установлено определенное значение. Обратите внимание, что у каждой ячейки имеется собственная граница, а у таблицы отдельная граница.

Границы вокруг пустых ячеек: свойство 'empty-cells'

'empty-cells'

Значение: show | hide | inherit
Начальное значение: show
Область применения: элементы 'table-cell'
Наследование: да
Процентное задание: не определено
Устройства: визуальные

В модели с отдельными границами это свойство управляет представлением границ вокруг ячеек, не имеющих видимого содержимого. Считается, что видимого содержимого нет в пустых ячейках и ячейках, для которых свойству 'visibility' присвоено значение 'hidden'. Символы " & nbsp; " и другие символы, представляющие пустое пространство за исключением символов ASCII CR (" \0D" ), LF (" \0A" ), tab (" \09" ) и пробела (" \20" ), считаются видимым содержимым.

Если для этого свойства установлено значение 'show', вокруг пустых ячеек отображается граница (как вокруг обычных ячеек).

Значение 'hide' означает, что вокруг пустых ячеек не будет границ. Более того, если у всех ячеек в строке это свойство имеет значение 'hide', и ячейки не имеют видимого содержимого, вся строка будет выполняться согласно значению 'display: none'.

Пример(ы):

Согласно следующему правилу границы будут иметь все ячейки:

TABLE { empty-cells: show }

Стили границ

Смысл некоторых значений свойства 'border-style' применительно к таблице и к другим элементам различен. В приведенном ниже списке такие значения помечены звездочкой.

None

Граница отсутствует.

*hidden

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

Dotted

Граница представляется рядом точек.

Dashed

Граница представляется рядом коротких линейных сегментов.

Solid

Граница представляется единым сегментом линии.

Double

Граница представляется двумя сплошными линиями. Сумма толщины двух линий и расстояния между ними равно значению 'border-width'.

Groove

Граница выглядит вдавленной.

Ridge

В противоположность 'groove', граница выглядит выпуклой.

*inset

В модели с отдельными границами весь выглядит вдавленным. В модели с пересекающимися границами это значение дает тот же эффект, что и значение 'groove'.

*outset

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

Once

Заголовок произносится только один раз перед рядом ячеек.

Always

Заголовок произносится перед каждой ячейкой.

В каждом языке документа могут быть различные механизмы задания заголовков. Например, в HTML 4.0 ([HTML40]) информацию о заголовке можно представить с помощью трех различных атрибутов (" headers", " scope" и " axis" ). Кроме того, в этой спецификации дается алгоритм для определения заголовочной информации в случае, если эти атрибуты не указаны.

[D]

Таблица, в которой ячейки заголовка (" Сан-Хосе" и " Сиэттл" ) находятся вне столбца или строки данных, к которым они применяются.

В этом примере на языке HTML представлены затраты на питание, проживание в отеле и транспорт в двух городах (Сан-Хосе и Сиэтл) в течение нескольких дней. В принципе, таблицу можно рассматривать как n-мерное пространство. К заголовкам этого пространства относятся: город, день, категория и промежуточная сумма. Некоторые ячейки определяют отметки на оси, другие - расходы в этой точке пространства. Разметка таблицы выглядит так:

< TABLE> < CAPTION> Отчет о расходах на командировку< /CAPTION> < TR> < TH> < /TH> < TH> Питание< /TH> < TH> Гостиницы< /TH> < TH> Транспорт< /TH> < TH> сумма< /TH> < /TR> < TR> < TH id=" san-jose" axis=" san-jose" > Сан-Хосе< /TH> < /TR> < TR> < TH headers=" san-jose" > 25 авг. 97< /TH> < TD> 37.74< /TD> < TD> 112.00< /TD> < TD> 45.00< /TD> < TD> < /TD> < /TR> < TR> < TH headers=" san-jose" > 26 авг. 97< /TH> < TD> 27.28< /TD> < TD> 112.00< /TD> < TD> 45.00< /TD> < TD> < /TD> < /TR> < TR> < TH headers=" san-jose" > сумма< /TH> < TD> 65.02< /TD> < TD> 224.00< /TD> < TD> 90.00< /TD> < TD> 379.02< /TD> < /TR> < TR> < TH id=" seattle" axis=" seattle" > Сиэттл< /TH> < /TR> < TR> < TH headers=" seattle" > 27 авг. 97< /TH> < TD> 96.25< /TD> < TD> 109.00< /TD> < TD> 36.00< /TD> < TD> < /TD> < /TR> < TR> < TH headers=" seattle" > 28 авг. 97< /TH> < TD> 35.00< /TD> < TD> 109.00< /TD> < TD> 36.00< /TD> < TD> < /TD> < /TR> < TR> < TH headers=" seattle" > сумма< /TH> < TD> 131.25< /TD> < TD> 218.00< /TD> < TD> 72.00< /TD> < TD> 421.25< /TD> < /TR> < TR> < TH> ИТОГО< /TH> < TD> 196.27< /TD> < TD> 442.00< /TD> < TD> 162.00< /TD> < TD> 800.27< /TD> < /TR> < /TABLE>

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

Сан-Хосе, 25 авг. 97, Питание: 37.74 Сан-Хосе, 25 авг. 97, Проживание в гостинице: 112.00 Сан-Хосе, 25 авг. 97, Транспорт: 45.00...

Браузеры могут также произносить заголовки только при их смене:

Сан-Хосе, 25 авг. 97, Питание: 37.74 Проживание в гостинице: 112.00 Транспорт: 45.00 26 авг. 97, Питание: 27.28 Проживание в гостинице: 112.00...

 

Введение в таблицы CSS

Таблицы представляют отношения между данными. Авторы определяют эти отношения в языке документа и указывают способ их представления в CSS: визуальное или звуковое.

Авторы могут определять визуальное форматирование таблиц в виде прямоугольной сетки ячеек. Строки и столбцы ячеек могут объединяться в группы строк и группы столбцов. Вокруг строк, столбцов, групп строк, групп строк и ячеек могут быть видимые границы (в спецификации CSS2 представлено две модели границ). Внутри ячейки данные могут выравниваться по вертикали или по горизонтали. Кроме того, данные могут выравниваться во всех ячейках или столбцах.

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

Пример(ы):

Далее представлена таблица из трех строк и трех абзацев, описанная на языке HTML 4.0:

< TABLE> < CAPTION> Обычная таблица размером 3x3< /CAPTION> < TR id=" row1" > < TH> Заголовок 1 < TD> Ячейка 1 < TD> Ячейка 2< TR id=" row2" > < TH> Заголовок 2 < TD> Ячейка 3 < TD> Ячейка 4< TR id=" row3" > < TH> Заголовок 3 < TD> Ячейка 5 < TD> Ячейка 6< /TABLE>

В этом коде создается одна таблица (элемент TABLE), три строки (элементы TR), три ячейки заголовков (элементы TH) и шесть ячеек данных (элементы TD). Обратите внимание, что три столбца в этом примере указаны неявно: в таблице столько столбцов, сколько понадобится для ячеек заголовков и данных.

С помощью следующего правила CSS текст в ячейках заголовка выравнивается горизонтально по центру, а данные отображаются жирным шрифтом:

TH { text-align: center; font-weight: bold }

Следующие правила позволяют выровнять текст ячеек заголовков по базовой линии, а текст каждой ячейки данных - вертикально по центру:

TH { vertical-align: baseline }TD { vertical-align: middle }

Следующие правила определяют наличие сплошной линии границы синего цвета толщиной 3 пиксела вокруг верхней строки и сплошной границы черного цвета толщиной в 1 пиксел вокруг каждой из последующих строк:

TABLE { border-collapse: collapse }TR#row1 { border-top: 3px solid blue }TR#row2 { border-top: 1px solid black }TR#row3 { border-top: 1px solid black }

Следует помнить, однако, что границы вокруг строк могут перекрываться в местах пересечения строк. Какого цвета (черная или синяя) и толщины (1 пиксел или 3 пиксела) будет граница между строкой 1 и 2? Это обсуждается в разделе об устранении конфликтов между границами.

Согласно следующему правилу заголовок таблицы помещается над самой таблицей:

CAPTION { caption-side: top }

И наконец, следующее правило указывает, что при звуковом представлении таблицы каждая строка данных будет произноситься в формате " Заголовок, Данные, Данные":

TH { speak-header: once }

Например, первая строка будет произноситься в формате " Заголовок1 Ячейка1 Ячейка2". А в соответствии со следующим правилом:

TH { speak-header: always }

эта строка будет произноситься в формате " Заголовок1 Ячейка1 Заголовок1 Ячейка2".

В предыдущих примерах показано, как CSS влияет на элементы HTML 4.0; в HTML 4.0 семантика различных элементов таблицы (TABLE, CAPTION, THEAD, TBODY, TFOOT, COL, COLGROUP, TH и TD) определена строго. В других языках документов (например, в приложениях XML) элементы таблицы могут быть не определены заранее. Таким образом, спецификация CSS2 позволяет авторам " отображать" элементы языка документа на элементы таблицы с помощью свойства 'display'. Например, за счет следующего правила элемент FOO действует как элемент HTML TABLE, а элемент BAR работает как элемент CAPTION:

FOO { display: table }BAR { display: table-caption }

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

Модель таблиц 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'.

Пример(ы):

В этом примере для XML элемент 'table' может содержать элемент HBOX:

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

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

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

Пример(ф):


Поделиться:



Последнее изменение этой страницы: 2017-03-14; Просмотров: 321; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.117 с.)
Главная | Случайная страница | Обратная связь