За последние несколько лет,Flexbox
Он стал самым популярным фреймворком компоновки во внешнем интерфейсе, что неудивительно, потому что мы можем легко использовать его для выравнивания элементов.
Однако в передней деревне есть еще один, называемыйGrid
ребенок, он иFlexbox
Есть много функциональных сходств, некоторые из которых болееFlexbox
Это хорошо, но есть и недостатки.
Это также станет местом борьбы разработчиков, что им следует использовать? В этой статье мы сравним два модуля на макро- и микроуровнях.
1D против 2D
Flexbox
для одномерного макета,Grid
для 2D макета
Это означает, что если вы размещаете только в одном направлении (например, размещаете три кнопки внутри заголовка), вам нужно использоватьFlexbox
он будетGrid
Более гибкий, может быть реализован с меньшим количеством кода и проще в обслуживании.
Однако, если вы собираетесь создать полный макет в обоих измерениях, используя как строки, так и столбцы, вам следует использоватьGrid
двухмерный
при этих обстоятельствах,Grid
будет более гибким, упростит ваши теги и упростит поддержку кода.
Вы можете использовать комбинацию обоих, в приведенном выше примере идеальный способ сделать это - использоватьGrid
для разметки страницы используйтеFlexbox
Чтобы выровнять содержимое в шапке.
Сначала контент против макета
Еще одно основное различие между ними заключается в том, чтоFlexbox
содержательный,Grid
Судя по макету, это звучит немного абстрактно, поясним на практическом примере.
Мы будем использовать заголовок, упомянутый в предыдущем абзаце, HTML-код которого выглядит следующим образом:
<header>
<div>Home</div>
<div>Search</div>
<div>Logout</div>
</header>
В использованииFlexbox
Раньше элементы div внутри располагались друг над другом:
Flexbox header
когда мы добавилиdisplay:flex
После этого они будут красиво ложиться в линию.
header {
display:flex;
}
Чтобы сделать кнопку выхода справа, мы просто назначаем ей поле:
header > div:nth-child(3) {
margin-left: auto;
}
Эффект следующий:
Стоит отметить: пусть элемент сам решает, где его разместить, мы, кромеdisplay: flex
Не добавляйте ничего снаружи.
ЭтоFlexbox
а такжеGrid
Основное отличие, когда мы используемGrid
Чтобы создать этот заголовок, разница будет более очевидной.
несмотря на использование
Grid
Создание одномерного заголовка — плохая идея, но реализация его в этой статье — хорошее упражнение, потому что оно учит насFlexbox
а такжеGrid
основное отличие
Grid header
При использованииGrid
Там будет множество способов. Я собираюсь сделать очень простой, нашGrid
Есть десять столбцов, каждый шириной в одну единицу.
header {
display: grid;
grid-template-columns: repeat(10, 1fr);
}
он смотрит иFlexbox
то же решение, что и
Тем не менее, мы можем увидеть, в чем разница между ними с точки зрения Бога, давайте используем элемент цензуры хрома, чтобы увидеть:
Наиболее важным отличием является то, что этот метод должен сначала определить столбцы макета. Начните с определения ширины столбца, прежде чем мы сможем разместить элементы в доступных ячейках.
Этот способ заставил нас разделить наш заголовк столбцов номер
Если мы не изменимGrid
, иначе мы застряли бы с 10 столбцами, но вFlexbox
Нас не побеспокоит эта беда.
Чтобы вывести выход из системы справа, мы поместим его в десятый столбец:
header > div:nth-child(3) {
grid-column: 10;
}
При осмотре элемента это выглядит так:
Мы не можем просто добавитьmargin-left: auto;
Поскольку он уже находится в третьей ячейке, чтобы переместить его, мы должны найти другую ячейку, чтобы поставить ее.
Связывать
Теперь давайте посмотрим, как использовать обаGrid
а такжеFlexbox
Чтобы включить заголовок в наш макет, давайте сначала создадим макет.
Теги следующие:
<div class="container">
<header>HEADER</header>
<aside>MENU</aside>
<main>CONTENT</main>
<footer>FOOTER</footer>
</div>
И затем CSS:
.container {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: 50px 350px 50px;
}
поместить элемент вGrid
:
header {
grid-column: span 12;
}
aside {
grid-column: span 2;
}
main {
grid-column: span 10;
}
footer {
grid-column: span 12;
}
Все, что нужно, это выложить шапку: ставим изGrid
Элементы преобразуются вFlexbox
контейнер.
header {
display: flex;
}
Теперь ставим logout справа:
header > div:nth-child(3) {
margin-left: auto;
}
Теперь мы оба используемGrid
а такжеFlexbox
идеальная планировка. Вот два контейнера:
Итак, теперь вы должны понятьFlexbox
а такжеGrid
Разница, но также знаю, как объединить два.
Поддержка браузера
До истечения срока этой статьи 77% веб-сайтов с трафиком в мире поддерживалиGrid
, это число продолжает расти.
Я верю, что 2018 год будет
Grid
году он совершит прорыв и станет обязательным навыком для фронтенд-разработчиков, как и в прошлые несколько летFlexbox
Такой же.