Совсем необязательно использовать только один класс для построения сетки Bootstrap 4. Их можно сочетать в различных вариантах, для того чтобы на одном разрешении экрана (бОльшем, как правило) было, например, 4 колонки, а на меньшем разрешении оставалось 2 колонки.
Комбинация классов
Рассмотрим приведенный выше пример. Для экранов с разрешением от 768px будет действовать класс col-md-3, формирующий 4 колонки. Когда экран станет менее 768px, внешний вид перестроится, сформировав 2 колонки в 2 ряда. И для экранов с разрешением менее 576px колонки разместятся по вертикали друг под другом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div class="row"> <div class="col-md-3 col-sm-6"> <h3>.col-md-3+.col-sm-6</h3> </div> <div class="col-md-3 col-sm-6"> <h3>.col-md-3+.col-sm-6</h3> </div> <div class="col-md-3 col-sm-6"> <h3>.col-md-3+.col-sm-6</h3> </div> <div class="col-md-3 col-sm-6"> <h3>.col-md-3+.col-sm-6</h3> </div> </div><!-- /.row --> |
See the Pen Bootstrap 4 Different Cols by Elen (@ambassador) on CodePen.
Второй блок колонок в примере выше имеет несколько разные соотношения на экранах с разрешением от 768px
(9 и 3 из 12 колонок), а на экранах от 576px до 768px
колонки распределяются как 8+4. Как видно из скриншота Инспектора свойств, ширина большей колонки меняется с 75% до 66.67%.
1 2 3 4 5 6 7 | <div class="row"> <div class="col-md-9 col-sm-8"> <h3>.col-md-9+.col-sm-8</h3> </div> <div class="col-md-3 col-sm-4"> <h3>.col-md-3 + .col-sm-4</h3> </div><!-- /.row --> |
Третий блок колонок в примере вообще не имеет цифры после класса col-sm
, формируя 3 одинаковые колонки на экранах с разрешением от 576px. Для меньших экранов внешний вид перестраивается в 2 колонки сверху (класс col-6
) и одну колонку внизу (col-12
).
1 2 3 4 5 6 7 8 9 10 11 | <div class="row"> <div class="col-sm col-6"> <h3>.col-sm + .col-6</h3> </div> <div class="col-sm col-6"> <h3>.col-sm+.col-6</h3> </div> <div class="col-sm col-12"> <h3>.col-sm+.col-12</h3> </div> </div><!-- /.row --> |
Предупреждение
Не указывайте несколько классов с одной цифрой для одного и того же элемента, т.к. это не имеет смысла: все классы имеют одну и ту же ширину в своих свойствах, но для разных разрешений экранов:
Поэтому выберите то разрешение экрана, на котором колонки должны перестроится в вертикальный ряд и оставьте только его взамен перечисления нескольких, например:
See the Pen Используем один класс вместо нескольких by Elen (@ambassador) on CodePen.
Основой этого примера является следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <div class="row"> <div class="col-lg-6 col-md-6 col-sm-6"> .col-lg-6 .col-md-6 .col-sm-6 </div> <div class="col-sm-6"> .col-lg-6 .col-md-6 .col-sm-6 </div> </div><!-- /.row --> <div class="row"> <div class="col-md-4 col-sm-12"> .col-md-4 + .col-sm-12 </div> <div class="col-md-4 col-12"> .col-md-4 + .col-12 </div> <div class="col-md-4"> .col-md-4 </div> </div> |
При изменение ширины экрана визуально разницы между использованием одного класса и нескольких НЕТ. И добавлять класс .col-*-12
не имеет смысла, т.к. если посмотреть на свойства этих классов, то один из вариантов назначения ширины (width, max-width или flex
) имеет значение 100%
.
Установка ширины одной колонки
Еще одна фишка Bootstrap 4 - это возможность создать колонки, в которых явно (с помощью соответствующего класса) указывается только ширина одной из колонок, а другие колонки имеют ширину, которая рассчитывается браузером автоматически.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <div class="container"> <h2>Установка ширины одной колонки</h2> <div class="row mb-3"> <div class="col bg-danger"> 1 из 3 </div> <div class="col-8 bg-secondary"> 2 из 3 (широкая) .col-8 </div> <div class="col bg-danger"> 3 из 3 </div> </div><!-- /.row --> <div class="row mb-3"> <div class="col bg-info"> 1 из 3 </div> <div class="col-6 bg-warning"> 2 из 3 (широкая) .col-6 </div> <div class="col bg-info"> 3 из 3 </div> </div><!-- /.row --> <div class="row"> <div class="col bg-dark text-white"> 1 из 3 </div> <div class="col-5 bg-success"> 2 из 3 (широкая) .col-5 </div> <div class="col bg-dark text-white"> 3 из 3 </div> </div><!-- /.row --> </div><!-- /.container --> |
В примере явно прослеживается, что средняя колонка становится меньше при уменьшении цифры после префикса col-
в используемом класса.
See the Pen Bootstrap 4 .col-auto-* class by Elen (@ambassador) on CodePen.
Если мы поменяем класс .col на один из классов с префиксами (-lg-, -md-, -sm-
), то колонки будут перестраиваться в зависимости от разрешений экранов в одну колонку. Но на больших разрешениях визуально примеры выглядят одинаково.
See the Pen Bootstrap 4 wide column by Elen (@ambassador) on CodePen.
Использование колонок адаптивной ширины
В Bootstrap 4 появился классcol-{breakpoint}-auto
, который имеет следующие css-правила:
1 2 3 4 5 6 | .col-md-auto { -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; max-width: none; } |
Т.е. его можно использовать для создания колонок, изменяющих свою ширину по ширине содержимого. Но при этом необходимо следить за количеством контента, который будет находится в такой колонке, т.к. свойство max-width: none
подразумевает, что ограничения по ширине нет. Поэтому большое количество текста изменит внешний вид колонок не в лучшую сторону. А вот для небольшого количества контента этот класс отлично подходит.
See the Pen Bootstrap 4 .col-*-auto class by Elen (@ambassador) on CodePen.
Перенос колонок с помощью класса w-100
Для того чтобы колонки размещались по горизонтали, необходимо помещать классы .col-
в <div class="row">
. Фактически класс row формирует строку или ряд с колонками. И для создания нового ряда нужно опять-таки создавать для классов .col-*
обертку из класса .row
. Если же вы не хотите это делать, можно использовать класс w-100
для переноса следующего блока колонок на новую строку (ряд).
Класс w-100
имеет одно единственное свойство width: 100% !important;
, которое работает "на разрыв" ряда колонок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="container"> <h2>Разрыв колонок с помощью класса w-100</h2> <div class="row"> <div class="col bg-danger">Колонка</div> <div class="col bg-dark text-white">Колонка</div> <div class="w-100"></div> <div class="col bg-warning">Колонка</div> <div class="col bg-success">Колонка</div> <div class="col bg-secondary text-white">Колонка</div> <div class="col bg-primary text-white">Колонка</div> <div class="w-100"></div> <div class="col bg-dark text-light">Колонка</div> <div class="col bg-primary text-white">Колонка</div> <div class="col bg-danger text-white">Колонка</div> </div> </div> |
Вот как это выглядит на примере:
See the Pen Разрыв колонок Bootstrap 4 by Elen (@ambassador) on CodePen.