Раньше Bootstrap использовал 12-ти колоночную сетку. Теперь используется новый режим flexbox, но основные приёмы работы с сеткой остались с небольшими изменениями.
Режим flexbox позволяет макету автоматически вычислять размер каждой колонки.
<div class="container">
<div class="row">
<div class="col item">
Половинка
</div>
<div class="col item">
Половинка
</div>
</div>
<div class="row">
<div class="col item">
Одна треть
</div>
<div class="col item">
Одна треть
</div>
<div class="col item">
Одна треть
</div>
</div>
</div>
Безразмерные колонки в сетке flexbox будут поровну делить доступное пространство, всегда заполняя весь ряд.
Можно указать размер для одной колонки, а остальные колонки равномерно распределят оставшееся пространство между собой. Укажем размер у среднего блока. Остальные распределятся поровну.
<div class="container">
<div class="row">
<div class="col item">
(12 - 6) / 2 = 3
</div>
<div class="col-6 item">
6 колонок
</div>
<div class="col item">
(12 - 6) / 2 = 3
</div>
</div>
<div class="row">
<div class="col item">
</div>
<div class="col-5 item">
5 колонок
</div>
<div class="col item">
</div>
</div>
<div class="row">
<div class="col item">
</div>
<div class="col-4 item">
4 колонки
</div>
<div class="col item">
</div>
</div>
</div>
Используя классы col-{breakpoint}-auto, можно создать блок, размер которого будет определяться его содержимым. Также для блока можно задать классы горизонтального выравнивания. В этом случае общий ряд будет сжат до необходимых размеров.
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-lg-2">
1 of 3
</div>
<div class="col-12 col-md-auto">
Слово
</div>
<div class="col col-lg-2">
3 of 3
</div>
</div>
<div class="row justify-content-md-start">
<div class="col col-lg-2 item">
1 of 3
</div>
<div class="col-12 col-md-auto">
Два слова
</div>
<div class="col col-lg-2 item">
3 of 3
</div>
</div>
<div class="row justify-content-md-end">
<div class="col col-lg-2">
1 of 3
</div>
<div class="col-12 col-md-auto">
Здесь три слова
</div>
<div class="col col-lg-2">
3 of 3
</div>
</div>
</div>
Можно оставить стандартное поведение, не сжимая общую ширину.
<div class="container">
<div class="row">
<div class="col">
1 of 3
</div>
<div class="col-12 col-md-auto">
Два слова
</div>
<div class="col col-lg-2">
3 of 3
</div>
</div>
</div>
Вы можете использовать опорные точки для точного задания размеров колонок. В остальных случаях можно ограничиться классами col и col-*.
<div class="row">
<div class="col">col</div>
<div class="col">col</div>
<div class="col">col</div>
<div class="col">col</div>
</div>
<div class="row">
<div class="col-8">col-8</div>
<div class="col-4">col-4</div>
</div>
Используя классы col-sm-*, вы можете создать базовую сеточную систему, которая разместит блоки в виде стопки на телефонах, а затем будет выводить блоки в один ряд.
<div class="row">
<div class="col-sm-8">col-sm-8</div>
<div class="col-sm-4">col-sm-4</div>
</div>
<div class="row">
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
</div>
Можете комбинировать все классы, как вам нужно.
<!-- Stack the columns on mobile by making one full-width and the other half-width -->
<div class="row">
<div class="col col-md-8">.col .col-md-8</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
</div>
<!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
<div class="row">
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
</div>
<!-- Columns are always 50% wide, on mobile and desktop -->
<div class="row">
<div class="col-6">.col-6</div>
<div class="col-6">.col-6</div>
</div>
Flexbox дает два способа вертикального позиционирования колонок.
Выравниваем колонки внутри ряда относительно верха, середины, низа, если позволяет высота. Указываем у row классы flex-items-xs-start, flex-items-xs-center, flex-items-xs-end.
<div class="container">
<div class="row align-items-start color_containter">
<div class="col item">
По верху
</div>
<div class="col item">
По верху
</div>
<div class="col item">
По верху
</div>
</div>
<div class="row align-items-center color_containter">
<div class="col item">
По центру
</div>
<div class="col item">
По центру
</div>
<div class="col item">
По центру
</div>
</div>
<div class="row align-items-end color_containter">
<div class="col item">
По низу
</div>
<div class="col item">
По низу
</div>
<div class="col item">
По низу
</div>
</div>
</div>
Также можно выровнять колонки внутри одного ряда относительно друг друга, если колонки будут использовать классы align-self-start, align-self-center, align-self-end.
<div class="container">
<div class="row color_containter">
<div class="col align-self-start item">
One of three columns
</div>
<div class="col align-self-center item">
One of three columns
</div>
<div class="col align-self-end item">
One of three columns
</div>
</div>
</div>
Создаём блоки, размер которых меньше 12 колонок. Дальше управляем их выравниванием из-за свободного места, указывая у ряда row классы justify-content-start, justify-content-center, justify-content-end. Также обратите внимание на классы justify-content-around, justify-content-between, которые окружают свободно место.
<div class="container">
<div class="row justify-content-start">
<div class="col-4">
По левому краю
</div>
<div class="col-4">
По левому краю
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
По центру
</div>
<div class="col-4">
По центру
</div>
</div>
<div class="row justify-content-end">
<div class="col-4">
По правому краю
</div>
<div class="col-4">
По правому краю
</div>
</div>
<div class="row justify-content-around">
<div class="col-4">
Around
</div>
<div class="col-4">
Around
</div>
</div>
<div class="row justify-content-between">
<div class="col-4">
Between
</div>
<div class="col-4">
Between
</div>
</div>
</div>
Используйте класс .no-gutters, чтобы убрать промежутки между блоками. Класс удаляет отрицательные margins из .row и горизонтальные padding из всех дочерних колонок.
В обычной системе сеток, если нам необходимо поменять порядок колонок, нам нужно использовать push и pull.
Разработчики Bootstrap реализовали встроенное свойство flexbox order на основе трех классов сортировки, которые применим к колонкам col:
<div class="container">
<div class="row">
<div class="col flex-unordered">
Первый, но не первый и не последний
</div>
<div class="col flex-last">
Второй, но последний
</div>
<div class="col flex-first">
Третий, но первый
</div>
</div>
</div>
Для сдвига колонок вправо используйте .offset-md-*, которые увеличивают левый отступ на * колонок. Например, .offset-md-4 сдвигает на четыре колонки.
<div class="container">
<div class="row">
<div class="col-md-4 item">.col-md-4</div>
<div class="col-md-4 offset-md-4 item">.col-md-4 .offset-md-4</div>
</div>
<div class="row">
<div class="col-md-3 offset-md-3 item">.col-md-3 .offset-md-3</div>
<div class="col-md-3 offset-md-3 item">.col-md-3 .offset-md-3</div>
</div>
<div class="row">
<div class="col-md-6 offset-md-3 item">.col-md-6 .offset-md-3</div>
</div>
</div>