Создание резиновой трехколоночной верстки с использованием отрицательных полей

Часть 2

Nuxx aka Антон Грахов, 14 ноября 2006

Создав макет, перейдем к самому интересному этапу — сделаем каждой колонке свой фон и отступы для текста.

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

Итак, давайте зададим каждому блоку свой фон:

#rightsidebar {
	width: 240px;
	float: right;
	background-color: #abb3f8;
}
#leftsidebar {
	float: left;
	width: 240px;
	background-color: #b0dbf2;
}

#content {
	margin-left: 240px;
	background-color: #999;
}

Вы увидите, что каждая колонка будет залита фоном ровно на высоту контента. Чтобы все колонки «казались» одинаковыми по высоте, используем метод «псевдоколонок».

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

Для этого подготовим две картинки. Для левой колонки и для правой.

Теперь самое время привести код, позволяющий создать иллюзию равенства колонок по высоте:

#wrap {
	float: left;
	width: 100%;
	margin-right: -240px;
	background: #999 url(bg-right.gif) repeat-y right;
	/* используется для замощения фоном если средняя часть 
	больше правой */
}

#container {
	margin-right: 240px;
	background: #999 url(bg-left.gif) repeat-y left;
	/* используется, если средняя часть больше 
	левой */
}

Теперь колонки получились равными по высоте. Но давайте попробуем сузить видимую область окна браузера. И что мы видим? Структура рушится. Чтобы этого избежать, обернем все блоки в еще один блок, у нас он называется #outer_wrapper и зададим для него минимальную ширину, например, в 800px.


#outer_wrapper { min-width: 800px; }

Знаю, знаю. Вы скажите, что это не работает в IE версии меньшей 7. А лечится это очень просто:

* html #outer_wrapper {
	width: expression(((document.documentElement.clientWidth || document.body.clientWidth) < 800)? "900px" : "100%")
}

Этот небольшой код javascript'a позволяет нам регулировать ширину указанного блока в зависимости от ширины окна браузера.

Изменив цвет шрифта на белый для большей наглядности, сравните результаты.

Данный пример и пример из первой части успешно протестированы в большинстве известных браузерах, включая IE5.5, Safari 3.0.3 (win32). Считаю что результат достигнут, и нами был получен вариант не табличной трехколоночной верстки с плавающей серединой.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Подробнее о форматировании