Лучший опыт

В чем разница между Flexbox, CSS Grid и Bootstrap.

В чем разница между Flexbox, CSS Grid и Bootstrap.

Содержание
CSS Grid Vs. Flexbox
Flexbox vs. Бутстрап
Пример сетки Bootstrap
Пример сетки Flexbox
CSS Grid против Bootstrap
Пример CSS-сетки
Пример сетки Bootstrap
Создание уникальных макетов

Что составляет веб-страницу? Даже самые простые требуют как минимум нескольких заголовков, абзацев и изображений, а также, возможно, панели навигации, боковой панели и нижнего колонтитула.

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

Раньше владельцам сайтов приходилось «взламывать» свой CSS, используя элементы таблиц, строчные блоки, поплавки и различные типы позиционирования. Для создания некоторых сложных макетов также требовался JavaScript. Вместе эти техники были в некоторой степени эффективны, но не обладали достаточной силой. Им не хватало не только некоторых ключевых функций, таких как вертикальное центрирование, из-за чего было неприятно заставить их работать в разных браузерах. Они также значительно усложнили поддержку кода сайта.

Чтобы упростить создание и обслуживание веб-страниц, были созданы адаптивные модели макетов. Среди наиболее популярных – Flexbox, CSS Grid и Bootstrap, каждый из которых широко поддерживается на разных платформах и в браузерах.

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

CSS Grid Vs. Flexbox

CSS Grid и Flexbox – это модели макета, которые имеют схожие черты и могут использоваться вместе. Ключевое отличие состоит в том, что CSS Grid можно использовать для создания двумерных макетов, а Flexbox можно использовать только для создания одномерных макетов. Это означает, что вы можете размещать компоненты по осям X и Y в CSS Grid и только по одной оси в Flexbox.

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

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

Ниже приведена полезная иллюстрация от макета, который возможен с помощью CSS Grid.

В чем разница между Flexbox, CSS Grid и Bootstrap

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

Ниже приведена еще одна полезная иллюстрация от , которая показывает макет, который возможен с помощью Flexbox.

В чем разница между Flexbox, CSS Grid и Bootstrap

В основатель Крис Койер сделал важное замечание. Как и Flexbox, CSS Grid можно использовать для создания одномерных макетов (что часто бывает). Flexbox также можно использовать для создания двухмерных макетов. Поэтому было бы неверно сказать, что основное отличие состоит в том, что CSS Grid предназначен исключительно для двумерных макетов, а Flexbox – для одного. Просто CSS Grid позволяет создавать 2D-макеты так, как это не делает Flexbox.

С помощью Flexbox вы можете создавать многострочные гибкие контейнеры. Вам просто нужно применить свойство flex-wrap со значением «wrap» к вашему контейнеру. Таким образом, если ваши элементы слишком велики для отображения в одной строке в определенном окне просмотра, они будут переноситься на другую строку, а не сжиматься, чтобы поместиться в одну строку.

Это в некотором смысле создаст строки и столбцы. Но то, как обернутые гибкие элементы выстраиваются в ряд, не зависит от того, как они выстраиваются в предыдущей строке. Это потому, что вы не можете контролировать, где заканчиваются гибкие элементы, как в CSS Grid; гибкие элементы просто перемещаются вдоль одной оси, а затем оборачиваются соответствующим образом. В результате макет будет больше похож на кирпичи, чем на сетку.

Вот параллельное сравнение макета, созданного с помощью Flexbox, и макета, созданного с помощью CSS Grid, которое демонстрирует этот эффект.

В чем разница между Flexbox, CSS Grid и Bootstrap

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

Flexbox vs. Бутстрап

Чтобы начать это сравнение, важно понимать, что сеточная система Bootstrap 4 построена на Flexbox. Что отличает Bootstrap от использования только Flexbox, так это процесс написания фактического кода. С помощью Bootstrap вы можете создать сетку, используя только HTML. С Flexbox вы должны использовать HTML и CSS. Давайте подробнее рассмотрим каждый процесс ниже.

Bootstrap предлагает систему из двенадцати столбцов, пять уровней реагирования по умолчанию, переменные и миксины Sass, а также десятки предопределенных классов. Это означает, что вы можете использовать его сетку flexbox, ориентированную на мобильные устройства, для создания уникальных и сложных макетов без необходимости создавать их с нуля – это также означает, что вам необходимо понимать ее уникальный синтаксис.

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

Большинству владельцев сайтов не нужно больше 12 столбцов или даже около 12. В этом случае вам просто нужно, чтобы ваши столбцы суммировались до двенадцати, чтобы они отображались в одном горизонтальном блоке. Это означает, что если я хочу создать два столбца, один из которых вдвое меньше другого, я бы использовал классы .col-4 и .col-8.

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

Пять стандартных уровней реагирования сеточной системы Bootstrap 4 перечислены ниже. Обратите внимание, что значение, указанное в пикселях, является точкой останова, при которой столбцы автоматически накладываются друг на друга.

Префикс класса размер устройства максимальная ширина контейнера
.с- очень маленькие устройства менее 576 пикселей
.col-sm- маленькие устройства равно или больше 576 пикселей
.col-md- средние устройства равно или больше 768 пикселей
.col-lg- большие устройства равно или больше 992 пикселей
.col-xl- сверхбольшие устройства равно или больше 1200 пикселей

Поскольку система столбцов и адаптивные уровни работают вместе, вы часто будете видеть число и префикс, определяющие класс .col. Мы увидим это в примере ниже.

Пример сетки Bootstrap

Допустим, я хотел создать шесть столбцов одинаковой ширины, которые накладывались друг на друга на мобильных телефонах или экранах шириной менее 576 пикселей. Для этого я бы использовал класс .col-sm-2.

Применяя этот класс к шести элементам

, я бы затем обернул их в строку, как показано ниже.
     <div class="row"> <div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div> <div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div> <div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div> <div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div> <div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div> <div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div> </div> </div>   

Вы увидите, что я добавил несколько встроенных стилей, чтобы более четко видеть каждый отдельный столбец в интерфейсе. Вот результат:

В чем разница между Flexbox, CSS Grid и Bootstrap

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

Пример сетки Flexbox

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

и заключил их в элемент
с классом .flex-container. Вот HTML:
     <div class="flex-container"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div>   

Затем я бы добавил CSS в заголовок своей страницы.

Используя селектор классов .flex-container, я бы фактически сделал контейнер гибким, установив для свойства display значение flex. Затем я могу указать высоту контейнера, а также цвет фона, как показано ниже.

     .flex-container { display: flex; height: 250px; background-color: gray; }   

Чтобы стилизовать элементы гибкости внутри контейнера, я бы использовал селектор .flex-container> div. Затем я могу установить цвет фона, ширину, поля и размер шрифта для каждого элемента. Я также могу использовать свойство text-align, чтобы установить выравнивание шрифта в каждом элементе, и свойство line-height, чтобы установить, как далеко от верха гибкого контейнера будет отображаться шрифт. Вот этот CSS:

     .flex-container > div { background-color: #f1f1f1; width: 100px; margin: 10px; text-align: center; line-height: 60px; font-size: 48px; }   

Вот результат:

В чем разница между Flexbox, CSS Grid и Bootstrap

Если я хочу, чтобы гибкие элементы заполняли весь контейнер, независимо от того, как изменится размер окна просмотра, я могу просто добавить свойство flex-base в свой CSS. Давайте установим его на 1 1 150 пикселей, чтобы элементы увеличивались и уменьшались с гибкости в 150 пикселей. Вот новый CSS:

     .flex-container { display: flex; height: 250px; background-color: gray; }   .flex-container > div { background-color: #f1f1f1; width: 100px; margin: 10px; text-align: center; line-height: 50px; font-size: 48px; flex: 1 1 150px; }   

Вот результат:

В чем разница между Flexbox, CSS Grid и Bootstrap

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

CSS Grid против Bootstrap

Теперь, когда мы сравнили CSS Grid с Flexbox и Flexbox с Bootstrap, давайте сравним CSS Grid и Bootstrap.

Если вы пытаетесь решить, какую из этих двух моделей макета использовать, спросите себя, закреплена ли у вас структура макета или контент. Если вы сначала делаете макет, то есть хотите создать макет, а затем разместить в нем элементы, тогда вам будет лучше с CSS Grid. Но если вы ориентируетесь на контент, то есть у вас есть элементы, которые вы хотите поместить в контейнер и равномерно распределить, тогда используйте Bootstrap. Поскольку Bootstrap построен с использованием Flexbox, вы можете применить это рассуждение при сравнении CSS Grid и Flexbox.

Теперь давайте посмотрим на код конкретных примеров сеток, которые можно построить с помощью CSS Grid и Bootstrap соответственно.

Пример CSS-сетки

Создать контейнер-сетку просто. Вам просто нужно применить свойство display к элементу и установить значение grid или inline-grid. Стиль – вот где бывает сложно.

Допустим, я хочу создать макет из пяти элементов. Вот HTML, с которого я бы начал:

     <div class="wrapper"> <div class="box1">One</div> <div class="box2">Two</div> <div class="box3">Three</div> <div class="box4">Four</div> <div class="box5">Five</div> </div>   

Затем я бы сделал его контейнером сетки и изменил цвет фона на серый с помощью этого CSS:

     .wrapper { display: grid; background-color: gray; }   

Теперь предположим, что я хочу создать три колонки одинаковой ширины. Вы можете использовать свойства grid-template-columns и grid-template-rows, чтобы определить строки и столбцы в вашей сетке и их размер (или вы можете просто определить их). Я могу использовать любую единицу длины, но я буду использовать единицу измерения fr. Единица fr представляет собой долю доступного пространства в контейнере сетки, а не установленное количество, и обеспечивает рост и сокращение дорожек сетки в соответствии с доступным пространством. CSS для моего примера теперь будет выглядеть так:

     .wrapper { display: grid; background-color: gray; grid-template-columns: 1fr, 1fr, 1fr; }   

Обратите внимание, что мы использовали свойство grid-template-columns для явного определения столбцов в нашей сетке, но мы не использовали свойства grid-template-rows для явного определения строк. Это не означает, что в вашей сетке CSS нет строк; это просто означает, что строки определены неявно. Вы можете установить размер дорожек, созданных в неявной сетке, с помощью свойств grid-auto-rows и grid-auto-columns.

Допустим, я хочу убедиться, что дорожки, созданные в моей неявной сетке, имеют высоту 100 пикселей. Затем я бы добавил следующий CSS, чтобы окончательный результат был:

     .wrapper { display: grid; background-color: gray; grid-template-columns: 1fr, 1fr, 1fr; grid-auto-rows: 100px; }   

Наконец, мне нужно поместить пять элементов в контейнер сетки. С CSS Grid вы используете свойства grid-column-start, grid-column-end, grid-row-start и grid-row-end и устанавливаете значения для разных линий сетки. Линии сетки в основном представляют собой горизонтальные и вертикальные разделители дочерних элементов в сетке. Линии сетки этой сетки из трех столбцов и двух строк, например, пронумерованы ниже:

В чем разница между Flexbox, CSS Grid и Bootstrap

Поэтому, если я хочу, чтобы мой box1 простирался от крайней левой линии сетки до крайней правой, я бы поместил его напротив строки столбца 1 и растянул на строку столбца 4. И если бы я хотел, чтобы он охватывал одну неявную дорожку строки, то я бы начал ее на строке 1 и заканчивал на строке 2, как показано ниже. У меня также есть CSS для стилизации box2 и box4.

     .box1 { grid-column-start: 1; grid-column-end: 4; grid-row-start: 1; grid-row-end: 2; }   .box2 { grid-column-start: 1; grid-row-start: 2; grid-row-end: 4; } .box4 { grid-column-start: 2; grid-row-start: 2; grid-row-end: 4; }   

Результат будет:

В чем разница между Flexbox, CSS Grid и Bootstrap

Вы можете щелкнуть ссылку на источник, чтобы увидеть, какой CSS я использовал для стилизации элементов сетки. Это из приведенного выше примера Flexbox.

Пример сетки Bootstrap

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

     <div class="row"> <div class="col-md-8" style="background-color:yellow;">.col-md-8</div> <div class="col-6 col-md-4" style="background-color:lightyellow;">.col-6 .col-md-4</div> </div>   

Я хочу создать еще одну строку с тремя столбцами, которые занимают половину области просмотра на мобильном устройстве и 1/3 на рабочем столе. Тогда я бы использовал следующее:

     <div class="row"> <div class="col-6 col-md-4" style="background-color:lightblue;">.col-6 .col-md-4</div> <div class="col-6 col-md-4" style="background-color:blue;">.col-6 .col-md-4</div> <div class="col-6 col-md-4" style="background-color:navy;">.col-6 .col-md-4</div> </div>   

Наконец, я хочу сделать одну последнюю строку с двумя столбцами шириной 50%, независимо от размера экрана. Тогда я бы использовал следующий HTML:

     <div class="row"> <div class="col-6" style="background-color:lightgreen;">.col-6</div> <div class="col-6" style="background-color:green;">.col-6</div> </div> </div>   

В совокупности это результат:

В чем разница между Flexbox, CSS Grid и Bootstrap

Создание уникальных макетов

Flexbox, CSS Grid и Bootstrap – это адаптивные модели макетов, которые позволяют создавать адаптивные и уникальные макеты, которые работают во многих различных браузерах и устройствах. Независимо от того, какую модель вы выберете, вам понадобится некоторое знание HTML и CSS.

записи: