CSS Grid Layout растет в браузере каждый день, и мы можем отправить CSS Grid на производство. Быстрое принятие CSS Grid было поистине замечательным.
Прежде чем мы перейдем к созданию адаптивного портфолио сайта с помощью CSS Grid, давайте разберем пару вещей: CSS Grid не заменяет Flexbox. Это даже не замена поплавков. На самом деле, вы можете понять, что мы использовали Flexbox для того, чтобы сделать CSS Grid намного лучше. Но вместо того, чтобы думать о замене, мы можем думать в терминах комбинации.
Представьте себе арахисовое масло и желе сэндвич. Арахисовое масло и желе отлично подходят сами по себе, но когда они собираются вместе, рождается новая вещь и происходит волшебство.
Вот как выглядят наши инструменты макета сайта. Они отлично подходят к тому, что они делают индивидуально, но когда они сочетаются, происходит волшебство, и мы можем создавать новые захватывающие макеты. В этом случае мы создадим собственный веб-проект PB & J с помощью CSS Grid и Flexbox.
Содержание статьи
01. Настройте свою разметку
Броское описание нашего исследования. Мы много работали.
Тематическое исследование
Мы будем дублировать этот элемент списка и все в нем шесть раз, чтобы у нас были предметы для игры. Если вам интересно, мы решили использовать элемент ul здесь, потому что это список записей. Не стесняйтесь использовать все, что вам нравится.
Внутри элемента списка у нас есть div с классом .boxes__text-wrapper который будет содержать заголовок тематического исследования и сопровождающего его описания.
02. Создать базовые стили
body {
font-family: Avenir, sans-serif;
margin: 2rem auto;
ширина: 95%;
}
h2,
п {
margin: 0;
}
ul {
list-style: none;
заполнение: 0;
margin: 0;
}
.boxes> * {
padding: .5rem;
background-color: # 333;
белый цвет;
}
Мы изменили шрифт на Avenir. Мы удалим маржу из нашего заголовка и абзаца и сбросим неупорядоченный список. Мы также дадим каждому элементу списка некоторые стили по умолчанию, чтобы помочь нам увидеть, где они находятся.
03. Настройте свою сетку
.boxes {
отображение: сетка;
grid-auto-rows: minmax (125px, авто);
сетчатый зазор: .5rem;
}
Сетка будет складывать наши элементы друг над другом, потому что по умолчанию имеется только один столбец. Мы создадим пространство между каждым конкретным исследованием, используя grid-gap — это позволяет нам добавить желоб между строками и столбцами.
Забудьте добавить маркер к столбцам только для того, чтобы требовать сложные nth-child селекторов; водосточные желоба появляются только между колоннами или рядами, никогда после или перед колонкой или row.grid-gap является сокращением сетки-столбца-пробела и . Обычно мы используем longhand, но мы будем перезаписывать оба, поскольку браузер растет, поэтому мы будем использовать сокращенную версию.
Далее мы будем использовать сетку-авто-строки чтобы сообщить нашему контейнеру сетки высоту новых строк. Сетка создаст новые строки, чтобы разместить весь наш контент. Мы можем контролировать размер этих автоматически создаваемых строк с помощью свойства grid-auto-rows . Мы используем новую функцию, доступную для нас: minmax () . С minmax () мы можем указать минимальный размер и максимальный размер.
. С нашим кодом мы говорим, что хотим, чтобы наши ряды составляли минимум 120 пикселей и максимум авто. Мы используем auto здесь, потому что хотим, чтобы наши строки росли, если это оправдывает его.
04. Настроить большую совместимость с браузером
@media screen и (min-width: 40em) {
.boxes {
grid-template-columns: repeat (6, 1fr);
сетчатый зазор: 2px;
}
}
grid-template-columns — это свойство, которое мы используем, чтобы сообщить нашей сетке, сколько столбцов должно существовать. Он принимает все единицы длины, которые мы знаем и любим, такие как rem em px проценты, vw vh и fr .
fr — это новое подразделение, которое мы получаем с помощью макета таблицы CSS. С его помощью мы можем сказать браузеру делать математику вместо нас — отлично.
Говоря браузеру, чтобы создать шесть столбцов одной фракции, браузер рассчитает ширину нашего контейнера сетки и разделит его на шесть равных столбцов. Кроме того, поскольку сетка умна, она будет делить оставшееся пространство после вычисления указанного желоба.
05. Стиль отдельных элементов
.boxes li {
изображение на заднем плане:
линейный градиент (rgba (0,0,0,0), rgba (0,0,0,0,8)),
URL (путь / к / изображение);
размер фона: обложка;
дисплей: flex;
align-items: flex-end;
}
Это фоновое изображение было бесплатным изображением Unsplash, но не стесняйтесь использовать любое изображение, которое вы хотели бы. Я также привожу Flexbox в микс, чтобы выровнять наш текст в нижней части наших ящиков. Вы еще этого не увидите, но по мере того как мы помещаем каждую коробку, вы, в конце концов, увидите ее работу.
06. Поместите предметы на Grid
Сетка позволяет легко сортировать наши элементы Grid, но мы хотели бы. Но это только начало
К сожалению, у Grid нет возможности автоматически размещать элементы в макете сетки, которые мы видели в начале. К счастью для нас, однако, Grid дает нам инструменты, чтобы сделать это вручную довольно легко. В этом уроке мы будем e nth-child, чтобы разместить каждый элемент списка. На веб-сайте для производства мы советуем использовать класс, который при правильном планировании мог бы позволить автоматизировать макеты, подобные этому, на контент-тяжелом сайте.
Давайте начнем с нашего первого элемента.
@media screen и (min-width: 40em) {
.boxes li: nth-child (1) {
grid-column: 1 / -1;
строка сетки: диапазон 3;
}
}
. Мы будем размещать все наши стили размещения внутри этого медиа-запроса, который мы писали ранее, потому что мы хотим, чтобы этот макет произошел после того, как наш браузер равен 40 или более. С nth-child мы нацеливаем первый элемент списка. CSS Grid позволяет нам легко размещать наши элементы с помощью столбца сетки и строки сетки. Существует много разных способов указать, где должны быть элементы, но здесь мы говорим, что наш элемент начинается с строки столбца один и охватывает весь контейнер с -1.
Затем, со строкой-сеткой, мы говорим элемент, чтобы охватить три строки. Как мы узнаем, что три строки будут размером, который мы хотим? Ну, мы указали размер этих строк с помощью grid-auto-rows несколько мгновений назад, и если мы не удовлетворены ими, мы сможем изменить минимальный размер.
Давайте поместим остальные наши предметы.
@media screen и (min-width: 40em) {
.boxes li: nth-child (2) {
grid-column: span 2;
строка сетки: диапазон 7;
}
.boxes li: nth-child (3) {
grid-column: span 4;
строка сетки: диапазон 3;
}
.boxes li: nth-child (4) {
grid-column: span 2;
строка сетки: диапазон 4;
}
.boxes li: nth-child (5),
.boxes li: nth-child (6) {
grid-column: span 2;
row-row: span 2;
}
}
Разве это не удивительно, насколько нам помогает контрольная сетка? Имея всего несколько строк кода, мы можем собрать полностью отзывчивый макет, который не сломается, если добавится больше элементов.
Конечно, они могут выглядеть немного неудобно, потому что по умолчанию они будут занимать только один столбец и строку сетки, но это не нарушает наш макет. Если бы мы делали это с поплавками, фиксированными ширинами и высотами, мы были бы привязаны, если бы было добавлено больше контента.
Быстро обойти старые браузеры
Хорошо, пришло время обратитесь к слону в комнате. «Как насчет старых браузеров?» Ответ на этот вопрос такой же, как и для любой новой функции в CSS: используйте запросы функций и охватывайте каскад. Функциональные запросы очень хорошо поддерживаются, и там, где они есть, мы не можем помещать наш резерв в первую очередь. Например, мы напишем что-то по строкам:
. Ваш селектор {
дисплей: flex;
}
/ * Ваш сетевой код * /
@supports (display: grid) {
отображение: сетка;
grid-template-columns: repeat (3, 1fr);
сетчатый зазор: 1rem 2rem;
}
Написание нашего кода таким образом означает, что если браузер понимает Grid Layout, он будет использовать это вместо Flexbox. Кроме того, поскольку мы охватываем каскад, браузеры, которые не понимают функциональные запросы, будут игнорировать их и уже иметь необходимую им информацию. Возможно, нам придется планировать, как мы пишем наши стили немного больше, чем обычно, но, делая это, мы можем создавать великолепные макеты с разумными резервными копиями.
Кроме того, со временем будет больше и больше больше поддержки CSS Grid. Подумайте, как здорово было бы потом удалить наши резервные копии и оставить все связанные с Grid CSS. По мере того, как вы узнаете больше о Grid, вы поймете, что он делает много вещей, которые мы делаем сейчас, с гораздо меньшим количеством CSS.
Эта статья изначально появилась в net magazine ведущий мировой журнал для разработчиков и веб-дизайнеров. Подпишитесь здесь .
Подробнее: