Существует много способов по верстке колоночных макетов. Уже не один нос разбит в течении холиваров, разожженных по поводу использования тех или иных методов. Казалось бы, что все должно быть предельно ясно и понятно, но все-равно возникает много трудностей. Я хочу и свою лепту вложить во всеобщее благое дело, и потому потратил относительно немного времени на эксперименты, которые привели меня к созданию еще одного метода, в котором есть следующие плюсы и минусы:
Сразу хочу сказать, что любая конструктивная критика приветствуется. Если вы где-то когда-то видели что-то похожее — давайте пруф. Я еще с детства любил велосипеды изобретать). Также приветствуются советы по улучшению примера. Доведем вместе до высокого уровня. Будет время — сделаю что-то на подобие генератора верстки, как у ребят из csstemplater.com, чьим инструментом я время от времени пользуюсь и всем всячески рекомендую. Если вам статья показалась многословной — прокрутите вниз — там я выложил несколько ссылок на сделанные по данной методике примеры. Итак, приступим к делу…
В нашей работе прилипающий футер — это одна из наиболее распространенных тем. Что же для него надо?
Разметка в таком случае будет похожей на:
И, соответственно, CSS для нее:
Глубоко копать не буду, так как думаю, что тут все предельно ясно. Можно обратить внимание на нижний padding у блока .container и минусовый верхний margin у блока .footer. Минусовым сдвигом мы подмимаем футер так, чтобы он помещался над контейнером. Паддинг у контентного блока влияет на то, чтобы контент не залазил под футер, а отодвигал его.
Также мы растягиваем тело документа, чтобы оно было со 100% высотой. Некоторые свойства — такие как бекграунд указал опционально.
После этого этапа я обычно в блоке .wrapper создаю шапку страницы.
И тут подходит время сделать колонки одинаковой высоты. Мною вариантов было перепробовано очень много. Перебрав все мыслимые и немыслимые варианты я пришел к выводу, что чтобы колонки растягивались и занимали 100% от документа — логично использовать вариант, когда в создании колонки учавствуют 2 блока. Первый блок — спозиционирован абсолютно, имеет фиксированную ширину и высоту в 100%, а второй блок — позиционирован относительно и накладывается поверх абсолютно спозиционированного блока.
Значит надо добавить абсолютный бокс — в .wrapper и относительно спозиционированный в наш контейнер
Приведу пример из моей верстки:
Чтобы не засорять дальше статью — приведу ссылку, по которой вы можете скачать данный файл.
На все вопросы, которые у вас возникнут — с удовольствмем отвечу в комментариях.
Привожу также несолько примеров макетов, собранных по данной системе:
В общем, комбинаций может быть столько, сколько вам угодно. Напомню или скажу тем кто не знает, что z-index срабатывает как для блоков, позиционируемых абсолютно, так и для position:relative;
Все указанные примеры вы можете скачать одним архивом (11 кб)
Надеюсь, я помог кому-то). Извините за некоторую сумбурность.
Спасибо за внимание.
Плюсы
- Есть прижимающийся к полу футер
- Колонки меню растягиваются по 100% высоте
- Колонок может быть сколько душе угодно
- Колонки могут быть как лево- так и правосторонними, а также совмещенными, например 2 справа и 1 слева
- Ширина как резиновая, так и фиксированная
- Критический минимум хаков
- Не используется Javascript
- Не используются бекграундовые изображения для создания эффекта колонки
- Никаких таблиц
- Одинаковый результат в ie5.5, ie6, ie7, ie8, ff3.5, o10, chrome4 (Если у вас не работает в каком-то браузере — отпишитесь, пожалуйста, в комментах. Исправим и приведем к универсальному виду)
Минусы
- Есть несколько «лишних» блоков. (Я бы и сам рад от них избавиться)
- Есть несколько абсолютно-позиционируемых блоков
Сразу хочу сказать, что любая конструктивная критика приветствуется. Если вы где-то когда-то видели что-то похожее — давайте пруф. Я еще с детства любил велосипеды изобретать). Также приветствуются советы по улучшению примера. Доведем вместе до высокого уровня. Будет время — сделаю что-то на подобие генератора верстки, как у ребят из csstemplater.com, чьим инструментом я время от времени пользуюсь и всем всячески рекомендую. Если вам статья показалась многословной — прокрутите вниз — там я выложил несколько ссылок на сделанные по данной методике примеры. Итак, приступим к делу…
Этап 1: Прилипающий к низу окна футер
В нашей работе прилипающий футер — это одна из наиболее распространенных тем. Что же для него надо?
- 100% высота html и body
- Минимум 3 блока — один на контейнер, содержащий все элементы, второй — непосредственно сам футер
- Ну и третий, нужный для расположения в нем контента страницы
Разметка в таком случае будет похожей на:
- <div class="wrapper">
- <div class="container">
- Контент
- </div>
- </div>
-
- <div class="footer">
- Прижимающийся футер
- </div>
* This source code was highlighted with Source Code Highlighter.
И, соответственно, CSS для нее:
- html, body {
- min-height: 100% !important;
- min-height: auto;
- height: 100%;
- border: none;
- }
-
- body {
- margin: 0;
- padding: 0;
- }
-
- .wrapper {
- display: block;
- position: relative;
- min-height: 100%;
- height: auto !important;
- height: 100%;
- width: 100%;
- min-width: 800px;
- background: yellow;
- }
- .container {
- display: block;
- height: 1%;
- padding: 0 0 50px 0;
- }
- .footer {
- margin: -50px 0 0 0;
- height: 50px;
- background: #BFF08E;
- position: relative;
- }
* This source code was highlighted with Source Code Highlighter.
Глубоко копать не буду, так как думаю, что тут все предельно ясно. Можно обратить внимание на нижний padding у блока .container и минусовый верхний margin у блока .footer. Минусовым сдвигом мы подмимаем футер так, чтобы он помещался над контейнером. Паддинг у контентного блока влияет на то, чтобы контент не залазил под футер, а отодвигал его.
Также мы растягиваем тело документа, чтобы оно было со 100% высотой. Некоторые свойства — такие как бекграунд указал опционально.
Этап 2: Раздумия над следующими шагами
После этого этапа я обычно в блоке .wrapper создаю шапку страницы.
- .header {
- position: relative;
- width: 100%;
- height: 50px;
- background: cyan;
- }
* This source code was highlighted with Source Code Highlighter.
И тут подходит время сделать колонки одинаковой высоты. Мною вариантов было перепробовано очень много. Перебрав все мыслимые и немыслимые варианты я пришел к выводу, что чтобы колонки растягивались и занимали 100% от документа — логично использовать вариант, когда в создании колонки учавствуют 2 блока. Первый блок — спозиционирован абсолютно, имеет фиксированную ширину и высоту в 100%, а второй блок — позиционирован относительно и накладывается поверх абсолютно спозиционированного блока.
Значит надо добавить абсолютный бокс — в .wrapper и относительно спозиционированный в наш контейнер
Приведу пример из моей верстки:
- <div class="wrapper">
- <div class="column-l">
- </div>
- <div class="column-r">
- </div>
- <div class="column-m">
- </div>
- <div class="header">
- Шапка
- </div>
- <div class="container">
- <div class="column-l">
- Первая колонка
- </div>
- <div class="column-r">
- Вторая колонка
- </div>
- <div class="content">
- Контент
- </div>
- <div class="clear">
- </div>
- </div>
- </div>
- <div class="footer">
- Прижимающийся футер
- </div>
* This source code was highlighted with Source Code Highlighter.
Чтобы не засорять дальше статью — приведу ссылку, по которой вы можете скачать данный файл.
На все вопросы, которые у вас возникнут — с удовольствмем отвечу в комментариях.
Заключение: Примеры в студию!
Привожу также несолько примеров макетов, собранных по данной системе:
- Левое расположение меню. Все колонки с минимальным контентом
- Левое расположение меню. Первая колонка растягивает документ по высоте
- Левое расположение меню. Вторая колонка растягивает документ по высоте
- Левое расположение меню. Контентная колонка растягивает документ по высоте
- Правое расположение меню. Все колонки с минимальным контентом
- Правое расположение меню. 3 колонки справа
В общем, комбинаций может быть столько, сколько вам угодно. Напомню или скажу тем кто не знает, что z-index срабатывает как для блоков, позиционируемых абсолютно, так и для position:relative;
Все указанные примеры вы можете скачать одним архивом (11 кб)
Надеюсь, я помог кому-то). Извините за некоторую сумбурность.
Спасибо за внимание.