Как работает система сеток в Bootstrap 4

Bootstrap — это популярнейшая фронтэнд библиотека компонентов интерфейса. Компания Twitter выпустила ее в 2011 году, а спустя год после релиза у Bootstrap появилась 12-колоночная сетка и поддержка адаптивности. На протяжении долгого времени проекты создавались с использованием Bootstrap 3. Но, как мы знаем, время не стоит на месте, и в январе 2018 года официально был выпущен Bootstrap 4 с обновленной системой сеток, о которой мы и поговорим в данной статье.

Другие компоненты здесь рассматриваться не будут, о них можно прочитать в документации.

Система сеток Bootstrap используется для верстки адаптивных макетов, т.е. таких, которые изменяют свой внешний вид в зависимости от разрешения экрана.

Сетка в Bootstrap состоит из строк (.row) и столбцов (.col) внутри одного или нескольких контейнеров (.container).

Использовать её можно отдельно, без подключения целой библиотеки. Для этого скачиваем с сайта архив стилей и js-скриптов и подключаем из этого архива к нашей HTML странице всего один файл bootstrap-grid.css, содержащий только сетку.

Вот самый простой пример использования сетки, который создает одну большую колонку:

<div class="container">
  <div class="row">
    <div class="col">Текст внутри колонки</div>
  </div>
</div>

Сделаем две колонки:

<div class="container">
  <div class="row">
    <div class="col">Левая колонка</div>
    <div class="col">Правая колонка</div>
  </div>
</div>

Базовые принципы работы данной сетки просты, а их понимание сэкономит вам кучу времени при верстке сайта.

Правила сетки:

  • Колонки(.col) обязательно должны быть дочерним элементом cтроки (.row).
  • Строки(.row) должны состоять только из колонок.
  • Строки(.row) должны размещаться внутри контейнера (.container).

Эти правила очень важны! Система сеток не будет работать корректно, если они не будут соблюдаться.

Контейнер

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

Не игнорируйте контейнер! Он необходим для выравнивания левых и правых краев макета.

Bootstrap 4 имеет две разновидности контейнера:

1) У .container фиксированная ширина и наш шаблон центрируется

<div class="container" ></div>

2)  .container-fluid растягивается по всей ширине экрана

<div class="container-fluid"></div>

В контейнере можно размещать несколько строк (.row); также вы можете размещать несколько контейнеров на одной странице. Все зависит от дизайна вашего макета.

Строки и Колонки

Единственная цель .row — содержать одну или несколько колонок. Есть одно простое правило, про которое не стоит забывать — никогда не размещайте контент внутри .row, его нужно размещать внутри колонок.

<div class="row">
  <div class="col">Вот так правильно</div>
</div>

Важно помнить, что .row в Bootstrap 4 display:flex (в предыдущей версии фреймворка колонки создавались с использованием обтекания) и благодаря этому они имеют одинаковую высоту, а горизонтальное и вертикальное выравнивание легко осуществляется при использовании Flex and Auto-margin Utility классов.

Пришло время подробнее взглянуть на колонки и строки и узнать как они работают вместе. Существуют несколько типов колонок и различные способы использования их в макете.

Колонки:

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

Классическая сетка в Bootstrap состоит из 12 колонок:

Чтобы реализовать 6 колонок, нам необходимо выбрать и создать 6 div’ов с классом col-2 (12/6 = 2).

Для наглядности примеры с другим количеством колонок:

Но количество колонок не ограничено числом 12. Благодаря Flexbox’у, используемому в Bootstrap 4, появилась функция автоколонок. Колонки без заданной ширины дают вам больше гибкости при разработке макетов.

Когда единицы колонок в одной строке (.row) превышают количество 12, происходит следующее: колонки из одной строки располагаются горизонтально, а затем укладываются вертикально вниз. Эта вертикальная “укладка” носит название “Обтекание столбцов”.

Ширину колонки и обтекание можно контролировать, используя различные уровни адаптивной сетки (брейкпойнты):

У колонок могут бы дочерние строки и колонки. Этот метод называется вложенностью:

Как сделать адаптивный дизайн с Bootstrap 4

Bootstrap 4 имеет пять уровней адаптивной сетки (брейкпойнтов), которые вы могли заметить в предыдущих примерах с колонками (col-lg-4, col-md).

Брейкпойнты основаны на ширине экрана, т.е. это разрешение экрана, на котором будут происходить изменения.

  • (xs) —  ширина экрана < 576px (уровень по умолчанию)
  • sm —  ширина экрана ≥ 576px
  • md — ширина экрана ≥ 768px
  • lg —  ширина экрана ≥ 992px
  • xl —  ширина экрана ≥ 1200px

Почему я ставлю xs в скобки, в отличии от других брейкпойнтов? С тех пор как xs (extra-small) является уровнем по умолчанию, -xs, используемый в Bootstrap 3 больше не используется в Bootstrap 4. Так, вместо записи col-xs-6, мы просто пишем col-6.

Bootstrap использует css медиа-запросы для создания брейкпойнтов. Они позволяют контролировать поведение колонок на разном разрешении экрана.

Например: 2 столбца, ширина каждого 50%:

<div class="container">
  <div class="row">
    <div class="col-sm-6">Column 1</div>
    <div class="col-sm-6">Column 2</div>
  </div>
</div>

Класс .col-sm-6 означает, что мы используем 6 из 12 колонок (50%) на устройствах с шириной экрана ≥ 576px. Когда ширина экрана станет меньше  576px, то 2 колонки начнут занимать не 50% экрана (как это было раньше), а 100%.

Это связано с тем, что (xs) является брейкпойнтом по умолчанию. Поскольку  здесь не указана ширина столбца по умолчанию, ширина 50% была применена только на  576 пикселей, а шире для sm брейкпойнта.

Первым делом телефоны!

Брекопинты для больших разрешений экрана переопределяют брейкпойнты для экранов поменьше.

Если вам нужны изменения только на col-sm-3, то можно написать:

<div class="col-sm-3">..</div>

Если же вы меняете ширину колонок в зависимости от разрешения экрана, то нужно писать так (первым ставим класс с брейкпойнтом поменьше):

<div class="col-sm-3 col-md-4">..</div>

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

Давайте рассмотрим несколько примеров с автошириной.

3 колонки равной ширины. «Cols» остаются горизонтальными на всех размерах и не складываются вертикально:

<div class="container"> 
  <div class="row"> 
    <div class="col">1</div>
    <div class="col">2</div> 
    <div class="col">3</div>
  </div> 
</div>

3 колонки равной ширины (адаптивные). В этом примере колонки остаются горизонтальными до брейкпойнта sm в 576px, а затем располагаются вертикально:

<div class="container"> 
  <div class="row"> 
    <div class="col-sm">1</div>
    <div class="col-sm">2</div> 
    <div class="col-sm">3</div>
  </div> 
</div>

Ключевые моменты для создания адаптивного дизайна с использованием сетки Bootstrap 4:

Колонки будут складываться вертикально (и занимать 100%) при меньшей ширине экрана, если вы не используете определенный класс col * в вашей разметке HTML.

Меньшие классы сетки также применяются к более крупным экранам, если они не переопределены специально для экранов шириной побольше. Таким образом,
<div class="col-md-6"></div>

фактически совпадает с

<div class="col-md-6 col-lg-6"></div>

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

Текст: Дарья Чужайкина, Junior programmist, Bytex

  • Tweet
  • Share 0
  • VKontakte