htmlbook.ru - Для тех, кто делает сайты
Статьи Книги Шаг за шагом Рецепты Форум Графика для Web
Главная страница > Статьи > Верстка с помощью слоев > Резиновый дизайн. Двухколонный макет

Резиновый дизайн. Двухколонный макет

Влад Мержевич

Текстовая версия   Добавить комментарий

«Резиновым дизайном» будем называть структуру веб-страницы, которая автоматически приспосабливается под определенную ширину окна браузера пользователя. Такой макет имеет несколько преимуществ:

Среди недочетов можно отметить придирчивость разных браузеров к «резиновому» макету и большая вероятность появления ошибок. В связи с чем повышается сложность верстки веб-страниц.

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

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

Рис. 1а Рис. 1б Рис. 1в
а. две колонки б. три колонки в. четыре колонки

Рис. 1. Варианты размещения колонок

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

Использование плавающих элементов

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

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

Табл. 1. Левая колонка заданной ширины
Для левого слоя шириной 20%
Слой 1

float: left
width: 20%
Слой 2

margin-left: 21%
Для левого слоя шириной 200px
Слой 1

float: left
width: 200px
Слой 2

margin-left: 210px

Для первого слоя требуется всего два параметра: float — заставляет второй слой располагаться рядом по горизонтали с первым слоем и width, который устанавливает ширину колонки. Вторая колонка будет занимать все оставшееся место, поэтому для нее атрибут width не требуется.

Правый слой характеризуется лишь одним параметром — margin-left, он смещает левый край колонки на ширину левого слоя, плюс задает отступ между колонками. Поэтому величина этого свойства в табл. 1 указана 21%, где 20% сама ширина первого слоя, а на один процент приходится расстояние между колонками. В случае задания ширины одной из колонок в пикселах, код останется прежним, но поменяются единицы измерения.

В примере 1 приводится код веб-страницы, на которой содержится: заголовок, две колонки и контактная информация. Ширина первой колонки с именем menu фиксирована и установлена как 100 пикселов, оставшееся пространство занято колонкой с именем content.

Пример 1. Код для создания двух колонок

Валидный HTML
Валидный CSS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Две колонки</title>
<style type="text/css">
BODY {
font-family: Verdana, Arial, sans-serif; /* Рубленый шрифт на странице */
}
#top { /* Верхняя часть с заголовком страницы */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки */
 padding: 15px 0 15px 10px; /* Поля вокруг текста */
 margin-bottom: 15px; /* Расстояние между заголовком и колонками */
 font-size: 24px; /* Размер шрифта */
 font-weight: bold; /* Жирное начертание */
 color: black; /* Цвет символов */
}
#menu { /* Навигация по сайту */
 width: 100px; /* Ширина меню */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки */
 float: left; /* Состыковка с другим слоем по горизонтали */
 padding: 3px; /* Поля вокруг текста */
}
#menu A { /* Ссылки в меню */
 font-size: 90%; /* Размер текста */
}
#content { /* Основное содержание страницы */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки */
 margin-left: 115px; /* Отступ слева */
 margin-bottom: 15px /* Отступ снизу */
}
#bottom { /* Нижняя часть */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки */
 font-size: 90%; /* Размер шрифта */
 padding: 3px; /* Поля вокруг текста */
}
H1 { /* Заголовок страницы */
 text-align: center; /* Выравнивание по центру */
 font-size: 210%; /* Размер шрифта */
 font-family: "Times New Roman", Times, serif; /* Шрифт с засечками */
 font-weight: normal; /* Нормальное начертание */
 color: black; /* Цвет текста */
 padding: 0; /* Убираем значение полей */
 margin: 0; /* Обнуляем значения отступов */
}
#content P {
 font-size: 90%; /* Размер шрифта */
 text-align: justify; /* Выравнивание по ширине */
 padding: 10px; /* Поля вокруг текста */
 margin: 0 /* Обнуляем отступы */
}
</style>
</head>
<body>
<div id="top">Заголовок сайта</div>
<div id="menu">
<a href="link1.html">Ссылка 1</a><br>
<a href="link2.html">Ссылка 2</a><br>
<a href="link3.html">Ссылка 3</a><br>
<a href="link4.html">Ссылка 4</a><br>
</div>
<div id="content">
<h1>Lorem ipsum dolor sit amet</h1>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat
volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi. Duis autem dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit au gue duis dolore te feugat nulla
facilisi.</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.Duis te feugifacilisi. Duis autem dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit au gue duis dolore te feugat nulla facilisi.</p>
</div>
<div id="bottom">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit
</div>
</body>
</html>

Результат данного примера показан на рис. 2.

Рис. 2

Рис. 2. Результат создания двухколонного макета

Для формирования колонки заданной ширины справа, а не слева, код незначительно модифицируется. В табл. 2 показаны стилевые параметры, которые требуются для этого случая.

Табл. 2. Правая колонка заданной ширины
Для правого слоя шириной 20%
Слой 1

float: right
width: 20%
Слой 2

margin-right: 21%
Для правого слоя шириной 200px
Слой 1

float: right
width: 200px
Слой 2

margin-right: 210px

Расположение слоев в коде остается прежним, но значение атрибута float меняется на right, а параметр отступа на margin-right. Более никаких изменений не предполагается, поэтому пример 1 останется прежним и в нем только следует заменить стиль слоев menu и content на тот, что показан в примере 2.

Пример 2. Стиль для добавления меню справа

Валидный CSS
#menu { /* Навигация по сайту */
 width: 100px; /* Ширина меню */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки вокруг */
 float: right; /* Состыковка с другим слоем по горизонтали */
 padding: 3px; /* Поля вокруг текста */
}
#content { /* Основное содержание страницы */
 background: #e3e8cc; /* Цвет фона */
 border: solid 1px black; /* Параметры рамки */
 margin-right: 115px; /* Отступ справа */
 margin-bottom: 15px /* Отступ снизу */
}

Заметьте, что положение слоев в коде HTML не меняется, вначале идет слой с именем menu, а потом уже content. Причем это правило действует всегда, независимо от того, как будут отображаться на веб-странице колонки — меню слева от контента или наоборот, справа. В любом случае модифицируется только код CSS.

Применение позиционирования

При формировании двухколонного макета левая или правая колонка устанавливается в заданное место через абсолютное позиционирование, а соседняя колонка освобождает для нее место за счет применения отступов. Для лучшего понимания рассмотрим пример, когда левая колонка имеет заданную ширину 200 пикселов, а ее положение определяется от левого верхнего угла окна браузера. Стиль для таких колонок приведен в примере 3.

Пример 3. Абсолютное позиционирование колонки

Валидный CSS
#leftcol { /* Левая колонка */
 position: absolute; /* Абсолютное позиционирование */
 width: 200px; /* Ширина слоя */
 left: 0; /* Положение от левого края окна */
 top: 20px; /* Положение от верхнего края окна */
 background: #fc0; /* Цвет фона левой колонки */
}

#rightcol { /* Правая колонка */
 margin-left: 210px; /* Отступ слева */
 background: #ccc; /* Цвет фона правой колонки */
}

Значение absolute свойства position позволяет задавать положение слоя относительно края окна браузера независимо от наличия и местоположения других слоев. Сами координаты устанавливаются с помощью параметров left, top, right и bottom, которые соответственно определяют расстояние от левого, верхнего, правого и нижнего края окна. Чтобы левая и правая колонка не накладывались друг на друга, следует добавить отступ слева (margin-left) для слоя rightcol, как показано в данном примере. Значение этого отступа включает расстояние от левого края (параметр left) и ширину левой колонки (width) плюс дистанция между колонками.

Замечание

В любом браузере уже заложены отступы между краем окна и отображаемым в окне контентом. Поскольку значения отступов в разных браузерах могут различаться, то это влияет на вид и положение колонок макета. В подобных случаях лучше принудительно установить отступы с помощью атрибута margin, добавляя его к селектору BODY (см. пример 4).

Окончательный код для создания двух колонок с помощью позиционирования приведен в примере 4.

Пример 4. Двухколонный макет

Валидный HTML
Валидный CSS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Две колонки</title>
<style type="text/css">
BODY {
 padding: 0; /* Отступы для браузера Opera */
 margin: 0; /* Обнуляем значения отступов на веб-странице */
}
#leftcol {
 position: absolute; /* Абсолютное позиционирование */
 width: 200px; /* Ширина слоя */
 left: 0; /* Положение от левого края окна */
 background: #800000; /* Цвет фона левой колонки */
 padding: 5px; /* Поля вокруг текста */
}
#leftcol A {
 color: white; /* Цвет ссылок */
}
#rightcol {
 position: relative; /* Относительное позиционирование */
 margin-left: 200px; /* Отступ слева */
 background: #e0e0e0; /* Цвет фона правой колонки */
 padding: 10px; /* Поля вокруг текста */
}
H1 {
 margin: 0; /* Убираем отступы */
}
</style>
</head>
<body>
<div id="leftcol">
 <a href="link1.html">Ссылка 1</a><br>
 <a href="link2.html">Ссылка 2</a><br>
 <a href="link3.html">Ссылка 3</a><br>
 <a href="link4.html">Ссылка 4</a><br>
</div>
<div id="rightcol">
<h1>Lorem ipsum dolor sit amet</h1>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis te feugifacilisi. Duis autem dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit au gue duis dolore te feugat nulla facilisi.</p>
</div>
</body>
</html>

При использовании позиционирования примите во внимание следующие моменты.

Статья опубликована: 15.05.2006 Последнее обновление: 14.04.2008

Прежде, чем писать комментарий к статье, примите во внимание следующие моменты.

  1. Не задавайте вопросы в комментариях, для этой цели предназначен форум, где вы получите нужную помощь.
  2. Удаляются любые комментарии, которые:
    • включают множество ошибок;
    • написаны безграмотно;
    • не имеют отношения к данной статье;
    • не содержат никакой полезной информации для посетителей.
  3. Для выделения отдельных слов используйте следующие команды: [b]жирный[/b], [i]курсив[/i], [color=цвет]цветной текст[/color], [tag]тег[/tag], [var]параметр[/var], [code]пример[/code].
  4. Потренироваться в написании комментариев вы можете в песочнице.

Комментарии к статье

coolreal

15.05.2006

Спасибо за новое.
в продолжение темы вопросик:
я сделал резиновый макет, поля задаются процентами float: right; width: 20% и margin-right: 21%.
Во втором поле мне нужно сделать еще одно разделение и желательно, чтоб под левую колонку отводилось 70%, я делаю внутри слоя content еще два слоя с float: right; width: 70% и margin-right: 71%, но ИЕ считает их от ширины браузера, а ФФ от ширины слоя контейнера.
Как выкрутиться??

Влад Мержевич

15.05.2006

Как вариант, "подсунуть" IE свой стиль с нужной шириной.

<!--[if IE]>
<style type="text/css">
#content2 {width: 70%}
</style>
<![endif]-->

Вставлять этот код надо в BODY.

Дмитрий

16.05.2006

А слабо не ходить вокруг да около и предоставить код следующего примера?:

Шапка, Три колонки, Подвал.
Шапка произвольной высоты.
Левая колонка - шириной 150px от шапки до подвала вся красная.
Правая колонка - по анологии с левой, только синяя.
Центральная колонка - оставшееся место.
Подвал произвольной высоты, примыкающий к нижнему краю окна просмотра ВНЕ зависимости от наличия содержимого текста на странице (т.е. даже если его СОВСЕМ нет)

Да. Напоминаю: все три колонки должны начинаться впритык от шапки и заканчиваться ВПРИТЫК к подвалу.

Вот пока этот вопрос не будет реш?н вменяемым образом, считаю, что CSS нужен чисто для оформления, а никак не для верстки. И жалкие возгласы СУПЕРКОДЕРОВ о том, что "семантически не верно верстать таблицами, для меня пустой звук. table + div = мир_во_всем_мире! wink

Влад Мержевич

17.05.2006

Дмитрий, в таких случаях говорят: "вам надо, вы и верстайте". И потом, вас никто не заставляет верстать по другому. Нравятся таблицы, ну так используйте их без оглядки на чужое мнение.

А задача для верстки слоями поставлена некорректно.

Демид

17.05.2006

К Дмитрию -мужик, есть такая классная штука
как z-index, чтобы было все "красное". А насчет пустого места есть параметр float b position. Вменяемо?

klx

17.05.2006

Демид, а можно поподробнее?

все тот же пример:
3 колонки, шапка и футер. конечно все 5 слоев разного цвета. колонки начинаются от шапки и кончаются уткнувшись в футер.

контент изменчив - не известно в какой колонке его окажется больше и где останется свободное место.

можете кинуть сюда примерчик такого лейаута на слоях??? пожалуйста! это единственное серьезное НО которое мне не позволяет осваивать верстку на слоях.

однажды делал верстку такого лейаута на слоях и т.к. не имел простого решения, то применял ко всем слоям высоту через js которая высчитывается после подгрузки контента.

p.s. как я понял реккомендация с z-index прокатит только если контента меньше в цветной колонке.. или я ошибаюсь??

Artleo

28.05.2006

Присоединяюсь к klx, единственный большой минус при верстки слоями - невозможность задания одинаковой высоты для колонок при неизвестном заранее кол-ве контента в каждой из них. Немогли бы Вы осветить этот вопрос по-подробнее. Заранее спасибо.

Влад Мержевич

29.05.2006

Artleo, это не является недостатком слоев, скорее их характерной особенностью. К подобному надо просто привыкнуть, а не пытаться переломить естественный ход вещей. В противном случае используйте для верстки таблицы.

Dim

28.06.2006

не понял вопросов про высоту колонок? в чем проблема? На Васконе уже давненько статью читал "Продвинутая CSS-верстка: шаг за шагом" (http://www.webmascon.com/topics/coding/13a.asp)
по моему все есть? или я не о том?

Влад Мержевич

29.06.2006

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

smile

10.07.2006

... и вс?-таки, как правильно делается 3х колонная резинка для IE ???

Влад Мержевич

17.07.2006

Будет новая статья, там и расскажу про трехколонную верстку.

Nwen

23.07.2006

To Дмитрий. А, может, вы, вместо того, чтобы отпускать едкие комментарии, сами создадите сайт вроде этого и расскажите нам всем как создать этот ваш трехколонный макет? Слабо?

mambet

12.10.2006

Дмитрий совершенно прав. А вы вместо того чтобы дать пример набросились на него. Я сам уже четыре года не верстаю на таблицах, но до сих пор не могу найти приемлемого решения с трехколоночным дизайном на дивах. Высоту всех трех колонок если надо сделать одинаковыми делаю определяя на JavaScript высоту контейнера этих трех колонок и потом назначаю этим колонками. А вообще веб верстка как была идиотской в 1996 такой

Влад Мержевич

13.10.2006

Дмитрий не прав, потому что задача с одинаковой высотой слоев в корне неверна. Высота слоя формируется за счет его контента и насильное ее изменение чревато проблемами.
При переходе на верстку слоями надо отказываться от "табличного" мировозрения и мыслить категориями слоев, а не говорить: "вот вам таблица, сделайте точно также на слоях". Если от подобного мировозрения отказаться, то большинство так называемых "проблем" просто исчезнет.

Михаил

10.01.2007

Зря вы так на Дмитрия обиделись. Когда заказчик скажет: "Хочу такой дизайн!", - вы что, будете ему впаривать про невозможность в?рстки данного дизайна средствами плавающих блоков? Или про семантически неверную в?рстку?

Влад Мержевич

11.01.2007

Если заказчик попросит деревянный дом из кирпича, ему придется объяснять, что дом бывает либо деревянный, либо кирпичный. В случае верстки сайтов, вариант предложенный Дмитрием решается однозначно только с помощью таблиц. Если вдруг заказчик скажет - "а мне вот это вот, да на слоях", тогда придется ему объяснять в чем он не прав. Не поймет, выкатываете ему счет с тремя нулями, тогда быстро дойдет.

Sergey

25.01.2007

Спасибо! После прочтения и практики на ваших примерах смог разобраться.

Роман

30.01.2007

Спасибо огромное за сайт! Ресурс успешно перекочевал в самый верх избранного.
Ну теперь вопрос по теме...
Двухколоночный "резиновый" дизайн на DIV`ах конечно хорошо, но вот у меня все хорошее заканчивается когда в DIV содержимого я добавляю IFRAME. Нужно чтобы он растягивался по ширине родительского контейнера, но при параметре width:100%, в IE6 фрейм растягивается по ширине окна браузера.
Собственно вопрос: как подружить подобный шаблон и димамический контент?
На крайний случай собираюсь применять AJAX, но это уже совсем другая история. Делать сайт в котором просмотр содержимого 100% завязан на яваскрипт, это не особо привлекательный вариант...

P.S. В разделе "Использование плавающих элементов" опечатка. Одно и то же предложение два раза повторяется.

Велимир

01.02.2007

У меня тот же вопрос про iframe, что и у Романа.
А так весь сайт просто супер. Лучший справочник который я когда либо видел, с учетом полного не знания иностранных языков.

Алексей Фурманов

04.02.2007

Здравствуйте Влад, замечательный ресурс, перечитал все статьи про в?рстку слоями. Есть сложный вопрос. Традиционная разработка сайтов на сегодняшний день представляет из себя процесс: макет дизайна (psd) нарезали на клаптики (png) обернули в HTML&css и прикрутили логику (CMS). Непрофессионально требовать отказаться от дизайна, утвержд?нного заказчиком, из-за несоответствия технологических возможностей какой-либо технологии (например, сло?в). Следующий момент: среди оптимизаторов сайтов (seo) есть мнение, что чем выше расположен контент в странице, тем выше оценка содержимого поисковиком, поэтому "модно" использовать слои и располагать контент в div`е с абсолютным позиционированием (указывающим на место где будет контент отрисован), кроме того, контент загружается в первую очередь (до всего прочего содержимого сайта), что должно радовать (и удерживать) посетителя сайта, пришедшего именно за этим контентом. Двумя словами использование сло?в - есть всеобщее благо, в связи с этим я решил переквалифицироваться с верстальщика табличным методом (где можно заверстать 100% любой дизайн) на верстальщика слоями. Ну и теперь наконец-то вопросы: в двухколонном макете с использованием табличной в?рстки я мог сделать ширину левого меню зависимой от ширины е? контента (т.е. ширина меню формировалась в зависимости от размеров элементов меню, а они у меня строятся динамически и заранее я их размер не знаю ни в пикселах ни в процентах), т.е. я хочу получить истинно "резиновый" дизайн (на таблицах это несложно), как решить такую проблему на слоях? вопрос ?2 вызван предыдущим - куда указать абсолютное позиционирование слоя с контентом, если мы не знаем заранее ширину меню? получается, что для этого я не могу пользоваться абсолютным позиционированием, и вынуждены размещать слой с контентом после меню с float:left, при этом на мой взгляд автоматически пропадает смысл вообще использовать слои, поскольку я хотел их использовать именно для размещения контента в начале страницы, остальное я замечательно верстаю и на таблицах... что Вы можете мне посоветовать? (P.S. использование JavaScript для этих целей считаю злом)

Алексей Фурманов

05.02.2007

Влад, я потратил некоторое время для анализа реальных приложений в интернете и, похоже, я понял, как бороться с моей проблемой! Е? решение заключается в использовании "гибридной" в?рстки, т.е. DIV`ы используются непосредственно для в?рстки сло?в, а для начинки сло?в применяется табличная в?рстка (которая, кстати, у Вас также рассмотрена). Ещ? раз большое спасибо за ресурс ;-)

Влад Мержевич

07.02.2007

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

Что касается резинового дизайна, то он строится на использовании процентов в качестве значений ширины. Также активно применяются отступы и автоматическое вычисление ширины слоев. В общем, надо приобрести некоторый опыт верстки слоями, чтобы пришло понимание, как делать ту или другую фичу.

Nolan

24.02.2007

Автору огромная благодарность.
Слоями можно сверстать любую макетную сетку. Главное - изначально мыслить слоями, понимать <психологию их поведения>. А это приходит с опытом.

REDucka

15.04.2007

Огромное спасибо за Статью. Я вот уже неделю голову ломаю как сделать резинку по высоте. Думал что я туплю. Оказалось что это тяжело. Я просто только недавно начал верстать Дивами. Таблицами проще ). Но приходится иногда и с ними бороться.

av

27.04.2007

Коллеги! Подскажите, пожалуйста, как побороть такую штуку.
Беру пример с этой страницы двухколонного макета. (рис. 2)
Теперь хочу в слое #content сделать 3 колонки равной ширины.
т.е. 3 дива с width:33% и float: left;
В FireFox'е и Opera вс? ок, но IE упорно считает 33% от ширины экрана sad

Неужели не существует рецепта и придется колонки делать c gjvjom. таблиц?

Влад Мержевич

02.05.2007

2av
Есть такая ошибка у IE6, для него придется ширину задавать иную, чем для браузера FF.

Канителька

17.05.2007

Так и непонятно, если верстать слоями - то можно забыть о макетах, у которых высота не по контенту - а до самого подвала (если мыслить по-дивному, а не табличному)? Может кто-нить привести сайты, сверстанные дивами и тянущиеся во все стороны... В инете я встречаю лишь мертвые никуда не тянующиеся блоки.

И вопрос такой как и у Av:
если поместить внутрь #content разбиение на колонки (как в вашем первом примере), то во второй колонке, у которой мы задаем margin-left:21% (в процентах), этот марджин не срабатывает в IE6. Так какую ширину надо задавать и кому?

dreamer

21.05.2007

осмелюсь предположить, что "табличные св-ва" дивам можно задать через display:table, ещ? разные формы принимает топ, если задать
top{display: inherit или block или inline} - ставьте навороченные html редакторы(типа мокромедии или голайф, если лень юзать справки на английском, за1но они помогут проверить код на ошибки (валидность))

tov. Me

23.05.2007

2 Канителька:
Выше уже приведена ссылка http://www.webmascon.com/topics/coding/13a.asp
Там приводится пример создания сайта с высотой всех слоев до подвала (и с растяжкой при увеличении количества контента).

Codak

29.05.2007

Помогите! Весь дизайн порезан на куски и вставлен в таблицу (джепег) как е? сделать ризиновой!?

VinGood

30.05.2007

В пример ?1 помещаю таблицу сразу после открытия дива content, например такую
<table>
<tr>
<td>wqrqwr</td>
<td>sfgsdf_wqq</td>
<td>wqrqwr</td>
<td>sfgsdf_wqq</td>
<td>wqrqwr</td>
<td>sfgsdf_wqq</td>
<td>wqrqwr</td>
<td>sfgsdf_wqq</td>
<td>wqrqwr</td>
<td>sfgsdf_wqq</td>
</tr>
</table>

Когда уменьшаю ширину экрана в IE6 до того, пока таблица не поместится в экран, весь контент спрыгивает вниз и позиционируется по высоте ниже левого меню, как с этим бороться, в FF все нормально. А то я уже не зню что и делать. Заранее благодарю.

S.

30.06.2007

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

sciko

04.07.2007

ИХМО, слои нужны для одного типа в?рстки, а таблицы для другого. Собственно таким гибридом я и верстаю...

Дмитрий

11.07.2007

to VinGood

используйте margin-left: 1px;

BoyKot

12.07.2007

Влад, подскажи пожалуйста как в блочной верстке дизайн сделать "резиновым по вертикали"

заказчик требует чтобы "подвал" типа
"Terms of use | Privacy statement | Contact us"
был стабильно в самом низу окна браузера.
при этом небоходимо чтобы заголовок и подвал имели фиксированную высоту по 100px, а контент между ними растягивался по всей доступной оставшейся высоте окна

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

думаю решить эту проблему с помощью слоев
единственное что пока придумал это абсолютное позиционирование подвала, но тогда он при увеличении размера среднего (контент) ряда "наежает" на контент, что естественно недопустимо

заранее спасибо за помощь

Tim-Tim

17.07.2007

Влад! в примере 1 надо бы добавить в #bottom {clear:left;},
иначе в случае, когда меню по высоте больше контента, подвал будет
"обтекать" меню.

Алексей

22.07.2007

Подскажите, какие свойства добавить слою, счтобы тот всегда располагался снизу?

Влад Мержевич

24.07.2007

http://htmlbook.ru/faq/?a=41

Денис Назаренко

30.08.2007

Вот случайно нашел пример верстки на дивах 3-х колоночного резинки с фиксированной шириной правой и левой колонки с хедером и футером http://www.pixy.cz/blogg/clanky/css-3col-layout/ мне очень понравилось может кому пригодится

Ольга

25.09.2007

Практически SOS:)
Такая проблема: в IE в неразвернутом окне при сдвиге до ОПРЕДЕЛЕННОГО уровня происходит резкий скачок влево, т.е. поля справа с 20px увеличиваются до 100px. Не пойму что это. Вниз ничего не съезжает, просто увеличиваются поля справа. Что делать?!???Пожалуйста, помогите.

Ольга

02.10.2007

Во внутренних дивах поменяла width и float на margin-left, и вроде бы работает нормально; чему безумно рада. Что надо человеку для счастья?!smile

Ромео

08.10.2007

Подскажите пожалуйста чайнику,как сделать в Dreamveawer'е значительные отступы от границ браузера(опера,например),что бы при изменении ширины окна изменялась ширина отступов,а сама "ячейка" сайта оставалась неизменной.Как пример http://loveplanet.ru/

Ольга

15.10.2007

Влад, подскажите, пожалуйста: при установке в IE крупного шрифта все рассыпается, слои вниз сползают. Что делать?

Олег

17.10.2007

Полагаю, в этом предложении опечатка:
"Правый слой характеризуется лишь одним параметром - margin-left, он смещает левый край колонки на ширину ПРАВОГО слоя, плюс задает отступ между колонками."
Нужно: не правого, а левого.

unknown

19.10.2007

подскажите, пожалуйста, как сделать низ сайта(слой) так, чтобы он при увеличении или уменьшении информации и то бишь высоты слоя главной страници пристыковывался бы к ней вплотную. Хочу заметить, что слой, на котором эта информация имеет атрибут position: absolute. Заранее спасибо.

Влад Мержевич

21.10.2007

Олег, исправил.

2 unknown
Никак.

Виктор

27.12.2007

А можно задать минимальный размер для колонок, после чего появится скроллинг?
а то например если окно "сплющить" то текст вытягивается вниз... что не есть хорошо sad

Влад Мержевич

28.12.2007

Можно, для этого используется стилевой параметр min-width.

Shock

21.01.2008

На счет разного отображения Оперой, Фоксом и Ослом. Практически лишен этих проблем после перехода на xHTML Strict 1.0. Рекомендую. Так как Тразишин ХТМЛ разные браузеры и должны отображать по разному.

Александр

21.01.2008

Интересно, как "резинку" из трехколонок сделать (справа, слева фиксированная ширина колонок, а посредине чтоб менялась ..)... Главное условие, чтоб при изменении "окна" все не слетало, а появлялся скроллинг. <br/> А вообще за сайт спасибо, узнал много полезного ...

Георгий

28.01.2008

Вс? доходчиво, спасибо - а тр?х колоночная в?рстка вс?таки нужна!!!

DokSna

15.02.2008

А почему бы Вам сдесь не описать устройство макета из 3-х колонок и более?

blackFFFFFF

06.03.2008

Трех. Да пожалуйста.
Вот пример на скорую руку. Исходя из материалов статей этого сайта:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
<title>Тест</title>
<style>
#wrapper{
position: absolute;
top : 0px;
left : 0px;
margin : 0px;
padding: 0px;
background-color: lime;
width: 100%;
}
br.clear{
clear: both;
}
#header{
width: 100%;
height: 150px;
position: releative;
background-color: silver;
}
#left{
position: absolute;
top: 150px;
left: 0px;
width: 30%;
float: left;
background-color: green;
}
#right{
position: absolute;
top: 150px;
left: 0px;
width: 30%;
margin-left: 70%;
float: right;
background-color: blue;

}
#center{
position: absolute;
top: 150px;
left: 0px;
margin-left: 33%;
margin-right: 33%;
width: 30%;
background-color: red;

}
#bottom{
position: releative;
width: 100%;
background-color: yellow;
height: 100px;
}

</style>

</head>

<body>
<div id="wrapper">
<div id="header">Это шапка</div>
<br class="clear"/>
<div id="left">Левый столбец</div>
<div id="right">Правый столбец</div>
<div id="center">Центральная часть</div>
<br class="clear"/>
<div id="bottom">Низ</div>
</div>
</body>

</html>

Здесь 30% на 30% и на 30% резиновый дизайн (проверено ИЕ 7.0, Файрфокс 2.0, Опера 9.26)
Из объяснений - все три колонки контента абсолютно позиционируются на странице. Ширину проставляем 30% и задаем отступы. Для левой колонки выставляем float: left, для правой float: right и задаем margin слева и справа. Для центральной задаем margin-right и margin-left соответственно.

Strelok

14.03.2008

blackFFFFFF, огромное спасибо!

RIDLER

26.03.2008

Отдичная ссылка на данную тематику http://www.dynamicdrive.com/style/layouts/category/C10/

Darhark

30.05.2008

"Слоеный" документ с таблицами - это как... ну, скажем, мотоцикл с ногами - чтобы и ездить мог, и по лестнице подниматься. Только при этом колеса мешают подниматься, а ноги - ездить. Добавляя "чуток" таблиц - пусть одну - в тело документа, мы уже используем преимущества дивов лишь наполовину, если не меньше. И если господа - изобретатели стандарта и производители браузеров не поднапрягутся и не добавят в css свойств взаимозависимости элементов (напр #tablestyle {height:parent 100%}), то ситуация не изменится. И вся распрекрасность css будет видна только там, где по чудесному стечению обстоятельств попадается понятливый заказчик.

Я вообще удивляюсь, где вы находите заказчиков, которым нужен не "3хколоночный дизайн с высотой от шапки до футера и 100% блочная верстка" одновременно, и у которых "много нулей" не вызывает немедленного желания найти новых исполнителей. Делитесь инфой ))

Lanna

18.07.2008

Помню столкнулась с первыми трудностями html-верстки. Было впечатление, что никогда не смогу понять как же правильно организовать структуру странички, чтобы во всех браузерах она начала отображаться с первого раза одиноково и правильно. Но спустя какое-то время начинаете понимать, что не так страшен серый волк, как его малюют smile но из личного опыта советую для начала разобрать на готовых примерах http://www.graphicson.com/html/portfolio.html,layouts, а уже потом, осмыслив структуру, начинать самостоятельно верстать странички. Пользуясь таким методом процесс изучения заметно ускорится smile

Добавить комментарий

Имя
Комментарий

Сохранить имя (используется cookie)

Поиск по сайту

Верстка с помощью слоев
Разделы
Теги по теме

A
Тег A является одним из важных элементов HTML и предназначен для создания ссылок. В зависимости от присутствия параметров name или href тег A устанавливает ссылку или якорь.

BODY
Элемент BODY предназначен для хранения содержания веб-страницы (контента), отображаемого в окне браузера.

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

H1...H6
HTML предлагает шесть заголовков разного уровня, которые показывают относительную важность секции, расположенной после заголовка. Так, тег H1 представляет собой наиболее важный заголовок первого уровня, а тег H6 служит для обозначения заголовка шестого уровня и является наименее значительным.

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

CSS по теме

background
Параметр позволяет установить одновременно до пяти атрибутов стиля фона. Значения могут идти в любом порядке, браузер сам определит, какое из них соответствует нужному атрибуту.

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

bottom
Устанавливает положение нижнего края содержимого элемента без учета толщины рамок и отступов. Отсчет координат зависит от параметра position, он обычно принимает значение relative (относительное положение) или absolute (абсолютное положение).

color
Определяет цвет текста элемента.

float
Определяет, по какой стороне будет выравниваться элемент, при этом остальные элементы будут обтекать его с других сторон.

left
Для позиционированного элемента определяет расстояние от левого края родительского элемента, не включая отступ, поле и ширину рамки, до левого края дочернего элемента. Отсчет координат зависит от значения параметра position.

margin-left
Устанавливает величину отступа от левого края элемента.

margin-right
Задает величину отступа от правого края элемента.

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

position
Устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице.

right
Для позиционированного элемента определяет расстояние от правого края родительского элемента, не включая отступ, поле и ширину рамки, до правого края дочернего элемента.

top
Для позиционированного элемента определяет расстояние от верхнего края родительского элемента, не включая отступ, поле и ширину рамки, до верхнего края дочернего элемента.

width
Устанавливает ширину блочных или заменяемых элементов. Ширина не включает толщину границ вокруг элемента, значение отступов и полей.

Copyright 2002–2008 Влад Мержевич, по всем вопросам пишите по адресу: vlad@htmlbook.ru

О сайте | Планы на будущее | Использование сайта | Борьба с ошибками | Технологии | Поддержать проект