В своё время, только начиная изучать азы 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>. Надо только не забыть,
что размеры ячейки должны совпадать с размерами изображения (тогда не появится
эффект "размножения" картинки или её "обрезания"),
размещенного в фон, а самостоятельное изображение должно быть значительно меньше
фонового, иначе теряется весь смысл подобного дизайна. Таким же образом можно
группировать изображение и текст, что небесполезно при дизайне, например, ссылок
(только в этом случае шрифт должен быть фиксированной величины). Не бесполезно
это и просто при использовании относительно больших законченных изображений
(например, групповых фотографий) в качестве фона... Конечно же, возможности
таблиц не безграничны, но и не до конца раскрыты. Я попробовал описать лишь
малую их часть в данной статье и, надеюсь, она принесет вам
пользу. Удачи!
Литература по Internet
|