Перейти к содержимому

Что такое грид в программировании

  • автор:

CSS Grid понятно для всех

Grid представляет собой пересекающийся набор горизонтальных и вертикальных линий — один набор определяет столбцы, а другой строки. Элементы могут быть помещены в сетку, соответственно строкам и столбцам.

Поддержка браузерами

В 2020 году поддержка браузерами достигает 94 %

Grid контейнер

Мы создаем grid контейнер, объявляя display: grid или display: inline-grid на элементе. Как только мы это сделаем, все прямые дети этого элемента станут элементами сетки.

  

Header

Navbar

Article

Ads

grid-template-rows — это CSS свойство, которое определяет названия линий и путь размера функции grid rows.

CSS свойство grid-row определяет с какой строки в макете сетки будет начинаться элемент, сколько строк будет занимать элемент, или на какой строке завершится элемент в макете сетки. Является сокращенным свойством для свойств grid-row-start и grid-row-end.

Свойство CSS grid-gap является сокращенным свойством для grid-row-gap и grid-column-gap , определяющего желоба между строками и столбцами сетки.

Свойство grid-template-areas определяет шаблон сетки ссылаясь на имена областей, которые заданы с помощью свойства grid-area.

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

С помощью свойства grid-area мы можем назначить каждой из этих областей свое собственное имя. Именование областей еще не создает никакого макета, однако теперь у нас есть именованные области, которые мы можем в нем использовать.

.header < grid-area: header; >.nav < grid-area: nav; >.article < grid-area: article; >.ads
Создаем шаблон сайта с CSS Grid:

Изменяем шаблон

Вы можете изменить шаблон просто перераспределив грид-области в grid-template-areas .

Таким образом, если мы сменим на это:

grid-template-areas: "nav header header" "nav article ads"; > 

То в результате получим такой шаблон:

Гриды с медиа запросами

Одной из сильных сторон гридов является то, что вы можете создать уже совершенно другой шаблон за секунды.

Это делает CSS Grid идеальным для медиа запросов. Мы можем просто переназначить значения в ASCII-графике и обернуть результат в конечный медиа запрос.

@media all and (max-width: 575px) < .row < grid-template-areas: "header" "article" "ads" "nav"; grid-template-rows: 80px 1fr 70px 1fr ; grid-template-columns: 1fr; >> 

В результате получим:

Таким образом, все дело состоит в переназначении значений в свойстве grid-template-areas .

Заключение

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

Я вам советую обратить внимание на данную спецификацию и потратить немного своего времени на ее изучение. Поверьте, в будущем вам это точно пригодится и не важно, пишете вы на React, Angular, Vue (вставьте свое). Grid’ы пришли надолго.

7 основных понятий CSS Grid Layout с примерами, которые помогут начать работу с гридами

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

Обложка поста 7 основных понятий CSS Grid Layout с примерами, которые помогут начать работу с гридами

Максим Петкевич

CSS Grid Layout — это модуль CSS, который определяет систему макета на основе двумерной сетки, оптимизированную для дизайна пользовательского интерфейса.

В заранее определенной гибкой сетке макета мы можем размещать дочерние элементы.

Если мы посмотрим на данные с сайта Can I use то увидим, что CSS Grid Layout на данный момент поддерживается большинством современных браузеров.

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

Давайте изучим CSS Grid Layout на примере страницы с шестью блоками.

Наш изначальный HTML код будет выглядеть так:

 
A
B
C
D
E
F

CSS код, он нам нужен для красоты и наглядности:

* < /* width и height элементов включают в себя значения полей и границ */ box-sizing: border-box; >.grid-init < max-width: 400px; /* максимальная ширина контейнера */ margin: auto; /* центрирование контейнера на странице */ background-color: lightsteelblue; /* фон */ padding: 10px; /* внутренние отступы */ >.box-init < font-size: larger; /* размер шрифта */ color: #fff; /* цвет текста */ border-radius: 5px; /* скругление углов */ background-color: #2196f3; /* цвет фона */ border: 1px solid black; /* граница блока */ padding: 10px; /* внутренние отступы */ /* выравнивание текста по центру блока с помощью CSS Flexbox */ display: flex; align-items: center; justify-content: center; > 

Наша страница будет выглядеть так:

Отлично, красоту мы навели, теперь давайте разберемся как же все-таки создается грид.

Свойства display: grid и display:inline-grid

Для того чтобы создать грид, для контейнера с классом .grid мы добавляем свойство display: grid . У display: inline-grid , разница с обычным grid такая же, как у inline-block c block .
Итак, запишем:

.grid

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

А представляет он из себя одноколоночный грид с шестью рядами.

Свойства grid-gap, row-gap и column-gap

Для задания отступов между ячейками грида используется grid-gap . Зададим ему значение в 10px.

.grid

В свою очередь grid-gap объединяет два свойства:

  1. row-gap — это расстояние между рядами.
  2. column-gap — это расстояние между колонками.

Если использовать отдельные свойства, то код будет выглядеть следующим образом.

.grid

Свойство grid-template-columns

Теперь добавим колонки.

.grid

Ширину мы можем указывать в любых CSS единицах длины, в процентах и в единицах fr.

fr (от fraction — часть) это новая форма единицы измерения созданная для гридов, которая позволяет добавлять столько колонок, сколько мы захотим, не заботясь о конкретном значении ширины колонки. Свободное место распределяется между такими колонками пропорционально количеству fr.

1fr 1fr 1fr — такая запись означает, что мы создаем 3 колонки одинаковой ширины.

Ширина грида равна 400px. Если мы зададим для grid-template-columns следующие значения: 1.5fr 2fr 1fr , то ширина всех колонок будет равна 1.5fr + 2fr + 1fr= 4.5fr.

Теперь вычислим ширину каждой колонки. Первая колонка будет иметь ширину 1.5fr / 4.5fr * 400px. Что в итоге равно 133px. Соответственно рассчитаем остальные значения.

Вторая колонка 2fr / 4.5fr * 400px = 178px, третья колонка 1fr / 4.5fr * 400px = 89px. Т.е. мы могли задать колонки таким образом:

grid-template-columns: 133px 178px 89px;

В сумме общая ширина равна 400px.

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

Свойство grid-template-rows

Это свойство позволяет добавлять строки в грид.

.grid

Давайте отвлечемся и посмотрим подробнее, что из себя представляет наш грид и разберем несколько новых понятий.

Грид-контейнер — элемент, в котором находится сетка грида.

Грид-линии — невидимые вертикальные и горизонтальные линии, разделяющие грид на ячейки. У грид линий есть нумерация, а также им можно задавать имена. На изображении помечены красными (вертикальные линии) и фиолетовыми стрелками (горизонтальные линии).

Грид-полосы — пространство, которое ограничено парой соседних грид-линий. Бывают вертикальные и горизонтальные.

Грид-ячейки — то, что получается на пересечении двух грид-полос. По аналогии с ячейками таблицы. На картинке это синие блоки с буквами, в количестве шести штук.

Грид-области — прямоугольники из смежных грид-ячеек. Каждая грид-область ограничена двумя парами грид-линий (парой вертикальных и парой горизонтальных).

Грид-интервалы — пустые пространства между соседними грид-полосами.

Свойства grid-auto-rows, grid-auto-columns и grid-auto-flow

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

Если мы не указываем grid-template-rows , это значит, что в случае надобности строки будут добавляться автоматически и будут неявными.

Высота строки на неявных гридах должна выставляться с помощью свойства grid-auto-rows .

В свою очередь для колонок есть свойство grid-auto-columns которое выставляет ширину колонки.

Свойство grid-auto-flow позволяет указать, что нужно использовать для авто-размещения элементов, строки или колонки. По умолчанию его значение равно row .

Рассмотрим пример, показывающий неявное добавление колонок. Для этого мы зададим grid-auto-flow равным column . Также уменьшим количество явно заданных колонок до двух. В этом примере в последней ячейке пропишем текст FF.

.grid

Хочу заметить важную вещь, это то что ячейки выстраиваются вдоль колонок, а не строк. A и B в первой колонке, C и D во второй и т.д.

Как видим, третья колонка добавилась автоматически и ее ширина формируется на основе контента в самой широкой ячейке. Давайте укажем ширину для этой колонки.

Получаем уже привычный нашему глазу грид.

Функция repeat()

Эта функция позволяет сокращать объявление колонок и строк в случае повторяющихся значений.

Например у нас есть такой код.

.grid

Используя функцию repeat мы можем переписать наш код следующим образом.

.grid

Функция minmax(), auto-fill и auto-fit

Рассмотрим пример с использованием этой функции.

.grid

Запись minmax(120px, 1fr) означает, что минимальный размер столбца равен 120px, а максимальный — 1fr.

auto-fill делает наш грид адаптивным, то есть в нем элементы меняют свои позиции с тем, как мы меняем размер окна браузера.

Ширина окна браузера 450px:

Ширина окна браузера 300px:

Ширина окна браузера 200px:

auto-fit в многострочных гридах по своему действию похож на auto-fill . Разница проявляется в однострочных гридах. С auto-fit пустые полосы сжимаются до нуля, т.е. они как будто исчезают.

Чтобы показать разницу, рассмотрим следующие примеры:

С auto-fill у нас три колонки

grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));

С auto-fit пустая колонка исчезает

grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));

Свойства grid-template-areas, grid-area

Есть разные способы создания грид-ячеек и грид-областей. Один из способов — это использование грид-линий, за это отвечают свойства grid-column-start , grid-column-end , grid-row-start и grid-row-end . При таком подходе код довольно сложно читать и в случае серьезного изменения макета, придется переписывать большой объем кода. Поэтому мы рассмотрим второй способ — использование grid-template-areas и grid-area .

Для начала отредактируем наш html-код и используем в нем семантические теги.

 
HEADER
MAIN
SECTION
FOOTER

C помощью grid-area зададим псевдонимы для наших блоков.

.l-header < grid-area: my-header; >.l-nav < grid-area: my-nav; >.l-main < grid-area: my-main; >.l-aside < grid-area: my-aside; >.l-section < grid-area: my-section; >.l-footer

С помощью grid-template-areas определим шаблон страницы.

.grid

У нас получился грид 3×4 (3 колонки, 4 ряда). Также у нас есть 6 грид-областей.
Мы можем изменить шаблон просто изменив грид-области в grid-template-areas .

Это делается легко и быстро. Давайте попробуем.

.grid

Вот и все, мы изменили шаблон, потратив минимум времени!

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

Grid Layout

Grid Layout представляет специальный модуль CSS3, который позволяет позиционировать элементы в виде сетки или таблицы. Как и Flexbox, Grid Layout представляет гибкий подход к компоновке элементов, только если flexbox размещает вложенные элементы в одном направлении — по горизонтали в виде столбиков или по вертикали в виде строк, то Grid позиционирует элементы сразу в двух направлениях — в виде строк и столбцов, образуя тем самым таблицу.

Полностью спецификацию модуля Grid Layout можно посмотреть на странице www.w3.org/TR/css-grid-1/.

Поддержка браузерами

При использовании Grid Layout следует учитывать, что только относительно недавно производители браузеров стали внедрять поддержку этого модуля в свои браузеры. Ниже приводится для браузеров список версий, начиная с которых была внедрена полноценная поддержка Grid Layout:

  • Google Chrome — с версии 57
  • Mozilla Firefox — с версии 52
  • Opera — с версии 44
  • Safari — с версии 10.1
  • iOS Safari — с версии 10.3

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

Кроме того, IE (начиная с версии 10) и Microsoft Edge имеет лишь частичную поддержку модуля. А Android Browser, Opera Mini, UC Browser вовсе ее не имеют.

Создание grid-контейнера

Основой для определения компоновки Grid Layout является grid container, внутри которого размещаются элементы. Для создания grid-контейнера необходимо присвоить его стилевому свойству display одно из двух значений: grid или inline-grid .

Создадим простейшую веб-страницу, которая применяет Grid Layout:

     Grid Layout в CSS3 .grid-container < border: solid 2px #000; display: grid; >.grid-item < text-align:center; font-size: 1.1em; padding: 1.5em; color: white; >.color1 .color2 .color3 .color4  
Grid Item 1
Grid Item 2
Grid Item 3
Grid Item 4
Grid Item 5

Для контейнера grid-container установлено свойство display:grid . В нем располагается пять grid-элементов.

Grid Container в Grid Layout в CSS3

Если значение grid определяет контейнер как блочный элемент, то значение inline-grid определяет элемент как строчный (inline):

     Grid Layout в CSS3 .grid-container < border: solid 2px #000; display: inline-grid; >.grid-item < box-sizing: border-box; text-align:center; font-size: 1.1em; padding: 1.5em; color: white; >.color1 .color2 .color3 .color4  
Grid Item 1
Grid Item 2
Grid Item 3
Grid Item 4
Grid Item 5

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

Введение — CSS: Вёрстка на Grid

Познакомившись с позиционированием и Flex, вы могли заметить, что при всём многообразии доступных средств верстать непосредственно макеты с использованием этих инструментов не так просто, как хотелось бы. Добавив множество техник, Flex не решил главной проблемы — быстрого создания сетки для сайта. Для создания хорошей структуры приходится делать дополнительные вложенности, ведь Flex по своей сути является одномерной системой. Мы можем удобно управлять контентом либо по оси x, либо по оси y. Это отлично при работе с контентом, но не при создании структуры страницы.

Flex был призван изменить стандарты верстки, избавив разработчиков от неудобных позиционирований и бесконечного страдания с float. Хоть ему это отлично удалось, но встала главная проблема: «а что делать со сложными шаблонами?». Количество flex контейнеров росло пропорционально количеству нестандартных элементов. При этом управлять таким зоопарком становилось всё труднее и труднее. Не имея четкой структуры сетки веб-страницы, которая была бы описана в одном месте, всё превращалось в невероятно хрупкую структуру. Она ломалась быстрее, чем вы успевали моргнуть.

Для создания структуры страницы появился еще один мощный инструмент — CSS Grid Layout или просто Grid. CSS Grid Layout, в отличие от Flex, является двумерной системой компоновки контента на странице.

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

Практика

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

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

CodePen

Другая возможность применить навыки, полученные при работе с курсом — использование сервиса CodePen . Вы можете создать свой pen, внутри которого экспериментировать с позиционированием.

Также в каждом уроке курса будут представлены примеры, которые подгружаются с CodePen. Они доступны для изучения, а также вы имеете возможность в режиме реального времени вносить правки и следить за результатом. Не пропускайте такую возможность.

Как подготовиться к этому курсу

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *