Как сделать див резиновым

Умная адаптация ширины блочных элементов на чистом CSS 2.0

Верстая очередной проект (или ещё только проектируя макетную сетку) многие сталкивались с дилеммой — использовать фиксированную ширину макета или «резиновую» сетку, адаптируемую под размер окна браузера.

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

Фиксированная ширина макетной сетки

Вёрстку загоняют в горизонтальный габарит 960—980 пикселей (чтобы на большинстве устройств в большинстве разрешений всё входило), что при больших горизонтальных размерах окна выглядит как-то зябко — тонкая вертикальная полоса полезного содержимого страницы и огромные бесполезные поля неиспользуемого пространства по бокам.

«Резиновая» макетная сетка по ширине окна

Опять же при больших горизонтальных размерах окна есть другая проблема: строки текста становятся очень длинными, и читать их становится совсем не так комфортно, как хотелось бы.
Ещё одна распространённая проблема этого решения — боковые отступы при больших горизонтальных размерах окна уже не так удачно визуально согласуются с горизонтальными размерами элементов, что также не добавляет комфорта при взгляде на свёрстанный макет.

Хочу предложить нехитрый вариант решения — ограничить минимальный горизонтальный размер фиксированным значением в пикселях, а максимальный сделать относительным в процентном соотношении к ширине окна. Это очень банально решается простыми средствами ещё 2 версии спецификации CSS.

Update: Хочу оговориться, что речь не идёт о классическом эффекте резины и об адаптации под абсолютно все разрешения, скорее лишь про некий разумный диапазон разрешений, под который проектируется макет. В примерах ниже — это классический десктопный диапазон разрешений с горизонтальным габаритом разрешения от 1024 пикселей.

Ещё раз акцентирую внимание: в посте не идёт речь про решение для всех видов устройств и все диапазоны разрешений. В рамках одного макета эта задача не решаема в принципе, для её решения так или иначе потребуется несколько макетов. Мухи отдельно, котлеты отдельно.

Создаём контейнер макета:

Оформляем его незатейливым кодом стиля:

Однако этого решения кому-то может показаться мало в силу того что при очень больших горизонтальных размерах окна опять проявляются проблемы с длиной строк. Это решается настолько же простым дополнительным приёмом: создание дополнительного внешнего контейнера внутри уже описанного и ограничение его максимальной ширины фиксированным значением (мне субъективно кажется, что лучше всего подходят значния в диапазоне 1400—1600 пикселей). Опять же используем лишь средства CSS 2.0. Такое решение вместо предложенного в первом комментарии простого добавления ширины в процентах для исходного контейнера будет работать ещё и в IE, который вплоть до 9 версии не понимает одновременного указания значений.

И немного меняем CSS:

Как видите — решение предельно просто и достаточно универсально, может применяться для любых блочных элементов.

Источник

CSS урок 16. Блочная верстка сайта: резиновый дизайн

Резиновый дизайн и необходимые свойства CSS

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

«Резиновость» достигается за счет того, что определенные слои макета не имеют фиксированную ширину, приспосабливая свои размеры под размеры окна браузера.

Минусом данного типа дизайна являются «разногласия» между браузерами, необходимость применять «хитрости» css-стилей, для того чтобы достичь необходимой кроссбраузерности.

Две колонки в резиновой дизайне

Дизайн CSS две колонки, пожалуй, самый популярный. Создать страницу с таким расположением колонок можно двумя способами, рассмотрим каждый отдельно.

Свойство float для создания эффекта плавающего элемента

Рассмотрим пример, в котором присутствуют следующие блоки, изображенные на рис. 1: шапка (бордовый), меню (светло-серый), контент (белый), подвал (темно-серый).

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 1. Резиновый дизайн сайта в две колонки

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

1. «Разбиваем» все основные элементы страницы на блоки следующим образом:

Заголовок

Контент. 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.

2. Для левой колонки задаем свойства, обязательные при использовании резинового дизайна: float и width
1 вариант:

3. Для правой колонки обязательным является свойство, определяющее внешний отступ от левого края окна браузера ( margin-left ). Этот отступ должен соответствовать ширине левой колонки + 1px или 1%:
1 вариант:

Все остальные свойства зависят от оформления сайта.

Весь код CSS будет выглядеть так:

Результат:

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 2. Левая колонка с фиксированной шириной в резиновом дизайне

Рассмотрим пример, когда фиксированной шириной обладает не левая, а правая колонка.

Код html-структуры остается прежним, меняются лишь CSS-свойства.

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

2. Для правой колонки задаем свойство, определяющее внешний отступ от правого края окна браузера ( margin-right ). Этот отступ должен соответствовать ширине левой колонки + 1px или 1%:
1 вариант:

Результат:

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 3. Правая колонка с фиксированной шириной в резиновом дизайне

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

При использовании данного варианта дизайна для левой или правой колонки устанавливается абсолютное позиционирование с заданием координат.
Например:
Левая колонка:

Правая колонка:

«Резиновость» достигается в данном случае за счет правой колонки, у которой нет определенной ширины.

Выполнение:

Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4

Контент. 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.

Результат:

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 4. Резиновый дизайн сайта с позиционированием

Одинаковая высота колонок

На рис. 4 результат показывает, что колонки имеют неодинаковую высоту. Для того, чтобы колонки приобрели одинаковую высоту есть несколько вариантов использования дополнительных свойств, одним из которых является добавление границы ( border ).

Ссылка 1
Ссылка 2
Ссылка 3

Контент. 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.

Источник

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

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

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

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

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

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновымКак сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновымКак сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым
а. две колонкиб. три колонкив. четыре колонки

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

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

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

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

Табл. 1. Левая колонка заданной ширины

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

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

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

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

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

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

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

Табл. 2. Правая колонка заданной ширины

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

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

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

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

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

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

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

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

Источник

Резиновый трёхколоночный макет

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

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 5.17. Трёхколоночные макеты

Здесь символ процентов (%) означает, что ширина колонки задана в процентах от ширины макета, px — ширина колонки указана в пикселах, а знак бесконечности (∞), что колонка занимает оставшееся пространство. Несмотря на обилие разных макетов, принципы их построения остаются одинаковыми и включают два основных способа: позиционирование и плавающие элементы. Также можно воспользоваться таблицами для создания колонок одинаковой высоты.

Использование позиционирования

Пример 5.13. Две колонки в пикселах или три в процентах

Здесь колонки пронумерованы по порядку, т.е. колонка 1 располагается слева, колонка 2 по центру, а колонка 3 справа.

У позиционирования есть определённый недостаток, который ограничивает применение этого метода — при добавлении подвала он будет скрыт под колонками. Это связано с тем, что у слоя layout нет высоты как таковой, поэтому он не «толкает» слой с подвалом вниз. Если подвал непременно требуется на странице, следует воспользоваться методом построения колонок, основанным на плавающих элементах. Ещё этот метод не работает в IE6 из-за наличия в нём ошибок.

Для макета № 1, в котором ширина первой колонки резиновая, а остальных фиксирована, стиль будет следующим (пример 5.14).

Пример 5.14. Макет № 1

Макеты № 2 (пример 5.15) и № 3 (пример 5.16) построены на том же принципе.

Пример 5.15. Макет № 2

Пример 5.16. Макет № 3

Макет № 4, в котором ширина всех колонок задана в процентах имеет некоторые нюансы. Если требуется одинаковая ширина всех колонок, её можно задать дробно (33.33%), но браузер Opera не умеет работать с дробными значениями процентов, поэтому в нём между колонками появятся «дыры» (рис. 5.18).

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 5.18. Ширина колонок, заданная в дробных процентах

В подобных ситуациях следует перейти на неравные доли, к примеру, 33%, 34%, 33%, как показано в примере 5.17.

Пример 5.17. Макет № 4

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

Оставшиеся макеты, в которых две колонки из трёх резиновые, представляют особую группу, потому что их можно трактовать по-разному. Так, ширина одной колонки указывается в пикселах, другой в процентах от ширины макета, а ширина оставшейся вычисляется автоматически. На рис. 5.19 показаны разные подходы к вычислению ширины колонок на примере макета № 5.

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 5.19. Ширина двух резиновых колонок

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

Первый и второй вариант легко реализуется аналогично коду с двумя колонками в пикселах. Только вместо ширины в px указываем %. В примере 5.18 приведён стиль макета № 5 с первой колонкой заданной в процентах.

Пример 5.18. Макет № 5. Ширина второй колонки вычисляемая

Стиль макета № 5 с вычисляемой первой колонкой показан в примере 5.19.

Пример 5.19. Макет № 5. Ширина первой колонки вычисляемая

Пример 5.20. Макет № 5. Ширина двух колонок в процентах

Построение макета № 6 аналогично макету № 5, поэтому останавливаться на нём не будем. Что касается макета № 7, то для него существует вариант, который может вызвать трудность. Это касается того случая, когда требуется сделать ширину левой и правой колонки вычисляемыми и равными между собой. Для этого ширину первой и третьей колонки следует сделать равной 50% (рис. 5.20).

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 5.20. Макет № 7 с равными по ширине колонками

Чтобы осталось место под вторую колонку, воспользуемся свойством margin-right для первой колонки и margin-left для третьей. Значением этих свойств будет половина ширины второй колонки. Так, если она равна 200px, то получится margin-right : 100px (пример 5.21).

Пример 5.21. Макет № 7. Ширина резиновых колонок одинакова

Значение min-width зависит от макета и содержимого страницы и обычно подбирается опытным путём.

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

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

Макет № 1. Резиновая первая колонка

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Пример 5.22. Макет № 1

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Макет № 2. Резиновая средняя колонка

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Пример 5.23. Макет № 2

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Макет № 3. Резиновая третья колонка

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Пример 5.24. Макет № 3

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Макет № 4. Ширина всех колонок задана в процентах

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Пример 5.25. Макет № 4

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Макет № 5. Ширина двух колонок резиновая

На рис. 5.19 было продемонстрировано, что макет № 5, у которого две резиновые колонки, можно трактовать по-разному.

Ширина средней колонки вычисляемая

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Пример 5.26. Макет 5.1

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Ширина первой колонки вычисляемая

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Это наиболее хитрый макет, поскольку для первой колонки её ширина напрямую не указывается. Но чтобы ограничить контент необходимо для свойства margin-right указать значение совмещающее проценты и пикселы. В CSS2, как уже говорилось, подобное задать нельзя, поэтому добавим внутрь слоя col1 ещё один слой с именем wrap и добавим отступ каждому из этих слоёв. Одному в процентах, другому в пикселах (пример 5.27).

Пример 5.27. Макет 5.2

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Ширина двух колонок в процентах

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

В этом макете общая ширина резиновых колонок принимается за 100%, поэтому нам потребуется дополнительный слой, относительно которого будет отсчитываться ширина внутренних колонок. Этот слой с именем rubber совместно со слоем col3 работает как двухколоночный макет, а внутренние слои col1 и col2 выстраиваются по горизонтали за счёт применения свойства float (пример 5.28).

Пример 5.28. Макет 5.3

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Макеты 6, 7 и их разновидности строятся по тому же принципу, что и макет № 5, за исключением макета № 7, в котором ширина левой и правой колонки резиновая и равна между собой.

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Вначале готовим основу, указываем порядок слоёв в HTML-коде.

Далее устанавливаем ширину всех колонок и их метод обтекания.

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Рис. 5.21. Состыкованные колонки

К тому же в левой колонке текст справа, а в правой колонке текст слева скрывается под фоном центральной колонки. Это будет не заметно, если высота этой колонки большая, но это не всегда возможно. Чтобы преодолеть указанные недостатки, необходимо вложить внутрь крайних колонок ещё по одному слою (в примере он называется wrap ) и уже для них задать цвет фона колонки, необходимые поля и отступы. Окончательный код приведён в примере 5.29.

Пример 5.29. Макет № 7

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Поля и границы в трёхколоночном макете

В тех колонках, где padding или border требуется, но их добавление приведёт к «ломке» макета, можно воспользоваться вложенным слоем и установить необходимые свойства для него.

В этом примере ширина слоя заданная как 200 пикселов меняться не будет, но поля и рамка будут добавлены.

Таблица в качестве колонок

Пример 5.30. Макет № 1

XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx

Добавление свойства padding к селектору TD отменяет действие атрибута cellpadding тега

и добавляет поля к содержимому ячеек. При этом сама ширина колонок никак не изменится.

Для остальных макетов далее показан только стиль, HTML-код останется таким же, как в примере 5.30.

В макете 6.1 ширина первой колонки установлена в пикселах, третьей в процентах, а средняя колонка занимает оставшееся место.

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

Как сделать див резиновым. Смотреть фото Как сделать див резиновым. Смотреть картинку Как сделать див резиновым. Картинка про Как сделать див резиновым. Фото Как сделать див резиновым

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

В примере 5.31 приведён полный код макета № 7.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *