При относительном позиционировании блока надо задать свойство position:relative и свойства смещения.
Смещение в этом случае будет происходить не относительно "родительского" элемента (как при абсолютном позиционировании), а
относительно самого блока в нормальном потоке. Это будет понятнее на примере. Пусть у нас есть html-страница с тремя div-ами:
Относительное позиционирование
Блок 1
Блок 2
Блок 3
Давайте зададим в таблице стилей размеры и границы этих блоков:
Наш второй блок сместился вниз и вправо относительно того места, где бы он находился в нормальном потоке.
Остальные же блоки остались на своих местах.
Практически относительное позиционирование применяется достаточно редко, поэтому мы не будем больше уделять этому внимание и
рассмотрим плавающие блоки.
Плавающие блоки
Эти блоки нельзя позиционировать с точностью до пиксела, как в предыдущих схемах, но именно эта схема позиционирования очень
распространенна. Без плавающих блоков обходится редкий сайт, а уж сделать "резиновую" верстку сайта без них и вовсе невозможно.
Такие блоки могут свободно перемещаться по странице, подобным образом ведут себя картинки в HTML, выровненные с помоьщью параметра
align.
Плавающие блоки определяются свойством float, который определяет будет ли блок плавающим и в какую сторону
он будет перемещаться. Возможны три варианта:
left - блок прижимается к левому краю, остальные элементы обтекают его с правой стороны.
right - блок прижимается к правому краю, остальные элементы обтекают его с левой стороны.
none - блок не перемещается и позиционируется согласно свойству position.
Давайте посмотрим на примере. Пусть у нас есть html-страница со следующим кодом:
Позиционирование блоков
Текст блока 1
Просто какие-то элементы на странице. Это может быть просто
текст, ссылки, списки, картинки и т.д.
Обратите внимание: сначала к правому краю прижмется блок 1, а уже к нему прижмется блок 2.
А что делать, если мы хотим, чтобы блоки были прижаты к правому краю, но располагались бы один под другим. Для этого существует
свойство clear, которое определяет, какие стороны плавающего блока не могут соседствовать с другими
плавающими блоками. У этог свойства может быть задано одно из четырех значений:
left - блок должен располагаться ниже всех левосторонних блоков.
right - блок должен располагаться ниже всех правосторонних блоков.
both - блок должен располагаться ниже всех плавающих блоков.
none - никаких ограничений нет, это значение по умолчанию.
Давайте в нашем последнем примере зададим это свойство для второго блока:
Сейчас наши блоки располагаются в нормальном потоке, т.е. один под другим.
Нам надо сделать блоки menu и content плавающими и левосторонними. А блок
news должен прижиматься к правому краю, т.е. его мы сделаем правосторонним плавающим блоком:
Посмотрим на наш блок новостей, видно, что он располагается ниже текста в блоке content. А ведь мы хотели,
чтобы блок новостей был справа, а текст обтекал бы его слева.
Почему же у нас так не получилось? Потому что наш
блок news в html-коде располагается ниже текста и его будет обтекать только тот текст, который расположен
ниже его. Чтобы исправить это надо поместить наш div="news" выше текста (т.е. до слова "контент"):
Позиционирование блоков
шапка сайта
меню
блок новостей
контент
Вот теперь наш блок новостей находится на своем месте:
А чтобы он не прижимался вплотную к верхнему и правому краям, мы добавим для этого блока значение полей:
Теперь мы добились такого же резельтата, как и при абсолютном позиционировании.
Согласитесь, что с помощью плавающих блоков верстать страницу проще: не надо рассчитывать пикселы, да и код короче. К тому же
при "резиновой" верстке мы и не можем указать точное расположение блока на экране, а с помощью плавающих блоков нам это и не
нужно, достаточно указать лишь ориентир (слева, справа, ниже или в той же линии).
Фиксированные блоки
Как вы помните при фиксированном позиционировании блок фиксируется относительно области просмотра.
В некотором смысле фиксированные блоки похожи на фреймы. Только внутри фрейма доступна прокрутка, а внутри блока нет.
У фиксированных блоков есть один существенный недостаток: они не поддерживаются браузерами Internet Explorer. А потому использовать
их пока не следует. Поэтому здесь мы лишь укажем синтаксис такого правила, если хотите попробуйте сами (например, в браузере Opera).
#blok{
position:fixed;
left:0px;
top:0px;
}
Блок с идентификатором "blok" будет при прокрутке страницы оставаться на месте.
На сегодня все. В следующем уроке мы познакомимся еще с некоторыми свойствами блоков и их видами.