Содержание
Таблицы представляют взаимоотношения между данными. Авторы специфицируют эти взаимоотношения на языке документа и их представление в CSS двумя методами - визуально и звуком.
Авторы могут специфицировать визуальное форматирование таблицы как прямоугольной сетки ячеек. Ряды и столбцы ячеек дозволено организовать в группы рядов и столбцов. Ряды, столбцы, группы рядов, группы столбцов и ячейки могут иметь вокруг себя порисованные рамки (в CSS2 есть две модели рамок). Авторы могут выровнять данные в ячейках по вертикали и по горизонтали и выровнять данные во всех ячейках ряда либо столбца.
Авторы могут также специфицировать звуковое представление таблицы: то, как заголовки и данные будут звучать. На языке документа авторы могут помечать лэйблами ячейки и группы ячеек так, что при звуковом отображении заголовки ячеек будут произноситься перед данными ячеек. Реально это "сериализует" таблицу: пользователи, прослушивающие таблицу, услышат последовательность заголовков и последующих данных.
Вот простая таблица из трёх рядов и трёх столбцов, написанная в HTML 4.0:
<TABLE> <CAPTION>Это простая таблица 3x3</CAPTION> <TR id="row1"> <TH>Header 1 <TD>Cell 1 <TD>Cell 2 <TR id="row2"> <TH>Header 2 <TD>Cell 3 <TD>Cell 4 <TR id="row3"> <TH>Header 3 <TD>Cell 5 <TD>Cell 6 </TABLE>
Этот код создаёт одну таблицу (элемент TABLE), три ряда (элементы TR), три заголовочных ячейки (элементы TH) и шесть ячеек данных (элементы TD). Обратите внимание, что три столбца в этом примере специфицированы неявно: в таблице столько столбцов, сколько затребовано заголовочными ячейками и ячейками данных.
Следующее правило CSS центрирует текст по горизонтали в заголовочных ячейках и выводит данные шрифтом, имеющим вес bold:
TH { text-align: center; font-weight: bold }
Следующее правило выравнивает текст заголовочных ячеек по их базовой линии и центрирует текст по вертикали в всей ячейке данных:
TH { vertical-align: baseline } TD { vertical-align: middle }
Следующие правила специфицируют, что верхний ряд будет окружён сплошной голубой рамкой толщиной 3px и всякий из других рядов будет окружён сплошной чёрной рамкой толщиной 1px:
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 }
Заметьте, впрочем, что рамки вокруг рядов перекрываются там, где ряды смыкаются. Какого цвета (чёрного либо голубого) и толщины (1px либо 3px) будет рамка между рядами row1 и row2? Мы обсудим это в разделе о разрешении раздоров рамок.
Следующее правило помещает заголовок таблицы над таблицей:
CAPTION { caption-side: top }
Наконец, следующее правило специфицирует, что при звуковом итоге всякий ряд данных произносится как "Заголовок, Данные, Данные":
TH { speak-header: once }
Например, 1-й ряд будет произнесён "Заголовок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 дозволяет авторам "map/отображать" элементы
языка документа в элементы таблицы через
качество 'display'.
Скажем, следующее правило принуждает
элемент FOO трудиться как элемент TABLE в HTML, а
элемент BAR - как элемент CAPTION:
FOO { display : table } BAR { display : table-caption }
Мы обсудим разные элементы таблицы в дальнейшем разделе. В данной спецификации термин элемент таблицы относится к любому элементу, участвующему в создании таблицы. "Внутренний" элемент таблицы это тот, тот, что изготавливает ряд, группу рядов, столбец, группу столбцов либо ячейку.
Табличная модель CSS основывается на табличной модели HTML 4.0, конструкция таблиц которой примерно параллельна визуальному представлению. В данной модели таблица состоит из необязательного заголовка и всякого числа рядов столбцов. О табличной модели говорится, что в ней "ряды первичны", от того что авторы очевидно специфицируют ряды, а не столбцы, в языке документа. Столбцы определяются позже того, как будут специфицированы все ряды - первая ячейка всего ряда принадлежит первому столбцу, вторая - второму столбцу и т.д.). Ряды и столбцы могут быть сгруппированы структурно, и это группирование отражается при представлении (скажем, рамка может быть прорисована вокруг группы рядов).
Таким образом, табличная модель состоит из таблиц, заголовков, рядов, групп рядов, столбцов, групп столбцов и ячеек.
Модель CSS не требует, дабы язык документа содержал элементы, соответствующие всему из этих компонентов. Для языков документов (таких как приложения XML), не имеющих предопределённых табличных элементов, авторы обязаны отображать элементы языка документа в элементы таблицы; это делается с подмогой свойства 'display'. Следующие значения 'display' назначают семантику таблицы произвольному элементу:
Элементы с '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. В таких случаях "отсутствующие" элементы обязаны учитываться, для того дабы табличная модель работала. Отсутствующие элементы генерируют анонимные объекты (скажем, неизвестные боксы при визуальном итоге таблицы) в соответствии со следующими правилами:
В этом примере XML принимается, что элемент 'table' содержит элемент HBOX:
<HBOX> <VBOX>George</VBOX> <VBOX>4287</VBOX> <VBOX>1998</VBOX> </HBOX>
поскольку ассоциированная таблица жанров:
HBOX { display: table-row } VBOX { display: table-cell }
В этом примере три элемента 'table-cell' содержат текст в ROWs/рядах. Подметьте, что текст дальше инкапсулируется в неизвестные инлайн-боксы, как разъясняется в модели визуального форматирования:
<STACK> <ROW>This is the <D>top</D> row.</ROW> <ROW>This is the <D>middle</D> row.</ROW> <ROW>This is the <D>bottom</D> row.</ROW> </STACK>
Таблица жанров:
STACK { display: inline-table } ROW { display: table-row } D { display: inline; font-weight: bolder }
От ПА HTML не требуется создавать неизвестные объекты в соответствии с вышеприведёнными правилами.
Ячейки таблиц могут принадлежать к двум контекстам: рядам и столбцам. Впрочем в документе-источнике ячейки являются потомками рядов и никогда - столбцов. Невзирая на это, некоторые аспекты ячеек могут вводиться установкой свойств столбцов.
Следующие свойства используются к элементам столбцов и групп столбцов:
Вот примеры некоторых правил таблиц
жанров, устанавливающих свойства столбцов.
Первые два правила совместно исполняют
признак "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 | inherit |
Начальное: | top |
Применяется: | к элементам 'table-caption' |
Наследуется: | да |
Процентное: | N/A |
Носитель: | визуальный |
Это качество специфицирует позицию бокса
заголовка касательно бокса таблицы.
Значения имеют дальнейший толк:
Заголовки сверху либо снизу от элемента 'table' форматируются абсолютно так же, как если бы они были элементами блока до и позже таблицы, за исключением того, что (1) они наследуют наследуемые свойства таблицы и (2) они не рассматриваются как бокс блока для целей элементов 'compact' либо 'run-in', которые могут предшествовать таблице.
Заголовок сверху либо снизу от бокса таблицы ведёт себя аналогично боксу блока и при расчётах ширины; ширина вычисляется касательно ширины бокса таблицы содержащего блока.
Для заголовков слева либо справа от бокса таблицы значение, хорошее от 'auto' для 'width', устанавливает ширину очевидно, но 'auto' уведомляет ПА, что надобно предпочесть "приемлемую ширину". Она может варьироваться от "самого тесного допустимого бокса" до "строки", следственно мы рекомендуем, дабы пользователи не специфицировали 'auto' для ширины левых и правых заголовков.
Чтобы выровнять
содержимое заголовка по горизонтали внутри
бокса заголовка, используйте качество 'text-align'.
Для вертикального выравнивания левых и
правых боксов заголовка касательно бокса
таблицы используйте качество 'vertical-align'. В этом
случае допустимы только значения 'top', 'middle' и 'bottom'.
Все другие значения рассматриваются как 'top'.
Здесь качество размещает заголовок под таблицей. Заголовок будет той же ширины, что и родитель таблицы, и текст заголовка будет выровнен по левому краю.
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 }
Принимая, что ширина таблицы поменьше доступной ширины, форматирование будет приблизительно таким:
Подобно иным элементам языка таблицы, внутренние элементы таблицы генерируют прямоугольные боксы с содержимым, заполнением и рамками. Впрочем они не имеют полей.
Визуальное представление этих боксов управляется прямоугольной нерегулярной сеткой из рядов и столбцов. Всякий бокс занимает целое число ячеек сетки, определяемое в соответствии с нижеследующими правилами. Эти правила не используются к HTML 4.0 либо больше ранним версиям HTML; HTML имеет свои личные ограничения на охват рядов и столбцов.
Примечание. Ячейки таблицы могут быть позиционированы касательно либо безусловно, но это не рекомендуется: позиционирование и всплывание удаляет бокс из прорисовки, влияя на выравнивание таблицы.
Вот два примера. 1-й - документ HTML:
<TABLE> <TR><TD>1 <TD rowspan="2">2 <TD>3 <TD>4 <TR><TD colspan="2">5 </TABLE>
<TABLE> <ROW><CELL>1 <CELL rowspan="2">2 <CELL>3 <CELL>4 <ROW><CELL colspan="2">5 </TABLE>
Вторая таблица сформатирована, как на правом рисунке. Впрочем представление таблицы HTML очевидно не определено HTML, и CSS не пытается определить его. ПА свободны в том, как отобразить её, скажем, как на левом рисунке.
Для того, дабы обнаружить фон для всякой ячейки таблицы, разные элементы таблицы дозволено представить себе как состоящие из шести накладывающихся слоёв. Фон, установленный в элементе, это один из слоёв, тот, что будет виден, только если слои над ним имеют прозрачный фон.
Самый нижний слой - цельный, представляющий каждый бокс таблицы. Аналогично иным боксам, он может быть прозрачным.
Следующий слой содержит группы столбцов. Группы столбцов - такой же высоты, как и таблица, но они не обязаны перекрывать всю таблицу по горизонтали.
Сверху над группами столбцов находятся области, представляющие боксы столбцов. Как и группы столбцов, столбцы - такой же высоты, как и таблица, но они не обязаны перекрывать всю таблицу по горизонтали.
Следом идёт слой групп рядов. Вся группа рядов - такой же ширины, как таблица. Все совместно группы рядов всецело перекрывают таблицу сверху вниз.
Предпоследний слой содержит ряды. Ряды также покрывают всю таблицу.
Самый верхний слой содержит ячейки. Как показано на рисунке, правда все ряды имеют идентичное число ячеек, не всякая ячейка может иметь специфицированное содержимое. Эти "пустые" ячейки прозрачны, что дозволят нижележащим слоям просвечивать.
В дальнейшем примере 1-й ряд содержит 4 ячейки, но 2-й ряд не содержит ячеек, и, таким образом, виден фон таблицы, исключая те места, где ячейка первого ряда захватывает и данный ряд. Дальнейший код HTML и правила жанров -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <STYLE type="text/css"> TABLE { background: #ff0; border-collapse: collapse } TD { background: 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>
может быть сформатирован так:
CSS не определяет "оптимальный" вид таблицы, от того что во многих случаях это дело вкуса. CSS не определяет ограничения того, как ПА обязан выводить таблицу. ПА могут применять всякий допустимый алгорифм и свободны выбрать скорость точности отображения, если только не выбран "алгорифм фиксированного итога ".
Значение: | auto | fixed | inherit |
Начальное: | auto |
Применяется: | к элементам 'table' и 'inline-table' |
Наследуется: | нет |
Процентное: | N/A |
Носитель: | визуальный |
Свойство 'table-layout'
контролирует алгорифм, применяемый для
итога ячеек, рядов и столбцов таблицы.
Значения имеют дальнейший толк:
Эти два алгорифма описаны ниже.
В этом (стремительном) алгорифме горизонтальный итог таблицы не зависит от содержимого ячеек; он зависит только от ширины таблицы, ширины столбцов и от рамок и заполнения ячеек.
Ширина таблицы может быть специфицирована очевидно свойством 'width'. Значение 'auto' (и для 'display: table', и для 'display: inline-table') обозначает применение алгорифма автоматического итога таблицы.
В алгорифме фиксированного итога ширина всякого столбца определяется так:
Ширина таблицы будет тогда огромнее значения свойства 'width' для элемента таблицы и суммарной ширины столбцов (плюс заполнение ячеек либо рамки). Если таблица шире, чем столбцы, оставшееся пространство должно быть равномерно распределено между столбцами.
При таком способе ПА может начать итог таблицы сразу, как только будет получен каждый 1-й ряд. Ячейки в последующих рядах не влияют на ширину таблицы. Любая ячейка, имеющая переполняющее содержимое, использует качество 'overflow' для определения того, сжимать ли переполняющее содержимое.
В этом алгорифме (требующем традиционно не больше 2-х шагов), ширина таблицы определяется шириной её столбцов (и промежуточных рамок). Данный алгорифм отражает поведение некоторых знаменитых ПА HTML на момент написания данной спецификации. От ПА не требуется исполнять данный алгорифм для определения конструкции таблицы в случае, если 'table-layout' - 'auto'. Они могут применять всякий иной алгорифм.
Этого алгорифма может оказаться неудовлетворительно, от того что он требует, дабы ПА имел доступ ко каждому содержимому таблицы до определения окончательной конструкции, и может затребовать больше одного шага.
Ширина столбцов определяется так:
Так же вычисляется "максимальная" ширина всей ячейки: после этого содержимое форматируется без обрывов строк, за исключением тех обрывов строк, которые указаны очевидно.
Это задаёт максимальную и минимальную ширину всякого столбца. Ширина столбцов влияет на окончательную ширину таблицы так:
Процентные значения ширины столбца являются относительными к ширине таблицы. Если таблица имеет 'width: auto', проценты дают лимитация ширины столбца, которое ПА должен попытаться вынести. (Видимо, это не неизменно допустимо: если ширина столбца '110%', лимитация не может быть исполнено.)
Примечание. В этом алгорифме ряды (и группы рядов) и столбцы (и группы столбцов) ограничивают и сами ограничены размерами содержащихся в них ячеек. Установка ширины столбца может неявно влиять на высоту ряда, и напротив.
Высота таблицы задаётся свойством 'height' элемента 'table' либо 'inline-table'. Значение 'auto' устанавливает, что высота является суммой высоты рядов плюс заполнение ячеек либо рамки. Всякие другие значения специфицируют высоту очевидно; таблица, таким образом, может быть выше либо короче, чем высота её рядов. CSS2 не специфицирует итог в тех случаях, когда специфицированная высота таблицы отличается от высоты содержимого, исключительно когда высота содержимого может перекрыть специфицированную высоту; либо как излишнее пространство должно распределиться между рядами для заполнения высоты таблицы; либо, если высота содержимого превосходит специфицированную высоту таблицы, должен ли ПА предоставить механизм прокрутки.
Примечание. Грядущие версии CSS могут специфицировать это.
Высота бокса элемента 'table-row' вычисляется однократно сразу позже приобретения ПАгентом всех ячеек ряда: это максимальная специфицированная рядом 'height' и минимальная высота (MIN), затребованная ячейками. Значение 'height' - 'auto' для 'table-row' обозначает, что вычисленная высота ряда - MIN. MIN зависит от высоты боксов ячеек и выравнивания бокса ячейки (дюже походит на вычисление высоты строчного бокса). CSS2 не определяет, к чему относятся процентные значения 'height', специфицированные для рядов и групп рядов таблицы.
В CSS2 высота бокса ячейки - это наивысшее из свойств 'height' ячеек таблицы и минимальная высота, желательная содержимым (MIN). Значение 'auto' для 'height' подразумевает вычисленное значение MIN. CSS2 не определяет, к чему относятся процентные значения 'height', когда они определены для ячеек таблицы.
CSS2 не специфицирует, как ячейки, захватывающие больше одного ряда, влияют на вычисление высоты рядов, за исключением того, что суммарная высота рядов обязана быть довольно огромный, дабы окружить ячейку, захватывающую ряды.
Свойство
'vertical-align'
всей ячейки таблицы определяет её
выравнивание в ряду. Содержимое всей
ячейки имеет baseline/базовую линию, top/верх,
middle/середину и bottom/низ, как и сам ряд.
В контексте таблиц значения 'vertical-align' имеют
дальнейший толк:
Базовая линия ячейки это базовая линия первого строчного бокса в ячейке. Если никакого текста нет, базовая линия - это базовая линия какого-нибудь объекта, отображаемого в ячейке либо, если такого объекта нет, - низ бокса ячейки. Наивысшее расстояние между верхом бокса ячейки и базовой линией всех ячеек, имеющих 'vertical-align: baseline', применяется для установки базовой линии ряда. Вот пример:
Боксы ячеек 1 и 2 выровнены по их базовым линиям. Бокс ячейки 2 имеет бóльшую высоту касательно базовой линии и следственно определяет базовую линию ряда. Подметьте, что если нет ни одного бокса ячейки, выровненного по базовой линии, у ряда не будет (не надобна) базовой линии.
Чтобы исключить неоднозначные обстановки, выравнивание ячеек происходит в дальнейшем порядке:
Боксы ячеек, которые поменьше, чем высота ряда, получают дополнительное заполнение вверху либо внизу.
Горизонтальное выравнивание содержимого ячейки в боксе ячейки специфицируется свойством 'text-align'.
Если значение свойства 'text-align' для больше чем одной ячейки в столбце установлено в<string>, содержимое этих ячеек выравнивается по вертикальной оси. Предисловие строки касается этой оси. Направление письма определяет, расположена строка слева либо справа от оси.
Выравнивание текста таким методом допустимо только тогда, когда текст входит на одну строку. Итог не определён, если содержимое ячейки занимает больше одной строки.
Если значение 'text-align' ячейки таблицы это строка, но строка не возникает в содержимом ячейки, то конец содержимого ячейки соприкасается с вертикальной осью выравнивания.
Заметьте, что строки не обязаны быть теми же самыми для всякой ячейки, правда, как водится, это и так.
CSS не предоставляет метода специфицировать смещение оси вертикального выравнивания касательно края бокса столбца.
Дальнейшая таблица жанров:
TD { text-align: "." } TD:before { content: "$" }
создаст столбец знаков бакса в дальнейшей таблице HTML:
<TABLE> <COL width="40"> <TR> <TH>Long distance calls <TR> <TD> 1.30 <TR> <TD> 2.50 <TR> <TD> 10.80 <TR> <TD> 111.01 <TR> <TD> 85. <TR> <TD> 90 <TR> <TD> .05 <TR> <TD> .06 </TABLE>
для выравнивания десятичной точки. Шутки ради, мы применяли псевдоэлемент :before для того, дабы вставить знак бакса перед всяким значением. Таблица может выглядеть так:
Long distance calls $1.30 $2.50 $10.80 $111.01 $85. $90 $.05 $.06
Свойство 'visibility' принимает значение 'collapse' для элементов ряда, группы рядов, столбца и группы столбцов. Это значение вызывает удаление целого ряда либо столбца с экрана, и пространство, типично занимаемое этим рядом либо столбцом, становится доступным для иного содержимого. Подавление ряда либо столбца не влияет, впрочем, на конструкцию таблицы. Это дозволяет динамически удалять столбцы либо ряды таблицы без форсирования реструктурирования таблицы для того, дабы учесть допустимые метаморфозы в столбцах.
Имеются две разные модели установки рамок ячейки таблицы в CSS. Одна огромнее подходит для так называемых раздельных рамок вокруг отдельных ячеек, иная подходит для рамок, которые протянулись от одного конца таблицы до иного. Многие жанры рамок могут получены с поддержкой такой модели, следственно почаще каждого - дело вкуса, какую модель применять.
Значение: | collapse | separate | inherit |
Начальное: | collapse |
Применяется: | к элементам 'table' и 'inline-table' |
Наследуется: | да |
Процентное: | N/A |
Носитель: | визуальный |
Это качество выбирает модель рамки таблицы. Значение 'separate' выбирает модель раздельных рамок. Значение 'collapse' выбирает модель сжимающихся рамок. Эти модели описаны ниже.
Значение: | <length> <length>? | inherit |
Начальное: | 0 |
Применяется: | к элементам 'table' и 'inline-table' |
Наследуется: | да |
Процентное: | N/A |
Носитель: | визуальный |
Размеры специфицируют расстояние, разделяющее рамки смежных таблиц. Если специфицирован один размер, он задаёт и горизонтальное, и вертикальное расстояние. Если специфицированы два, то 1-й задаёт расстояние по горизонтали, 2-й - по вертикали. Значения размеров не могут быть негативными.
В этой модели вся ячейка имеет собственную рамку. Качество 'border-spacing' специфицирует расстояние между рамками смежных ячеек. Это пространство заполняется фоном элемента таблицы. Ряды, группы рядов, столбцы и группы столбцов не могут иметь рамок (т.е. ПА обязаны игнорировать свойства рамки в таких элементах).
Таблица на рисунке может быть итогом такой таблицы жанров:
TABLE { border: outset 10pt; border-collapse: separate; border-spacing: 15pt } TD { border: inset 5pt } TD.special { border: inset 10pt } /* Верхняя левая ячейка */
Значение: | show | hide | inherit |
Начальное: | show |
Применяется: | к элементам 'table-cell' |
Наследуется: | да |
Процентное: | N/A |
Носитель: | визуальный |
В модели раздельных рамок данное качество управляет представлением рамок вокруг ячеек, не имеющих видимого содержимого. Пустые ячейки и ячейки со свойством 'visibility', установленным в 'hidden', рассматриваются как не имеющие видимого содержимого. Видимое содержимое включает " " и другие пробелы, за исключением ASCII-символов CR ("\0D"), LF ("\0A"), tab ("\09"), и space ("\20").
Если это качество имеет значение 'show', рамки прорисовываются вокруг пустых ячеек (как вокруг типичных ячеек).
Значение 'hide' указывает, что рамки вокруг пустых ячеек не будут прорисованы. Следственно, если все ячейки в ряду имеют значение 'hide' и не имеют видимого содержимого, каждый ряд ведёт себя так, как если бы он имел 'display: none'.
Следующее правило вызывает прорисовку рамок вокруг всех ячеек:
TABLE { empty-cells: show }
В модели сжимающихся рамок имеется возможность специфицировать рамки, окружающие все либо часть ячеек, рядов, групп рядов, столбцов и групп столбцов. Рамки для признака HTML "rule" могут быть специфицированы таким методом.
Рамки центрируются по линиям сетки между ячейками. ПА обязаны находить подходящее правило для округления при наличии нестандартного числа абстрактных единиц измерения (пикселов экрана, точек принтера).
Диаграмма внизу показывает, как взаимодействуют ширина таблицы, рамок, заполнение и ширина ячеек. Их отношения задаются дальнейшим уравнением, которое действует для всякого ряда таблицы:
row-width = (0.5 * border-width0) + padding-left1 + width1 + padding-right1 + border-width1 + padding-left2 +...+ padding-rightn + (0.5 * border-widthn)
Здесь n это число ячеек в ряду, а border-widthi относится к рамке между ячейками i и i + 1. Учтите только, что лишь половина из 2-х внешних рамок учитывается в ширине таблицы; иная половина этих 2-х рамок находится в области полей.
Обратите внимание, что в этой модели ширина таблицы включает половину ширины рамки таблицы. Также в этой модели таблица не имеет заполнения (но имеет поля).
В модели сжимающихся рамок, рамки всякого края всякой ячейки могут быть специфицированы свойствами рамки разных элементов, находящихся у этого края (ячеек, рядов, групп рядов, столбцов, групп столбцов и самой таблицы), и эти рамки могут различаться по ширине, жанру и цвету. Основным правилом является то, что у всего края выбирается самая "примечательная" рамка, за исключением тех случаев, когда происхождение жанра 'hidden' абсолютно отключает итог рамки.
Следующие правила определяют, какой жанр рамки "побеждает" в случае раздора:
Следующий пример иллюстрирует приложение с такими правилами приоритета. Данная таблица жанров:
TABLE { border-collapse: collapse; border: 5px solid yellow; } *#col1 { border: 3px solid black; } TD { border: 1px solid red; padding: 1em; } TD.solid-blue { border: 5px dashed blue; } TD.solid-green { border: 5px solid green; }
с этим HTML:
<P> <TABLE> <COL id="col1"><COL id="col2"><COL id="col3"> <TR id="row1"> <TD> 1 <TD> 2 <TD> 3 </TR> <TR id="row2"> <TD> 4 <TD class="solid-blue"> 5 <TD class="solid-green"> 6 </TR> <TR id="row3"> <TD> 7 <TD> 8 <TD> 9 </TR> <TR id="row4"> <TD> 10 <TD> 11 <TD> 12 </TR> <TR id="row5"> <TD> 13 <TD> 14 <TD> 15 </TR> </TABLE>
даст в результате что-либо подобное:
[D]
В дальнейшем примере показана таблица с горизонтальными линиями между рядами. Верх рамки таблицы установлен в 'hidden', дабы подавить верхний край рамки первого ряда. Это - выполнение признака "rules" HTML 4.0 (rules="rows").
TABLE[rules=rows] TR { border-top: solid } TABLE[rules=rows] { border-collapse: collapse; border-top: hidden }
В этом случае того же результата дозволено достичь без установки рамки 'hidden' в TABLE: путём адресации первого ряда отдельно. Какой способ выбрать - дело вкуса.
TR:first-child { border-top: none } TR { border-top: solid }
Вот иной пример спрятанных сжимающихся рамок:
HTML-источник:
<TABLE style="border-collapse: collapse; border: solid;"> <TR><TD style="border-right: hidden; border-bottom: hidden">foo</TD> <TD style="border: solid">bar</TD></TR> <TR><TD style="border: none">foo</TD> <TD style="border: solid">bar</TD></TR> </TABLE>
Некоторые значения 'border-style' имеют в таблице другой толк в сопоставлении с другими элементами. В дальнейшем списке они помечены звёздочкой.
Когда таблица читается синтезатором речи, отношения между ячейками данных и заголовочными ячейками обязаны быть выражены напротив, чем отношения вертикального и горизонтального выравнивания. Некоторые синтезаторы речи могут разрешать пользователям "перемещаться" в 2-мерном пространстве, давая таким образом возможность отображения пространственных соотношений. Если это нереально, таблица жанров обязана специфицировать, с какого места произносятся заголовки.
Значение: | once | always | inherit |
Начальное: | once |
Применяется: | к элементам. имеющим информацию "шапки" таблицы |
Наследуется: | да |
Процентное: | N/A |
Носитель: | звуковой |
Это качество специфицирует, произносятся
ли заголовки перед всякой ячейкой (данных),
либо только перед той ячейкой, которая
ассоциирована с иным заголовком.
Значения имеют дальнейший толк:
Каждый язык документов может иметь разные механизмы спецификации заголовков. Скажем, в HTML 4.0 ([HTML40]) дозволено специфицировать заголовочную информацию тремя разными признаками ("headers", "scope" и "axis"), и спецификация предоставляет алгорифм для определения заголовочной информации, когда эти признаки не специфицированы.
Этот пример HTML представляет денежный расчёт затрат на питание, гостиницу и транспорт в 2-х местах (San Jose и Seattle) на несколько дней. Концептуально Вы можете представлять таблицу в терминах n-размерного пространства. Заголовками этого пространства являются: место, день, категория и результат. Некоторые ячейки определяют метки по оси, а другие дают подсчёт денег в точке данного пространства. Вот разметка для этой таблицы:
<TABLE> <CAPTION>Travel Expense Report</CAPTION> <TR> <TH></TH> <TH>Meals</TH> <TH>Hotels</TH> <TH>Transport</TH> <TH>subtotal</TH> </TR> <TR> <TH id="san-jose" axis="san-jose">San Jose</TH> </TR> <TR> <TH headers="san-jose">25-Aug-97</TH> <TD>37.74</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">26-Aug-97</TH> <TD>27.28</TD> <TD>112.00</TD> <TD>45.00</TD> <TD></TD> </TR> <TR> <TH headers="san-jose">subtotal</TH> <TD>65.02</TD> <TD>224.00</TD> <TD>90.00</TD> <TD>379.02</TD> </TR> <TR> <TH id="seattle" axis="seattle">Seattle</TH> </TR> <TR> <TH headers="seattle">27-Aug-97</TH> <TD>96.25</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">28-Aug-97</TH> <TD>35.00</TD> <TD>109.00</TD> <TD>36.00</TD> <TD></TD> </TR> <TR> <TH headers="seattle">subtotal</TH> <TD>131.25</TD> <TD>218.00</TD> <TD>72.00</TD> <TD>421.25</TD> </TR> <TR> <TH>Totals</TH> <TD>196.27</TD> <TD>442.00</TD> <TD>162.00</TD> <TD>800.27</TD> </TR> </TABLE>
Представляя модель данных таким образом, авторы дают возможность браузерам с синтезом речи трудиться с таблицей разными методами, скажем, всякая ячейка может проговариваться как список с повторением соответствующих заголовков перед всей ячейкой данных:
San Jose, 25-Aug-97, Meals: 37.74 San Jose, 25-Aug-97, Hotels: 112.00 San Jose, 25-Aug-97, Transport: 45.00 ...
Браузер может также проговаривать ячейки, только если они изменяются:
San Jose, 25-Aug-97, Meals: 37.74 Hotels: 112.00 Transport: 45.00 26-Aug-97, Meals: 27.28 Hotels: 112.00 ...