Разметка с помощью float
Один из методов создания разметки веб-страниц основывается на свойстве float
. Мы изучали его во втором разделе учебника и показывали базовый пример использования float для верстки макета с несколькими колонками.
На изображении ниже показан еще один пример того, как создать четырехколочный макет при помощи свойства float:
Каждая колонка занимает ¼, или 25% всей ширины экрана. Четыре колонки выстраиваются одна за другой, четко помещаясь в один ряд, поскольку их ширина в сумме составляет 100%. Если увеличить ширину колонки даже на одну долю процента либо добавить сбоку margin
, последняя колонка переместится вниз, поскольку уже не будет помещаться в родительский контейнер:
Чтобы поменять колонки местами, начиная отсчет не слева направо, а наоборот, нужно всего лишь поменять значение свойства float
с left
на right
:
Обратите внимание, что значение свойства clear
для элемента #footer
мы также изменили на противоположное. В данном случае, чтобы облегчить задачу и избавиться от необходимости изменять значение свойства сброса обтекания при изменении свойства float
, достаточно записать clear: both
— тогда обтекание для футера будет отменено с двух сторон сразу.
Поскольку по умолчанию блочные элементы занимают всю ширину экрана, важно определять через CSS ширину для float-элементов, чтобы освободить горизонтальное место под эти элементы и, собственно, увидеть сам эффект обтекания. Ширина может быть как фиксированной, так и относительной (как в нашем примере).
Допустим, если мы укажем фиксированную ширину 960 пикселей для родительского контейнера, содержащего четыре плавающих блока шириной 25% каждый, то ширина одного блока составит 240 пикселей:
К слову, чтобы родительский блок .container
был горизонтально выровнен по центру, а не прилегал к левому краю, мы добавили к нему свойство margin
со значением auto
. Это сокращенная запись, но вы можете добиться того же эффекта, если запишете стили отдельно для левого и правого полей (только они играют роль в горизонтальном центрировании):
.container { margin-left: auto; margin-right: auto; }
Изменение порядка колонок
Свойство float позволяет не только менять визуальный порядок следования колонок, но и перемещать любые из них выборочно. Можно перенести три столбца вправо, а один — влево и т. д. Главное, чтобы всем столбцам хватило места в одном ряду.
Возможность такого перемещения позволяет не привязываться к порядку размещения блоков в HTML. К примеру, если ваш сайдбар должен находиться слева на странице, но вы не хотите, чтобы в HTML-документе он располагался первым, как на примере ниже, вам на помощь придет float.
У вас может возникнуть вопрос, зачем важен порядок тегов в HTML. Что ж, во-первых, это может быть обычное нежелание видеть в HTML-коде сначала длинный перечень второстепенной информации (которая часто содержится в сайдбаре), и только затем — основное содержимое. Во-вторых, присутствие в верхней части документа большого количества маловажного контента может создавать неудобства для людей, которые используют экранный диктор, ведь программа будет читать сначала текст сайдбара, после чего перейдет к информации, которая интересует посетителя.
Еще одна причина — поисковые системы. Нередко роботы читают лишь небольшой отрывок кода HTML, и, если ваша веб-страница весьма длинная, а важная для поисковых систем информация находится где-то в ее конце, робот может до нее не дойти.
На скриншоте ниже показано, каким образом можно изменить порядок следования HTML-тегов, при этом сохранив внешний вид страницы идентичным. Мы обернули блок с основным контентом и первый сайдбар в тег <div>
с классом .wrapper
. Это дало возможность внутри него поменять местами два вышеупомянутых элемента.
Как видите, визуально всё осталось неизменным, но в HTML-структуре произошли изменения. Теперь основное содержимое находится в начале страницы, что делает сайт более доступным для пользователей с экранным диктором, а также для поисковых систем, у которых есть квоты относительно сканируемой информации.
Вложенные float-элементы
Как было показано на примере выше, можно вкладывать плавающие элементы в такие же плавающие элементы, тем самым добиваясь полезных эффектов. Возможно, такой подход выглядит странно, но он позволяет создавать колонки внутри колонок, что нередко бывает нужно при верстке макетов со сложным дизайном.
Кроме этого, заключение элементов в контейнер позволяет контролировать их ширину и предотвращать «съезжание» элементов вниз из-за нехватки места, как было показано в начале урока.
Немного о grid-системах
Сетка (англ. grid) использовалась дизайнерами еще до эры Интернета. Grid-система — это набор колонок и рядов, которые помогают правильно разместить элементы макета.
Самая распространенная grid-система имеет 12 колонок одинаковой ширины, между которыми, как правило, есть небольшое расстояние. Такое количество столбцов вовсе не означает, что вам нужно создавать сайт с двенадцатью колонками. Вы можете сделать макет с любым количеством колонок, разделив 12-колоночную сетку на группы. Допустим, если макет состоит из трех колонок, то можно сделать эти колонки одинаковой ширины, каждая из которых будет занимать 4 столбца grid-системы. Либо под две колонки отвести половину сетки (6 столбцов), тогда как третья колонка займет оставшееся пространство сетки (еще 6 столбцов).
Пример того, как выглядит 12-колоночная сетка:
Подобная сетка гибкая и простая в использовании, она позволяет создавать разнообразные макеты, в то же время придерживаясь общей измерительной схемы. Зачастую в CSS grid-системах есть ряды и колонки, которые через классы именуются как .row
и .column
(либо .col
) соответственно. Колонки помещаются в ряды, а внутрь колонок — содержимое либо вложенные ряды с колонками. Одним из распространенных CSS-фреймворков, которые используют grid-систему, является Bootstrap.
Далее в учебнике: проблемы float-элементов.