Таблицы
В версию 3.2 языка HTML включен хорошо разработанный набор элементов из
спецификации , который может использоваться для разметки
табличных материалов, либо при осуществлении еще более сложных вариантов разметки.
Заметим, что в последнем случае обычно возникают проблемы при работе с браузерами,
ориентированными на голосовой интерфейс, а также с браузерами, работающими
исключительно в текстовом режиме.
<!-- horizontal placement of table relative to window --> <!ENTITY % Where "(left|center|right)"> <!-- horizontal alignment attributes for cell contents --> <!ENTITY % cell.halign "align (left|center|right) #IMPLIED" > <!-- vertical alignment attributes for cell contents --> <!ENTITY % cell.valign "valign (top|middle|bottom) #IMPLIED" > <!ELEMENT table - - (caption?, tr+)> <!ELEMENT tr - O (th|td)*> <!ELEMENT (th|td) - O %body.content> <!ATTLIST table -- table element -- align %Where; #IMPLIED -- table position relative to window -- width %Length #IMPLIED -- table width relative to window -- border %Pixels #IMPLIED -- controls frame width around table -- cellspacing %Pixels #IMPLIED -- spacing between cells -- cellpadding %Pixels #IMPLIED -- spacing within cells -- > <!ELEMENT CAPTION - - (%text;)* -- table or figure caption --> <!ATTLIST CAPTION align (top|bottom) #IMPLIED > <!ATTLIST tr -- table row -- %cell.halign; -- horizontal alignment in cells -- %cell.valign; -- vertical alignment in cells -- > <!ATTLIST (th|td) -- header or data cell -- nowrap (nowrap) #IMPLIED -- suppress word wrap -- rowspan NUMBER 1 -- number of rows spanned by cell -- colspan NUMBER 1 -- number of cols spanned by cell -- %cell.halign; -- horizontal alignment in cells -- %cell.valign; -- vertical alignment in cells -- width %Pixels #IMPLIED -- suggested width for cell -- height %Pixels #IMPLIED -- suggested height for cell -- >
В общем случае таблицы имеют следующий вид:
<TABLE BORDER=3 CELLSPACING=2 CELLPADDING=2 WIDTH="80%"> <CAPTION> ... заголовок таблицы ... </CAPTION> <TR><TD> первая клетка таблицы <TD> вторая клетка
<TR> ... ... </TABLE>
У элемента TABLE нет обязательных атрибутов. По умолчанию таблица
печатается без рамки. Разметка таблицы в общем случае осуществляется автоматически в
соответствии с объемом содержащейся в ней информации, однако у автора всегда имеется
возможность самому выбрать ширину таблицы, воспользовавшись атрибутом
WIDTH. Дополнительный контроль над процессом разметки (таблицы)
достигается также через атрибуты BORDER, CELLSPACING и
CELLPADDING. Заголовки таблицы (CAPTION) выравниваются по
верхнему или нижнему краю таблицы в зависимости от атрибута ALIGN.
В таблице каждый ряд ячеек содержит открывающий тэг элемента TR, хотя
соответствующий закрывающий тэг всегда может быть опущен. Отдельные клетки таблицы
размечаются элементом TD, если это данные, и элементом TH,
если это заголовки. Как и в случае с TR, эти элементы являются
контейнерами и могут быть записаны без указания закрывающего тэга. Элементы
TH и TD могут иметь несколько атрибутов: ALIGN
и VALIGN для выравнивания содержимого ячейки, ROWSPAN и
COLSPAN для нестандартных ячеек, простирающихся на несколько рядов или
колонок. В отдельной ячейке таблицы можно размещать самые разнообразные элементы
разметки как блочного, так и текстового уровня, включая поля заполняемых форм и даже
целые новые таблицы.
Для элемента TABLE всегда необходимо указывать как начальный, так и
конечный тэги. При этом разрешается использовать следующие атрибуты:
align
Данный атрибут принимает одно из следующих значений: LEFT,
CENTER или RIGHT (используемый при этом регистр значения не
имеет). Указывает для текущей таблицы, каким образом при разметке осуществляется ее
горизонтальное выравнивание. По умолчанию выполняется выравнивание таблицы по левой
границе листа, однако это правило можно переопределить посредством элементов
href="#div">DIV или .
width
В отсутствии данного атрибута ширина таблицы определяется автоматически в
соответствии с объемом содержащегося в ней материала. Однако посредством атрибута
WIDTH вы можете сами задать ширину таблицы либо в пикселах (например
WIDTH=212), либо как процент от расстояния между левой и правой границами
экрана (например WIDTH="80%" ).
border
Этот атрибут позволяет задавать для таблицы ширину внешней рамки - в пикселах
(например, BORDER=4). Данному атрибуту может быть также присвоено
значение нуль, чтобы полностью отказаться от внешней рамки. Рамка таблицы не рисуется
также, если атрибут border вообще отсутствует в разметке. Заметим, что
некоторые из браузеров способны воспринимать также конструкцию <TABLE
BORDER>, считая ее семантически эквивалентной атрибуту
BORDER=1.
cellspacing
В традиционных настольных издательских системах смежные ячейки в таблице имеют
общую границу. В языке HTML это не так. Каждая ячейка имеет собственную границу,
отделенную промежутком от границ соседних ячеек. Ширину этого промежутка в писелах
можно устанавливать посредством атрибута CELLSPACING, (например
CELLSPACING=10). То же самое значение определяет расстояние между общей
границей таблицы и границами крайних ячеек.
cellpadding
Данный атрибут устанавливает для каждой ячейки в таблице расстояние в пикселах
между рамкой ячейки и содержащимся в ней материалом.
Элемент CAPTION может иметь только один атрибут - ALIGN,
который может принимать два значения: ALIGN=TOP или
ALIGN=BOTTOM. Посредством этого атрибута можно выбирать, помещать ли
заголовок над таблицей или, соответственно, под ней. Большинство браузеров по
умолчанию ставит заголовок над таблицей. Для элемента CAPTION необходимо
всегда указывать начальный и конечный тэги. Содержание заголовка должно ограничиваться
простым текстом и элементами текстового уровня, задаваемыми объектом %text.
Использование блочных элементов в этом случае недопустимо.
Для TR - элемента, начинающего новый ряд таблицы - необходимо
указывать начальный тэг, однако всегда можно опустить конечный тэг. Элемент
TR выступает в роли контейнера для ячеек таблицы и может иметь два
атрибута:
align
Устанавливает стиль горизонтального выравнивания для содержимого ячейки, который
будет использоваться по умолчанию. Атрибут может принимать одно из следующих значений
(независимо от используемого регистра): LEFT, CENTER или
RIGHT и выполняет ту же самую роль, что и атрибут ALIGN при
разметке параграфов.
valign
Данный атрибут может использоваться при выборе правила, согласно которому - если
нет других указаний - будет осуществляться вертикальное выравнивание во всех ячейках
данной строки. Атрибут может принимать одно из следующих значений (независимо от
используемого регистра): TOP, BOTTOM или
MIDDLE. При этом содержимое ячейки будет, соответственно, выравниваться
по ее верхнему или нижнему краю, либо посередине.
Для разметки таблицы на уровне ячеек предусмотрено уже два элемента: элемент
TH используется для разметки заголовков, а TD - для ячеек с
данными. Такое разграничение позволяет программам пользователей оформлять заголовок
таблицы и данные разными шрифтами, а кроме того улучшает работу браузеров,
использующих речевой интерфейс. Для элементов TH и TD всегда
необходимо указывать начальные тэги, конечные же всегда могут быть опущены. При
разметке ячеек таблицы могут использоваться следующие атрибуты:
nowrap
В присутствии этого атрибута блокируется автоматический перенос слов в пределах
текущей ячейки (например в случае <TD NOWRAP>). Действие этого
атрибута эквивалентно использованию в ячейке объектов ,
создающих неотменяемые пробелы.
rowspan
Данный атрибут имеет значением положительное целое число, определяющее количество
рядов, на которые простирается данная ячейка. Этому атрибуту по умолчанию
присваивается значение 1.
colspan
Данный атрибут имеет значением положительное целое число, определяющее количество
колонок, на которые простирается данная ячейка. По умолчанию атрибуту присваивается
значение 1.
align
Определяет выполняемое по умолчанию правило горизонтального выравнивания для
содержимого текущей ячейки, тем самым отменяя действие атрибута ALIGN,
задаваемого при общей разметке текущего ряда ячеек. При этом используются все те же
самые значения: LEFT, CENTER и RIGHT. Если
атрибут ALIGN для данной ячейки не был указан, то по умолчанию для
элементов <td> выполняется выравнивание по левому краю, а для
элементов <th> - центрирование. Напомним, что вы можете отменить
это правило, задав трубуемый атрибут ALIGN в элементе TR.
valign
Определяет способ вертикального выравнивания для содержимого текущей ячейки,
отменяя тем самым действие атрибута VALIGN, заданного при общей разметке
данного ряда таблицы. Использует при этом те же самые значения: TOP,
MIDDLE и BOTTOM. Если для данной ячейки атрибуту VALIGN вы
не присвоили какого-либо значения, то по умолчанию для нее осуществляется выравнивание
по центру. Те не менее вы можете изменить такое правило, задав нужный атрибут
VALIGN в элементе TR.
width
Задает ширину площадки, отводимой под содержимое данной ячейки, в пикселах и без
учета ширины границ. Как правило, при разметке будет использоваться предложенное здесь
значение за исключением тех случаев, когда оно начинает вступать в противоречие с
минимальной шириной остальных ячеек в той же самой колонке.
height
Задает высоту площадки, отводимой под содержимое данной ячейки, в пикселах и без
учета ширины границ. Как правило, при разметке будет использоваться предложенное здесь
значение за исключением тех случаев, когда оно начинает вступать в противоречие с
минимальной высотой других ячеек в той же самой колонке.
Таблицы обычно рисуются в виде некой рельефной поверхности, приподнимающейся над
поверхностью листа и имеющей внешние скошенные края. Далее на этой поверхности
размещаются уже отдельные ячейки таблицы. Границы вокруг конкретной ячейки рисуются
только в том случае, если она имеет некое содержание. Пустые ячейки в разметке не
участвуют за исключением случаев, когда в них используется объект .
Описанные алгоритмы, используемые для автоматического определения размеров таблиц,
должны учитывать минимальные и максимальные требования к ширине со стороны каждой
ячейки. Эти ограничения затем используются при определении минимальной и максимальной
ширины каждой колонки и далее - для всей таблицы в целом.
Ячейки, охватывающие несколько колонок, вносят вклад в ширину каждой из них. При
этом один из возможных алгоритмов состоит в том, чтобы равномерно распределить
минимальную и максимальную ширину данной ячейки между этими колонками, другой
заключается в распределении пропорционально вкладам в ширину колонок от остальных
обычных одинарных ячеек.
В некоторых пользовательских программах бывает необходимо или может быть желательно
делать перенос строки посреди слова. В подобных случаях должна ставиться видимая
метка, уведомляющая о том, что это произошло.
Минимальная и максимальная ширина вложенных таблиц дает вклад в минимальную и
максимальную ширину ячейки, куда они помещены. Как только ширина для таблицы верхнего
уровня становится известной, в ней может быть произведен расчет колонок. Далее
появляется возможность назначить ширину для вложенных таблиц и, следовательно,
рассчитать ширину колонок и для них. Если это возможно, всем колонкам должна
назначаться по крайней мере их минимальная ширина. При этом предлагается, что
оставшееся после этой процедуры свободное место будет также распределено между
колонками, но уже пропорционально разнице между максимальной и требуемой минимальной
шириной каждой из них.
Заметим, что указываемые в пикселах ширина и высота относятся к изображению на
экране и должны умножаться на определенный множитель при подготовке к печати на
устройствах с очень высоким решением (таких как лазерные принтеры). Например, если
программа пользователя выводит изображение на дисплей с разрешением 75 пикселов на
дюйм и при этом печатает его же на лазерном принтере с разрешением 600 точек в дюйм,
то в последнем случае значения в пикселах, заданные в атрибутах разметки HTML, должны
быть умножены на 8.