3 колонки DIVами

Здравствуйте уважаемый пользователь портала cssclub.ru. В данной статье речь пойдёт о том, как сделать 3 колонки с помощью DIVов, а именно как сделать так, что бы две колонки были фиксированной ширины, а между ними при этом находилась колонка которая тянется, в зависимости от размера (ширины) браузера.

Итак, представим себе что у нас есть колонка, которая всегда будет прижата к левой области браузера с фиксированной шириной 240px, так же есть колонка которая будет всегда прижата к правой области браузера и тоже будет иметь фиксированную ширину 240px, между ними соответственно будет располагаться центральная колонка, которая будет менять свою ширину в зависимости от размера (ширины) браузера. В центральной колонке зачастую располагается контент сайта, а в колонках по бокам разного рода информация. Лично я не однократно видел такую структуру кода в интернет магазинах, она для них очень удобна, так как к примеру слева можно расположить каталог товаров, по средине их описание, цены и т.д., ну а в правой колонке например рекламу, либо популярные товары, или же пользовательское меню и т.д. Для наглядного примера, ниже я поместил картинку, в которой колонки под номером 1 и 2 фиксированы, а колонка под номер 3 – способна менять свою ширину:



Итак, вот наш HTML код:

<div id="content">
  
    <div id="column-left">
      1
    </div>
    
    <div id="column-right">
      2
    </div>
    
    <div id="column-center">
      3
    </div>
	
</div>

и CSS:

#content {
	min-width: 980px;
	width: expression( (document.documentElement.clientWidth || document.body.clientWidth) < 980 ? '980px' : '100%');
}

#column-left {
	float: left;
	width: 240px;
}

#column-right {
	float: right;
	width: 240px;
}

#column-center {
	margin: 0 240px 0 240px;
}

Довольно таки простой код в принципе, но хотел бы обратить Ваше внимание на последовательность его написания, как Вы уже наверное заметили мы пишем сначала код для левой колонки, потом для правой, и затем уже идет средняя колонка. Лично для меня всегда казалось что надо писать код для левой колонки, потом для средней и только потом для правой, но не тут то было, если мы хотим получить нужный нам результат, то структура кода должна быть именно такой, какой она представлена в примере. Из кода Вам уже наверное стало понятно, что мы флотим два блока (левый и правый) по разным сторонам, средний блок естественно исходя из свойств “float: left” и “float: right” поднимается вверх, и для того что бы наш средний блок не залазил на наши боковые колонки, мы задаём ему свойство “margin”, то есть делаем внешний отступ, который должен быть равен как минимум ширине каждого из блоков. Исходя из тех соображений что у нас каждый блок равен 240px, я и сделал отступ по 240px с каждой из сторон. Так же для основной DIVки под названием “content” нам желательно задать минимальную ширину (min-width), обычно это в районе 980px. Это нужно для того, что бы при небольшой ширине браузера наши блоки не рассыпались, попробуйте не писать CSS свойство “min-width” в коде, и изменить размер браузера к минимуму, Вы увидите что произойдет с нашими блоками и Вам вряд ли это понравится.

Этого кода в прицепе было бы достаточно, если бы не IE6.0 Данный браузер снова отличился, и отличился как всегда не в лучшую сторону. К сожалению IE6.0 не понимает такого CSS-свойства как “min-width”, и поэтому для блока “#content” нам ещё придется написать такой вот код:

width: expression( (document.documentElement.clientWidth || document.body.clientWidth) < 980 ? '980px' : '100%');


Это своего рода фильтр для данного браузера, и в этом коде нам всегда нужно менять только два значения, в данном примере это число “980”, это значение говорит браузеру ИЕ6.0 какова должна быть минимальная ширина. Должен Вам сообщить что данный фильтр имеет один минус, для кого то большой, для кого то не очень, лично для меня это просто обидно, дело в том что при использовании данного фильтра наш CSS код не проходит валидацию. Я не знаю к сожалению другого способа, который бы позволил объяснить браузеру ИЕ6.0 какова должна быть минимальная ширина, может быть Вы сталкивались с данной проблемой, и могли бы что-либо сообщить по этому поводу. Если да, то поделитесь пожалуйста своими знаниями.

Вот в прицепе и всё что я хотел, и мог сказать о данном способе размещения колонок, надеюсь что смог быть Вам хоть немного полезен, пишите комментарии, критикуйте и т.д., буду рад любому отзыву. До скорой связи, с уважением, Александр.
  • +1
  • 1 сентября 2009, 22:27
  • AlexandeR

Комментарии (12)

RSS свернуть / развернуть
+
0
Я предпочитаю не использовать экспрессионы, в данном случае можно вставить однопиксельный рисунок в самом конце и растянуть его на минимальную ширину:
<div id="content">
    <div id="column-left">1</div>
    <div id="column-right">2</div>
    <div id="column-center">3</div>
    <img src="1px.jpg" width="980" height="1">
</div>
avatar

dr_Lev

  • 2 сентября 2009, 12:06
+
0
Использовать спейсеры для растяжки — плохой тон. Уж лучше экспрешены.
avatar

ni_x

  • 2 сентября 2009, 13:22
+
0
Недавно делал такой макет. Если кратко, то там используется отрицательный margin для центрального блока. Обязательно напишу об этом способе.
avatar

Neolot

  • 2 сентября 2009, 12:10
+
0
Кстати, спасибо автору, статья полезная, в свое время весь нет перерыл, чтоб найти такое простое решение :)
avatar

dr_Lev

  • 2 сентября 2009, 12:15
+
0
Я тоже долго искал что нибудь подобное, в итоге просто обратился к знакомому который уже имел неплохой опыт в вёрстке и вот он то мне и поведал этот способ, я удивился простоте этого кода :) Но найти в интернете немного проблематично ещё мне кажется и потому, что тяжело правильно озагалвить данный способ. Лично мне в голову пришло такое название статьи, но а как бы так озаглавить что бы всем сразу становилось понятно о чем будет идти речь даже не знаю.
avatar

AlexandeR

  • 2 сентября 2009, 19:52
+
0
ребят, вы чо?
blog.html.it/layoutgala/
avatar

cuhuak

  • 16 сентября 2009, 14:36
+
0
Мы не ищем легких путей :)
avatar

Neolot

  • 17 сентября 2009, 10:08
+
0
а я когда то вот искал, но так и не нашел )) совсем опыта не было :)
avatar

AlexandeR

  • 17 сентября 2009, 23:54
+
0
Подобных сайтов очень много, но верстальщику стыдно должно быть ими пользоваться. Любой профессионал должен делать скелет любого макета с закрытыми глазами.
avatar

Neolot

  • 19 сентября 2009, 04:40
+
0
Не могу с Вами согласиться, так как не считаю что мне, или другому человеку должно быть стыдно из за того что он не знает как реализовать ту, или иную ситуацию. Я очень много искал информации в интернете, общался с друзьями которые были по обытнее меня на то время, и таким образом получал всё больше и больше опыта, зачем мне придумывать то, что уже и так придумано и модернизировано? Я уверен что всю жизнь буду обращаться к каким-либо ресурсам, и стыдно мне было бы только в том случае, если я обращался бы к одной и той же статье десяток раз (кол-во раз зависит от сложности кода), и при этом никак не мог бы этого запомнить или понять.
avatar

AlexandeR

  • 20 сентября 2009, 20:33
+
0
Я имел ввиду, что подобные сайты для начинающих, но если человек считает себя профессионалом и пользуется этими сайтами, то в его профессионализме я бы усомнился.
avatar

Neolot

  • 21 сентября 2009, 18:35
+
0
но если человек считает себя профессионалом и пользуется этими сайтами, то в его профессионализме я бы усомнился.


Почему так сразу? Зачем выдумывать снова колесо, если уже есть готовые решения? Почему, ну я не знаю, мы не пишем движки для форумов(я понимаю, что это сложно, но все же), а ставим готовые? Точно также можно использовать такие каркасы
avatar

kibal4iw

  • 2 декабря 2009, 20:23

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.