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