“ Что?Другой “ одинаковой высоты Columns” статьи?Хватит уже ”! Если это то, что вы думаете, то подумайте еще раз, потому что это решение different.
Это не полагаться на обычные трюки.Он не использует images, ни дополнительные markup, ни CSS3, ни псевдо-classes, ни Javascript, ни абсолютное positioning.Все это используется составляет border
и negative margin
.Обратите внимание, что эта статья также продемонстрирует различные методы конструкции и освежить несколько concepts.
1.Центрирование столбцов без обертки div
Этот макет будет построен без обертки div
:
Basics
Мы используем фоне body
, а граница одной из колонн для создания фоновых цветов, что вертикально заполнить “ row”.
Markup
<div id="header"> <h2><a href="#">Header</a></h2> <p>Lorem ipsum...</p> </div> <div id="sidebar"> <h2><a href="#">Sidebar</a></h2> <p>Lorem ipsum...</p> </div> <div id="main"> <h2><a href="#">Main</a></h2> <p>Lorem ipsum...</p> </div> <div id="footer"> <h2><a href="#">Footer</a></h2> <p>Lorem ipsum...</p> </div>
Tip: всегда включают в себя ссылки на вашем фиктивный текст, чтобы определить контекст стэка issues.
Об использовании тела в качестве оболочки:
- Всегда стиль
html
с фоном для предотвращения фона организма от выходящие за его границы и быть окрашен по всей viewport. - Никогда не стиль
html
сheight: 100%
или фон тела будут окрашены не выше, чем viewport.
CSS
html { background: #9c9965; } body { width: 80%; margin: 20px auto; background: #ffe3a6; } #header { background: #9c9965; } #sidebar { float: left; width: 200px; background: #d4c37b; } #main { border-left: 200px solid #d4c37b; } #footer { clear: left; background: #9c9965; }
Что делают эти правила точно
- Мы стиле
html
с фоном, чтобы предотвратить браузера от живописи цвет фонаbody
outside наши layout. - Мы стиле
body
с автоматической края к центру расположение, ширина устанавливается с помощью процентах.Фон декларации в течение#main
. - Мы стиле фон
#header
замаскировать цвет фона тела (то же самое относится и к#footer
). - Цвет фона
#sidebar
соответствующий цвет границы#main
.Это трюк мы используем, чтобы сделать наши столбцы отображаются как равный height. - Нижний колонтитулы удаляет все предыдущие поплавок так, он остается под колоннами, в нижней части layout.
Если вы посмотрите на эту Первый step, you’ заметите, что движется в #sidebar
не вертикально с заголовком в #main
, и что мы имеем некоторый разрыв в верхней и нижней части #sidebar
.Это потому, что из этих двух контейнерах, только одна блок форматирования context.Таким образом, поля не рухнуть в #sidebar
в то время как они делают в #main
.Это также означает, что #main
не будет содержать поплавки и что применение clear:left
любой вложенный элемент будет очистить #sidebar
, как well.
Таким образом, чтобы предотвратить любую поплавка и маржа рушится вопросы мы делаем все основные боксы блока форматирования contexts.
#header, #footer { overflow: hidden; zoom: 1; } #main { float: left; } #sidebar { margin-right: -200px; }
Note: если вещи выглядят немного отличается в IE 6 и 7, это потому, что в этих браузерах default поля делают развал внутри блока форматирования контекстах.Следующие также должны быть рассмотрены:
-
overflow
иzoom
на#header
и#footer
сделать эти элементы нового форматирования блока contexts. - Для
#main
мы используемfloat
, а неoverflow
чтобы предотвратить потенциальные проблемы, если мы должны были компенсировать часть вложенных content. - Отрицательная маржа держится
#main
на место, потому что теперь она является плавающей, ее границы окна появляется next к краю коробки#sidebar
. (Отрицательный vlaue должны совпадать с размерностью сказал коробки)
Если вы посмотрите на второй step, you’ увидите, что граница #main
кожа #sidebar
.Это потому, что в контексте стэка.В потоке (дерево порядка), #main
наступает после #sidebar
, так что бывший перекрывает latter.
Позиционирование # боковой панели приносит его в stack.
#sidebar { position: relative; }
Примечание: если вы сделаете #main
новый содержащий блок you’ будем вернуться к исходному порядке стека.В этом случае, you’ должны будете использовать z-index
держать #sidebar
на вершине #main
.
Если вы посмотрите на шаг three, you’ увидите, что мы почти у цели.Последний развлечениях в основном косметические.I’ ве вставлены стили базы sheet:
<link rel="stylesheet" type="text/css" href="http://tjkdesign.com/ez-css/css/base.css">
, А затем добавил следующие правила:
html { height: auto; } body { border: 1px solid #efefef; } #header, #main, #sidebar, #footer { padding-bottom: 2em; }
Зачем нам нужны эти правила
- Мы можем сбросить высоту
html
, так что фон#main
не отключение на линии сгиба (это стиль наследуется от листа база стилей) - Мы можем провести границу по всему layout.
- Потому что лист база стилей устанавливает только верхний полей, мы можем создать пробелы в нижней части основной коробки через padding.
Примечание: правила для html
показано здесь, но это имеет смысл remove это правило с листа база стилей, а не перезаписыватьДекларация here.
Это последний step для первого макета.Он опирается на эти простые правила:
html { height: auto; background: #45473f; } body { width: 80%; margin: 20px auto; background: #ffe3a6; border: 1px solid #efefef; } #sidebar { float: left; position: relative; width: 200px; margin-right: -200px; background: #d4c37b; /* color must match #main's left border */ } #main { float: left; border-left: 200px solid #d4c37b; /* color must match #sidebar's background */ } #header, #footer { clear: left; overflow: hidden; zoom: 1; background: #9c9965; } #header, #main, #sidebar, #footer { padding-bottom:2em; }
2.Создание 2-цв-макета с двумя границами между columns
We’ создадите этом с одной оболочкой для наших двух столбцов, и мы хотим, чтобы нарисовать вертикальную границу между двумя columns.
Basics
Обертку div
позволяет нам быть немного более творческими здесь.Фон оболочки используется для рисования фона в один столбец, а его левая граница используется для рисования цвет фона другой колонке.Вертикальная граница будет сделано перекрытие правой границе левой колонке с левой границы правого column.
Примечание: если у вас есть использовать фиксированную ширину макета (по сравнению с жидкостью, как здесь), то оболочка может быть использована для создания двух цветов фона, а также вертикальные границы в то же время.Это делается с помощью левой границы для левой колонке, правая граница для правой колонки и фон для вертикальной границы.Да, это означает, что содержимое коробки шириной в один пиксель, а отрицательные поля используются тянуть столбцов в place.
Markup
<div id="header"> <h2><a href="#">Header</a></h2> <p>Lorem ipsum...</p> </div> <div id="wrapper"> <div id="sidebar"> <h2><a href="#">Sidebar</a></h2> <p>Lorem ipsum...</p> </div> <div id="main"> <h2><a href="#">Main</a></h2> <p>Lorem ipsum...</p> </div> </div> <div id="footer"> <h2><a href="#">Footer</a></h2> <p>Lorem ipsum...</p> </div>
CSS
Начнем с общих правил, по сравнению с предыдущим демо-версии:
html { background: #45473f; } body { width: 80%; margin: 20px auto; background: #ffe3a6; } #header, #footer { overflow: hidden; zoom: 1; background: #9c9965; } #sidebar { float: left; width: 200px; } #main { float: left; }
К которому мы добавляем position: relative
:
#wrapper { display: inline-block; border-left: 200px solid #d4c37b; position: relative; } #sidebar { margin-left: -200px; position: relative; }
Примечание: нет необходимости использовать clear
на нижний колонтитулы, поскольку #wrapper
contains как floats.
- Вместо того чтобы использовать
overflow
/zoom
, мы используемinline-block
создать новую контексте форматирования блока (это заявление также вызывает hasLayout).Левая граница будет рисовать цветом фона за#sidebar
. - Отрицательная маржа исп …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров