Фиксированный дизайн. Размещение трех колонок


Альтернативный подход к созданию макета из трех колонок с помощью слоев состоит в использовании методов позиционирования. Сюда входит применение параметра position совместно с параметрами left и top. Аналогично верстке двумя колонками разделяют два подхода: с абсолютным и относительным позиционированием элементов.


Абсолютное позиционирование

При абсолютном размещении слоев их положение жестко фиксируется относительно левого верхнего угла окна браузера и не меняется при изменении его размеров. Надо учитывать, что один слой может накладываться на другой, перекрывая его содержимое. Поэтому следует учитывать размеры слоев и их позицию с тем, чтобы нужная информация была видна.

Основное достоинство абсолютного позиционирования — в удобстве определения местоположения элементов. Это напоминает аппликацию, когда мы точно знаем, куда и как надо поместить нужный фрагмент картины.

К недостаткам данного подхода можно отнести недостаточную гибкость и строгую привязку к координатной сетке. Чтобы пристроить любой элемент, необходимо точно знать расстояние от него до края браузера по горизонтали и вертикали, что не всегда можно определить. Поэтому приходится прибегать к помощи скриптов на языке JavaScript, позволяющих вычислять нужную дистанцию, а это приводит к усложнению кода. Несмотря на описанные особенности, в определенных ситуациях указанный метод вполне резонно применять.

Рассмотрим как создать три колонки, как показано на рис. 1, используя абсолютное позиционирование.

Рис. 1. Пример создания трех колонок

Рис. 1. Пример создания трех колонок

В модульной сетке на рис 1. задействовано шесть слоев, выделенных разным цветом. Стиль данного макета можно условно поделить на две части — первая часть описывает оформление и вид элементов, а вторая — их положение. Заголовки к каждому блоку назовем title1, title2, title3, где число обозначает номер колонки, а col1, col2, col3 — соответственно названия самих колонок с текстом. Местоположение слоев задается параметрами left и top, которые определяют расстояние по горизонтали и вертикали от левого верхнего угла окна браузера до левого верхнего угла слоя. Значения этих параметров указываются с учетом ширины слоев и расстояния между ними. При этом обязательно в стиль слоя для атрибута position следует добавить значение absolute (пример 1).

Пример 1. Использование абсолютного позиционирования
<html>
<head>
<style>

#title1, #title2, #title3, #col1, #col2, #col3 { /* 1 */

font-family: Verdana, Arial, sans-serif;
font-weight: bold;
font-size: 80%;
color: white;
width: 200px;
border: 1px solid black;
position: absolute

}

#col1, #col2, #col3 { /* 2 */

font-family: "Times New Roman", Times, serif;
font-size: 100%;
font-weight: normal;
color: black

}

/* Цвет фона каждого слоя */

#title1 { background: #B38541 }
#title2 { background: #008159 }
#title3 { background: #006077 }

#col1 { background: #EBE0C5 }
#col2 { background: #BBE1C4 }
#col3 { background: #ADD0D9 }

/* Положение каждого слоя */

#title1 { left: 20px; top: 30px }
#title2 { left: 225px; top: 30px }
#title3 { left: 430px; top: 30px }

#col1 { left: 20px; top: 60px }
#col2 { left: 225px; top: 60px }
#col3 { left: 430px; top: 60px }

P {

margin: 5px

}

</style>
</head>

<body>

<div id=title1><p>Чебурашка</p></div>
<div id=title2><p>Гена</p></div>
<div id=title3><p>Шапокляк</p></div>

<div id=col1><p>Отряд мягкотелых, семейство лопоухих.<br>Это безобидное пушистое животное ныне находится на грани исчезновения, вследствие неправомерных действий людей охотившихся на чебурашек из-за их ценного меха и вкусного питательного мяса.</p></div>
<div id=col2><p>Отряд длинномордых, семейство зеленых.<br>Хищник. Охотится на охотников, охотившихся за чебурашками. Ошибочно причисляется некоторыми авторами к отряду земноводных. Не имеет ничего общего с крокодилами.</p></div>
<div id=col3><p>Отряд бабок, семейство вонючевредных.<br>Очень опасное существо из-за особенностей развития в пубертарном периоде. Является симбионтом с животным crysa larisa.</p></div>

</body>
</html>

Стиль, обозначенный единицей, устанавливает параметры оформления заголовков, а также ширину всех слоев и тип позиционирования. Стиль, отмеченный двойкой, определяет шрифт и его начертание для основного текста. Цвет для каждого слоя и его положение задается отдельно.

Обратите внимание, что в каждом слое текст находится внутри параграфа (тег P). Такая конструкция необходима для создания полей от текста до края слоя и корректного отображения в разных браузерах. Если поместить параметр padding в стиль каждого слоя, управляя, таким образом, величиной полей, то в браузерах Opera и Netscape стройность макета будет нарушена, и слои начнут <налезать> друг на друга. Именно по этой причине нужно размещать тег P внутри каждого слоя и задавать ему параметр margin, вместо привычного padding.


Относительное позиционирование

При относительном позиционировании слои привязаны друг к другу, но их общее положение на странице может быть любым. Тем самым макет допустимо размещать по центру страницы или выравнивать по одному из краев браузера. Это дает широкие возможности по созданию веб-страниц. Фактически, верстка на основе слоев построена преимущественно на использовании относительного позиционирования элементов.

При создании двух колонок, левому слою необходимо задать абсолютное положение, а правому — относительное. Это наиболее универсальный подход, который гарантирует, что слои будут позиционированы правильно относительно друг друга и окна браузера. Обязательно следует сместить второй слой по горизонтали с помощью параметра left на величину, равной ширине левого слоя. В противном случае слои будут накладываться друг на друга.

Описанный метод работает только с двумя колонками и добавление третьей колонки приводит к смещению слоя. Результат получается совершенно невостребованным. Чтобы поправить положение, необходимо снова вернуться к двум колонкам. Для этого следует объединить две левые колонки, поместив их внутрь дополнительного слоя. Результат манипуляций показан на рис. 2.

Рис. 2. Способ размещения слоев

Вновь созданный слой с именем tr выступает в роли одной колонки, поэтому можно воспользоваться тем же методом, что и в случае макета с двумя слоями. А именно, для слоя tr следует задать абсолютное положение, а для слоя col3 — относительное. Схема вложенности слоев и способ позиционирования приведены в примере 2.

Пример 2. Размещение слоев для создания трех колонок
<div id=tr style="position: absolute">
   <div id=col1 style="position: absolute">...</div>
   <div id=col2 style="position: relative">...</div>
</div>

<div id=col3 style="position: relative">...</div>

Смещение слоев по горизонтали и вертикали относительно друг друга управляется аргументами параметров left и top и зависит от ширины колонок и пробелов между ними (пример 3).

Пример 3. Использование относительного позиционирования
<html>
<head>
<style>

#title1, #title2, #title3, #col1, #col2, #col3 { /* 1 */

font-family: Verdana, Arial, sans-serif;
font-weight: bold;
font-size: 80%;
color: white;
width: 200px;
border: 1px solid black;

}

#col1, #col2, #col3 { /* 2 */

font-family: "Times New Roman", Times, serif;
font-size: 100%;
font-weight: normal;
color: black;

}

#col1, #title1 { /* 3 */

position: absolute;

}

#col2, #title2 { /* 4 */

position: relative;
left: 205px;

}

#col3, #title3 { /* 5 */

position: relative;
left: 410px;

}

#col1, #col2, #col3 { /* 6 */

top: 5px;

}

#tr { /* 7 */

position: absolute;

}

P { /* 8 */

margin: 5px;

}

/* Цвет фона каждого слоя */

#title1 { background: #B38541 }
#title2 { background: #008159 }
#title3 { background: #006077 }

#col1 { background: #EBE0C5 }
#col2 { background: #BBE1C4 }
#col3 { background: #ADD0D9 }

</style>
</head>

<body>

<div id=tr>
<div id=title1><p>Чебурашка</p></div>
<div id=title2><p>Гена</p></div>
</div>
<div id=title3><p>Шапокляк</p></div>

<div id=tr>
<div id=col1><p>...</p></div>
<div id=col2><p>...</p></div>
</div>
<div id=col3><p>...</p></div>

</body>
</html>

Стили, обозначенные номерами 1 и 2, управляют оформлением колонок и заголовков, а также их шириной. Стили с 3 по 5 задают положение колонок относительно друг друга. Стиль с номером 6 регулирует расстояние между блоком заголовка и блоком текста под ним. Параграф (стиль 8) необходимо добавлять по причинам, описанным выше. Так же, как и при абсолютном позиционировании, браузеры Opera и Netscape без этого стиля начнут перекрывать слои между собой.



Предыдущая статья     Следующая статья     Список статей