В своё время, только начиная изучать азы Web-дизайна, я
столкнулся с проблемой смехотворной, но знакомой каждому начинающему
Web-мастеру: как расставить на странице все элементы так, чтобы они гармонично
сочетались и, при этом, не мешали друг другу.
Перейдя с места в карьер, я
стал использовать слои, но столкнулся с тем, что не все браузеры их
поддерживали, а значит, не могли правильно отформатировать мои страницы. Это
заставило меня уделить внимание таблицам.
Опыт, приобретенный в дальнейшем,
показал, что таблицы, при всей банальной простоте своего построения, не так уж и
просты. Ошибиться в форматировании страницы с помощью таблиц также легко, как и
строить их. При этом, ошибки дают о себе знать неожиданно, как бы исподтишка, в
разных браузерах по-разному. И приходится тратить массу времени для выявления и
устранения ошибки, так, чтобы не породить новую.
Тема данной статьи может
вызвать снисходительную улыбку у того, кто считает себя ассом в Web-дизайне, тем
не менее, я рассчитываю на внимание тех, кто только начал свой путь на этом
поприще, или всегда открыт для восприятия накопленного другими опыта.
1.
Таблицы как таковые.
Для начала, напомню самое простое: как создается
каркас таблицы. Все начинается с пары тегов TABLE: <TABLE></TABLE>.
Они имеют свои стандартные параметры ALIGN, BORDER, CELLSPACING, CELLPADDING,
WIDTH, которые отвечают за выравнивание таблицы относительно окна браузера, за
наличие рамки у таблицы, за расстояние между ячейками таблицы и отступы внутри
ячеек, за ширину таблицы (как в процентах, так и в пикселях). Далее следует пара
тегов, определяющих строку таблицы: <TR></TR> Стандартными
параметрами для строки являются ALIGN и VALIGN, отвечающие за выравнивание ячеек
внутри строки по горизонтали и по вертикали. Последняя пара тегов - это теги
самих ячеек: <TD></TD>. С теми же параметрами, что и у строки. Кроме
того, существуют еще и теги, позволяющие в самом коде делить таблицу на
соответствующие разделы: THEAD, TH, TBODY и TFOOT. При этом, ТН уже содержит в
себе форматирование, позволяющее выделять жирным и выравнивать по центру текст
заголовка таблицы. Правда, всё это имеет смысл, если таблица создается с целью
именно показать таблицу в HTML-документе. В самом простом варианте (с учётом
всех вышеуказанных тегов) табличный код выглядит вот так:
<TABLE
ALIGN=left BORDER=1 CELLSPACING=0 CELLPADDING=4
WIDTH=100%>
<THEAD>
<TR ALIGN=center
VALIGN=top>
<TH VALIGN=top
COLSPAN=3>Заголовок</TH>
</TR>
</THEAD>
<TBODY>
<TR
ALIGN=center VALIGN=top>
<TD ALIGN=center VALIGN=top>Ячейка
1</TD>
<TD ALIGN=center VALIGN=top>Ячейка
2</TD>
<TD ALIGN=center VALIGN=top>Ячейка
3</TD>
</TR>
</TBODY>
<TFO
OT>
<TR ALIGN=center VALIGN=top>
<TD ALIGN=center
VALIGN=top COLSPAN=3>Заключение</TD>
</TR
>
</TFOOT>
</TABLE>.
Всё это проще
простого, скажете Вы. И что здесь сложного и опасного?
Во-первых, опасность в
параметрах. Не все параметры стоит применять, так же, как и не все параметры из
тех, что следовало бы, мы применяем. Так, например, для тега TR не обязательно
применение параметров выравнивания. Однако они обязательны (!) для применения с
тегом TD. Также типичная ошибка, с тегами TR, TD и TH может не применяться
параметр WIDTH, однако он очень важен, так влияет на соответствие расположения
ячеек в таблице относительно друг друга и таблицы в целом.
Таким образом,
создавая таблицу, необходимо указать ширину самой таблицы (а иногда и её высоту
- для "благозвучности" дизайна), ширину строки и ячейки/ячеек, горизонтальное
выравнивание таблицы и ячейки, а также расстояние между ячейками и
внутри-ячеечные отступы. При этом ширина каждой ячейки в строке, если их
несколько, должна соответственно быть указанна так, чтобы их сумма
соответствовала ширине строки. Однако если указать ширину ячеек, но опустить
ширину строки, то может появиться неприятный эффект - "съедание" объектов
(например, кнопок HTML), расположенных в ячейках.
Прошу обратить внимание на
параметр COLSPAN, присутствующий в ячейках заголовка и заключения таблицы. Он
применяется, когда ячеек в строках больше одной и указывает, на ширину скольких
колонок растянется данная ячейка. Параметр, аналогичный ему и касающийся
количества "перекрываемых" строк, называется ROWSPAN. Пропуск этих параметров,
там, где они необходимы, является очень частой ошибкой и приводит к искажению
получаемого в браузере изображения.
Кроме основных параметров, в табличных
тегах могут применяться дополнительные, которые особенно не влияют на правильное
форматирование таблицы. Это стандартные HTML-параметры фонового цвета, цвета
рамки (основной, "светлой" и "темной"), параметры STYLE и CLASS каскадных таблиц
стилей. Здесь важно не ошибиться с использованием цветов и стилей, чтобы ваша
таблица выглядела гармонично и не колола глаза пестротой и неопрятностью
дизайна. Также, нужно учитывать, что Netscape Navigator по умолчанию использует
для оформления рамки таблицы объемную линию. Он может частично "покрасить" её в
указанный вами цвет, но не признает "светло-темного" варианта.
Во-вторых,
опасность скрывается в самих таблицах. Нередко, создавая дизайн страницы с
помощью таблицы, мы забываем, что ячейки намертво связаны друг с другом. Даже
COLSPAN/ROWSPAN не позволяют нам освободиться полностью от тех рамок, в которые
нас загоняют столбцы и строки таблицы. А ведь дизайн требует, чаще всего,
"вольного" расположения элементов на странице.
В этом случае необходимо
прибегнуть к "методу Матрёшки", при котором основная таблица является всего лишь
носителем других, функционально значимых таблиц, в которых и располагаются
элементы дизайна. На примере это выглядит следующим образом:
<TABLE
ALIGN=center BORDER=1 CELLSPACING=0 CELLPADDING=0 WIDTH=100%>
<TR
ALIGN=center VALIGN=top WIDTH=100%>
<TD VALIGN=top
COLSPAN=3>
<!-- Заголовок -- >
<TABLE ALIGN=center
BORDER=1 bordercolor=red CELLSPACING=0 CELLPADDING=0
WIDTH=90%>
<TR ALIGN=center VALIGN=top
WIDTH=100%>
<TD ALIGN=center VALIGN=top WIDTH=100%>Таблица в
заголовке</TD></TR>
</TABLE>
<!-- Конец
Заголовка -- >
</TD>
</TR>
<TR
ALIGN=center VALIGN=top WIDTH=100%>
<TD ALIGN=center VALIGN=top
WIDTH=33%>
<! -- Ячейка 1 -- >
<TABLE ALIGN=center
BORDER=1 bordercolor=blue CELLSPACING=0 CELLPADDING=0
WIDTH=90%>
<TR ALIGN=center VALIGN=top
WIDTH=100%>
<TD ALIGN=center VALIGN=top WIDTH=100%> Таблица в
средней части</TD></TR>
</TABLE>
<! --
Конец Ячейки 1 -->
</TD>
<TD ALIGN=center
VALIGN=top WIDTH=34%>Ячейка 2</TD>
<TD ALIGN=center
VALIGN=top WIDTH=33%>Ячейка 3</TD>
</TR>
<TR
ALIGN=center VALIGN=top>
<TD ALIGN=center VALIGN=top
COLSPAN=3>
<!-- Заключение -- >
<TABLE
ALIGN=center BORDER=1 bordercolor=green CELLSPACING=0 CELLPADDING=0
WIDTH=90%>
<TR ALIGN=center VALIGN=top
WIDTH=100%>
<TD ALIGN=center VALIGN=top WIDTH=100%>Таблица в
конце</TD></TR>
</TABLE>
<!-- Конец
Заключения --
>
</TD>
</TR>
</TABLE>
Такой
способ позиционирования элементов на Web-странице позволяет размещать объекты
относительно произвольно, так как функциональные таблицы "привязаны" только к
размеру и формату ячеек, в которых они находятся, но не зависят от размера и
формата основной таблицы в целом. Поэтому, при таком позиционировании, не
появляется эффекта растягивания, к примеру, колонки с кнопками и ссылками вслед
за удлинением центральной колонки Web-страницы при вставке в последнюю огромного
размера текста.
Кроме того, такой способ влияет, как ни странно, на
форматирование абзацев текстовых блоков на странице. Дело в том, что опыт
показывает - Netscape не понимает выравнивание JUSTIFY в ячейке таблицы. Для
этого в ячейке ему необходим тег <P ALIGN=JUSTIFY>. Но он также
отказывается понимать <P ALIGN=JUSTIFY>, если тег находится в ячейке,
которая оперирует параметром COLSPAN. "Матрёшка" спасает положение. Netscape не
переносит формат ячейки на таблицу, расположенную в ней, а рассматривает
последнюю как целиком самостоятельный элемент.
В "методе Матрёшки" необходимо
быть внимательным к тому, в каких единицах вы задаёте размер таблиц - в
процентах или в пикселях - и какое выравнивание вы при этом задали. Опять таки,
по причине своенравного характера Netscape'а. Иногда, размер внешней таблицы
необходимо указывать в пикселях, если вы хотите в последующем указать размеры
внутренних таблиц в процентах, а выравнивание обязательно должно быть
центральным. Иначе, может случиться так, что внутренняя таблица растянется на
огромное расстояние, безобразно исказив внешнюю таблицу и весь дизайн страницы в
целом. Вот простой пример:
1) <TABLE ALIGN="center"
WIDTH="100%">
2) <TABLE ALIGN="center"
WIDTH="600">
3) <TABLE ALIGN="left" WIDTH="600">
4)
<TABLE ALIGN="left" WIDTH="100%">
В первых трёх вариантах, при
указанных условиях, ничего страшного не произойдет. Однако в четвёртом, таблицу
растянет так, что её правый край вы не сможете увидеть вовсе!
2. Таблицы
и графика.
Таблицы являются незаменимым инструментом любого Web-дизайнера
для размещения графики на странице. Это уже аксиома. Так, используя таблицу,
можно сгруппировать отдельные графические файлы, выполняющие самостоятельные
функции, в законченное изображение, например заголовок.
Однако, размещение
графики в ячейках таблицы тоже может сопровождаться совершением целого ряда
ошибок.
Одной из самых распространенных ошибок является вставка рисунка в
ячейку таблицы без употребления параметра выравнивания тега <IMG>.
Собственно, когда рисунок расположен в ячейке один и не сопровождается ни
текстом, ни какими-либо иными объектами, это не важно. В противном случае,
отсутствие выравнивания становится заметным и может испортить весь
дизайн.
Дело в том, что тег рисунка (изображения) не наследует параметров
выравнивания ячейки, он только подчиняется им, как любой другой объект в ячейке.
Поэтому, например, при любом выравнивании в ячейке, текст обязательно "уйдет"
под изображение. Но вы же хотите, чтобы текст его "обтекал"? В данном случае,
необходимо указать в теге IMG параметр выравнивания ALIGN равный LEFT или RIGHT.
Тогда изображение будет мягко "окружено" текстом.
Также имеет смысл указать
параметры вертикального и горизонтального отступов от изображения VSPACE и
HSPACE, так как отступы, заданные для ячейки также не наследуются.
В
некоторых случаях, необходимо, чтобы часть текста выводилась сбоку от
изображения, а остальная уходила под него. При этом, "водораздел" должен быть
очень хорошо заметен.
В этом случае, используются два варианта. Либо в теге
<BR> используется параметр CLEAR=LEFT или CLEAR=RIGHT соответственно, и в
этом случае часть текста после тега <BR> будет уходить под изображение, а
в выравнивании последнего можно использовать свойство MIDDLE, либо, используя,
опять таки, табличные ячейки, поместить изображение в одну, "боковой" текст в
соседнюю, а "нижний" - соответственно, в ячейку, расположенную в нижестоящей
строке и развернутую на всю эту строку (COLSPAN=2). Разумеется, последний способ
громоздок, зато гарантировано, что подобное размещение правильно интерпретирует
любой браузер, понимающий таблицы.
Второй распространенной ошибкой является
несоответствие размеров ячеек с размерами вставляемого изображения. Это опасно,
когда размеры изображения превышают размеры ячейки. В этом случае ячейка
безжалостно растягивается, что, безусловно, влияет на расположение соседних
элементов на странице. Например, использование графической линии в качестве
разделительной черты, вместо <BR>, без согласования с размерами
ячейки-<носителя>, может привести к искажению размеров всей таблицы. Избежать
этого, конечно же, можно только согласованием размеров.
Кроме ошибок, часто
допускается невнимание к стандартным возможностям табличных тегов. Например, кто
из вас серьезно задумывался над возможностями параметров фона, которые, кстати,
поддерживаются и строками, и ячейками? Конечно, с помощью BGCOLOR можно задать
цвет таблицы, строки и ячейки, как вместе, так и по отдельности. С помощью
BACKGROUND можно вставить изображение в качестве фона. В этом случае оно будет
заполнять всю площадь ячейки, строки, таблицы. Тут-то и начинается самое
интересное.
Мы можем вставить в одну ячейку два различных самостоятельных
изображения, одно поверх другого, создав иллюзию их послойного размещения. Одно
будет задано параметром BACKGROUND тега <TD>, а другое тегом <IMG>.
Надо только не забыть, что размеры ячейки должны совпадать с размерами
изображения (тогда не появится эффект "размножения" картинки или её
"обрезания"), размещенного в фон, а самостоятельное изображение должно быть
значительно меньше фонового, иначе теряется весь смысл подобного
дизайна.
Таким же образом можно группировать изображение и текст, что
небесполезно при дизайне, например, ссылок (только в этом случае шрифт должен
быть фиксированной величины). Не бесполезно это и просто при использовании
относительно больших законченных изображений (например, групповых фотографий) в
качестве фона...
Конечно же, возможности таблиц не безграничны, но и не до
конца раскрыты. Я попробовал описать лишь малую их часть в данной статье и,
надеюсь, она принесет вам пользу.
Удачи!
Автор: Дмитрий М. Сагайдак