0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В прошлом уроке мы создали 12-колоночную сетку. При этом все элементы в ней располагались исключительно друг за другом и имели ширину одной колонки. Конечно же в реальных проектах это редкая ситуация. Зачастую каждый элемент имеет своё уникальное расположение, и редко они стоят просто друг за другом по горизонтали.</p>
1
<p>В прошлом уроке мы создали 12-колоночную сетку. При этом все элементы в ней располагались исключительно друг за другом и имели ширину одной колонки. Конечно же в реальных проектах это редкая ситуация. Зачастую каждый элемент имеет своё уникальное расположение, и редко они стоят просто друг за другом по горизонтали.</p>
2
<p>В одном из первых уроков упоминалось, что все<em>Grid-линии</em>имеют порядковые номера. Каждая<em>Grid-линия</em>имеет 2 значения: порядковый номер при подсчёте слева направо и номер при подсчёте справа налево. Причём в последнем случае номера имеют отрицательное значение. Посмотрим, как это выглядит на примере обычной сетки.</p>
2
<p>В одном из первых уроков упоминалось, что все<em>Grid-линии</em>имеют порядковые номера. Каждая<em>Grid-линия</em>имеет 2 значения: порядковый номер при подсчёте слева направо и номер при подсчёте справа налево. Причём в последнем случае номера имеют отрицательное значение. Посмотрим, как это выглядит на примере обычной сетки.</p>
3
<p>По вертикали в данной сетке 5<em>Grid-линий</em>. Самая первая имеет 2 порядковых номера:<em>1</em>и<em>-5</em>. По горизонтали 4<em>Grid-линий</em>. Самая нижняя из них имеет порядковые номера<em>4</em>и<em>-1</em>.</p>
3
<p>По вертикали в данной сетке 5<em>Grid-линий</em>. Самая первая имеет 2 порядковых номера:<em>1</em>и<em>-5</em>. По горизонтали 4<em>Grid-линий</em>. Самая нижняя из них имеет порядковые номера<em>4</em>и<em>-1</em>.</p>
4
<p>Данные номера можно использовать для привязки элементов к конкретным<em>Grid-линиям</em>. Обратите внимание, что при использовании<em>Grid</em>мы уже меньше оперируем такими понятиями, как ширина и высота элемента. Теперь эти две характеристики отданы на откуп колонкам и рядам. Именно от них зависит, какого размера будет элемент внутри сетки.</p>
4
<p>Данные номера можно использовать для привязки элементов к конкретным<em>Grid-линиям</em>. Обратите внимание, что при использовании<em>Grid</em>мы уже меньше оперируем такими понятиями, как ширина и высота элемента. Теперь эти две характеристики отданы на откуп колонкам и рядам. Именно от них зависит, какого размера будет элемент внутри сетки.</p>
5
<p>Вернёмся к примеру из прошлого урока. В нём мы реализовали 12-колоночную сетку, внутри которой расположены три элемента.</p>
5
<p>Вернёмся к примеру из прошлого урока. В нём мы реализовали 12-колоночную сетку, внутри которой расположены три элемента.</p>
6
<p><a>https://codepen.io/hexlet/pen/BajRRWm</a></p>
6
<p><a>https://codepen.io/hexlet/pen/BajRRWm</a></p>
7
<p>Теперь, зная порядковые номера всех<em>Grid-линий</em>расположим наши элементы в следующем порядке:</p>
7
<p>Теперь, зная порядковые номера всех<em>Grid-линий</em>расположим наши элементы в следующем порядке:</p>
8
<ul><li>Первый элемент будет занимать 12 колонок, начиная с<em>Grid-линии</em>номер 1. По вертикали он займёт 2 ряда.</li>
8
<ul><li>Первый элемент будет занимать 12 колонок, начиная с<em>Grid-линии</em>номер 1. По вертикали он займёт 2 ряда.</li>
9
<li>Второй элемент должен быть расположен ниже первого элемента и займёт 4 колонки, начиная с первой.</li>
9
<li>Второй элемент должен быть расположен ниже первого элемента и займёт 4 колонки, начиная с первой.</li>
10
<li>Третий элемент займёт оставшиеся 8 колонок рядом со вторым элементом.</li>
10
<li>Третий элемент займёт оставшиеся 8 колонок рядом со вторым элементом.</li>
11
</ul><p>В конечном итоге получится типичная структура 2-колоночного макета. Для расположения элементов по<em>Grid-линиям</em>в<em>CSS Grid Layout</em>существует 4 свойства:</p>
11
</ul><p>В конечном итоге получится типичная структура 2-колоночного макета. Для расположения элементов по<em>Grid-линиям</em>в<em>CSS Grid Layout</em>существует 4 свойства:</p>
12
<ul><li>grid-column-start - указывает на начальную вертикальную<em>Grid-линию</em>расположения элемента.</li>
12
<ul><li>grid-column-start - указывает на начальную вертикальную<em>Grid-линию</em>расположения элемента.</li>
13
<li>grid-column-end - указывает на конечную вертикальную<em>Grid-линию</em>расположения элемента. Обратите внимание, что значение указывает<strong>до</strong>какой колонки располагать элемент. Сама колонка, указанная в этом свойстве не включается. Если вы хотите включить и указанную колонку, то необходимо прибавить единицу. Например для 12-колоночного макета указывается значение 13, если вы хотите включить последнюю колонку.</li>
13
<li>grid-column-end - указывает на конечную вертикальную<em>Grid-линию</em>расположения элемента. Обратите внимание, что значение указывает<strong>до</strong>какой колонки располагать элемент. Сама колонка, указанная в этом свойстве не включается. Если вы хотите включить и указанную колонку, то необходимо прибавить единицу. Например для 12-колоночного макета указывается значение 13, если вы хотите включить последнюю колонку.</li>
14
<li>grid-row-start - указывает на начальную горизонтальную<em>Grid-линию</em>расположения элемента.</li>
14
<li>grid-row-start - указывает на начальную горизонтальную<em>Grid-линию</em>расположения элемента.</li>
15
<li>grid-row-end - указывает на конечную горизонтальную<em>Grid-линию</em>расположения элемента. Как и в случае с вертикальной<em>Grid-линией</em>свойство указывает<strong>до</strong>какого ряда располагать элемент.</li>
15
<li>grid-row-end - указывает на конечную горизонтальную<em>Grid-линию</em>расположения элемента. Как и в случае с вертикальной<em>Grid-линией</em>свойство указывает<strong>до</strong>какого ряда располагать элемент.</li>
16
</ul><p>Используя данные свойства мы можем не только задать начальные позиции, от которых отрисуется элемент, но и конечные, что даст ширину элементу. Выставим необходимые свойства для всех трёх блоков. Добавим немного семантики.</p>
16
</ul><p>Используя данные свойства мы можем не только задать начальные позиции, от которых отрисуется элемент, но и конечные, что даст ширину элементу. Выставим необходимые свойства для всех трёх блоков. Добавим немного семантики.</p>
17
<p><a>https://codepen.io/hexlet/pen/NWxvqdg</a></p>
17
<p><a>https://codepen.io/hexlet/pen/NWxvqdg</a></p>
18
<p>Обратите внимание, что для шапки указано значение grid-column-start. Это может показаться излишним, ведь блок и так стартует самым первым от первой колонки. Это справедливо для тех случаев, если не указана конечная<em>Grid-линия</em>. Если убрать свойство grid-column-start, то элемент как бы начнёт расширяться не слева направо, а справа налево.</p>
18
<p>Обратите внимание, что для шапки указано значение grid-column-start. Это может показаться излишним, ведь блок и так стартует самым первым от первой колонки. Это справедливо для тех случаев, если не указана конечная<em>Grid-линия</em>. Если убрать свойство grid-column-start, то элемент как бы начнёт расширяться не слева направо, а справа налево.</p>
19
<p><a>https://codepen.io/hexlet/pen/XWXavrd</a></p>
19
<p><a>https://codepen.io/hexlet/pen/XWXavrd</a></p>
20
<p>Для удобного использования этих свойств существуют сокращённые версии записи. Они позволяют записать начальные и конечные значения используя всего одно свойство. Для указания начальной и конечной полосы по горизонтали используется свойство grid-column. Для такой же записи, но по вертикали используется свойство grid-row. В качестве значения указывают начальную и конечную полосу, разделённые слэшем<em>/</em>.</p>
20
<p>Для удобного использования этих свойств существуют сокращённые версии записи. Они позволяют записать начальные и конечные значения используя всего одно свойство. Для указания начальной и конечной полосы по горизонтали используется свойство grid-column. Для такой же записи, но по вертикали используется свойство grid-row. В качестве значения указывают начальную и конечную полосу, разделённые слэшем<em>/</em>.</p>
21
<p>Используя сокращённые версии записи пример выше можно записать следующим образом:</p>
21
<p>Используя сокращённые версии записи пример выше можно записать следующим образом:</p>
22
<p>Интересным приёмом при использовании позиционирования элементов внутри полос является использование отрицательных значений. Так как каждая полоса имеет два значения, то обращаться к ним возможно и с помощью отрицательных значений. Это особенно полезно при растягивании элемента на всю ширину контейнера. Вместо подсчёта количества полос, в качестве конечного значения можно указать<em>-1</em>. Это автоматически растянет элемент до последней полосы. Больше не нужно будет держать в голове количество полос и менять такие элементы при изменении сетки.</p>
22
<p>Интересным приёмом при использовании позиционирования элементов внутри полос является использование отрицательных значений. Так как каждая полоса имеет два значения, то обращаться к ним возможно и с помощью отрицательных значений. Это особенно полезно при растягивании элемента на всю ширину контейнера. Вместо подсчёта количества полос, в качестве конечного значения можно указать<em>-1</em>. Это автоматически растянет элемент до последней полосы. Больше не нужно будет держать в голове количество полос и менять такие элементы при изменении сетки.</p>
23
<p>В качестве примера растянем шапку макета используя отрицательное конечное значение.</p>
23
<p>В качестве примера растянем шапку макета используя отрицательное конечное значение.</p>
24
<p><a>https://codepen.io/hexlet/pen/bGEZGmg</a></p>
24
<p><a>https://codepen.io/hexlet/pen/bGEZGmg</a></p>
25
<h2>Ключевое слово span</h2>
25
<h2>Ключевое слово span</h2>
26
<p>При вёрстке макетов зачастую неудобно знать, с какой полосы начинается элемент и на какой заканчивается. Гораздо нагляднее знать начальную полосу, откуда отрисовывается элемент и количество колонок, которые он должен занять. Текущими средствами, которые изучались, сделать это невозможно.</p>
26
<p>При вёрстке макетов зачастую неудобно знать, с какой полосы начинается элемент и на какой заканчивается. Гораздо нагляднее знать начальную полосу, откуда отрисовывается элемент и количество колонок, которые он должен занять. Текущими средствами, которые изучались, сделать это невозможно.</p>
27
<p>Для решения этой задачи разработчики стандарта внесли ключевое слово<strong>span</strong>, указывающее количество ячеек, которые необходимо охватить элементу при расположении внутри сетки. Теперь вместо указания конечного индекса полосы, можно использовать синтаксис: span <количество ячеек>.</p>
27
<p>Для решения этой задачи разработчики стандарта внесли ключевое слово<strong>span</strong>, указывающее количество ячеек, которые необходимо охватить элементу при расположении внутри сетки. Теперь вместо указания конечного индекса полосы, можно использовать синтаксис: span <количество ячеек>.</p>
28
<p>Продолжим работу с двухколоночным макетом. При создании шапки был использован подход с отрицательным значением конечной полосы, по которой шапка должна расположиться. Перейдём к двум колонкам ниже. Используя ключевое слово<strong>span</strong>, возможно сократить код и сделать его более понятным для восприятия.</p>
28
<p>Продолжим работу с двухколоночным макетом. При создании шапки был использован подход с отрицательным значением конечной полосы, по которой шапка должна расположиться. Перейдём к двум колонкам ниже. Используя ключевое слово<strong>span</strong>, возможно сократить код и сделать его более понятным для восприятия.</p>
29
<p><a>https://codepen.io/hexlet/pen/rNxgyMJ</a></p>
29
<p><a>https://codepen.io/hexlet/pen/rNxgyMJ</a></p>
30
<p>Интересной особенностью является использование в качестве значения только ключевого слова<em>span</em>. В этом случае браузер разместит элемент с тем количеством строк/колонок, которое вы указали. Например, следующая запись создаст элемент шириной в 2 колонки:</p>
30
<p>Интересной особенностью является использование в качестве значения только ключевого слова<em>span</em>. В этом случае браузер разместит элемент с тем количеством строк/колонок, которое вы указали. Например, следующая запись создаст элемент шириной в 2 колонки:</p>
31
<p>Это полезно при компоновке элементов внутри сетки. Благодаря такому подходу возможно создать собственный "фреймворк", в котором классы будут отвечать за количество колонок занятых блоком.</p>
31
<p>Это полезно при компоновке элементов внутри сетки. Благодаря такому подходу возможно создать собственный "фреймворк", в котором классы будут отвечать за количество колонок занятых блоком.</p>
32
<p><a>https://codepen.io/hexlet/pen/ExPzWwd</a></p>
32
<p><a>https://codepen.io/hexlet/pen/ExPzWwd</a></p>
33
<h2>Именование линий</h2>
33
<h2>Именование линий</h2>
34
<p>Для удобства и более удобного прочтения<em>CSS</em>, помимо использования индексов линий, можно дать им имена. Это могут быть любые названия, которые опишут ту или иную линию. В дальнейшем именно такими именами и можно будет оперировать. Это удобно при создании сложных макетов, так как постоянно держать в голове откуда начинаются различные блоки и на какой линии они заканчиваются - это плохая идея. Количество ошибок будет расти по мере усложнения макета. В случае с именами всё гораздо проще, так как они чётко описывают<em>Grid-линию</em>понятным для разработчика именем.</p>
34
<p>Для удобства и более удобного прочтения<em>CSS</em>, помимо использования индексов линий, можно дать им имена. Это могут быть любые названия, которые опишут ту или иную линию. В дальнейшем именно такими именами и можно будет оперировать. Это удобно при создании сложных макетов, так как постоянно держать в голове откуда начинаются различные блоки и на какой линии они заканчиваются - это плохая идея. Количество ошибок будет расти по мере усложнения макета. В случае с именами всё гораздо проще, так как они чётко описывают<em>Grid-линию</em>понятным для разработчика именем.</p>
35
<p>Для создания именованных<em>Grid-линий</em>используется следующий синтаксис свойств grid-template-columns и grid-template-rows:<em>[Название линии] ширина полосы после линии</em>. Вы можете подставлять любое количество различных имён, причём непосредственно в уже свёрстанном макете. Такая запись не повредит текущему шаблону.</p>
35
<p>Для создания именованных<em>Grid-линий</em>используется следующий синтаксис свойств grid-template-columns и grid-template-rows:<em>[Название линии] ширина полосы после линии</em>. Вы можете подставлять любое количество различных имён, причём непосредственно в уже свёрстанном макете. Такая запись не повредит текущему шаблону.</p>
36
<p>Добавим в наш двухколоночный макет именованные линии для обозначения начала каждой из областей. Используем их для обозначения стартовых рядов и колонок. Таких именованных линий будет 4:</p>
36
<p>Добавим в наш двухколоночный макет именованные линии для обозначения начала каждой из областей. Используем их для обозначения стартовых рядов и колонок. Таких именованных линий будет 4:</p>
37
<ol><li><em>header-top</em>- Самая верхняя линия, от которой отрисовывается шапка сайта.</li>
37
<ol><li><em>header-top</em>- Самая верхняя линия, от которой отрисовывается шапка сайта.</li>
38
<li><em>content-begin</em>- Линия, откуда начинается основной контент сайта. В данном случае<em>aside</em>и<em>main</em>. Используем её как ограничитель высоты шапки.</li>
38
<li><em>content-begin</em>- Линия, откуда начинается основной контент сайта. В данном случае<em>aside</em>и<em>main</em>. Используем её как ограничитель высоты шапки.</li>
39
<li><em>sidebar-begin</em>- Левая линия, от которой начинается отрисовываться<em>aside</em>.</li>
39
<li><em>sidebar-begin</em>- Левая линия, от которой начинается отрисовываться<em>aside</em>.</li>
40
<li><em>main-begin</em>- Линия, от которой начинается<em>main</em>. Воспользуемся ею для ограничения ширины<em>aside</em>.</li>
40
<li><em>main-begin</em>- Линия, от которой начинается<em>main</em>. Воспользуемся ею для ограничения ширины<em>aside</em>.</li>
41
</ol><p>Подставим имена в уже существующий<em>CSS</em>и посмотрим, как они записываются:</p>
41
</ol><p>Подставим имена в уже существующий<em>CSS</em>и посмотрим, как они записываются:</p>
42
<p>Разберём следующую строку: grid-template-columns: [sidebar-begin] 1fr repeat(3, 1fr) [main-begin] 1fr repeat(7, 1fr);. Её можно разделить на 4 части:</p>
42
<p>Разберём следующую строку: grid-template-columns: [sidebar-begin] 1fr repeat(3, 1fr) [main-begin] 1fr repeat(7, 1fr);. Её можно разделить на 4 части:</p>
43
<ul><li>[sidebar-begin] 1fr. Как и было описано, создаём именованную линию с именем<em>sidebar-begin</em>и полосу шириной в 1 фракцию.</li>
43
<ul><li>[sidebar-begin] 1fr. Как и было описано, создаём именованную линию с именем<em>sidebar-begin</em>и полосу шириной в 1 фракцию.</li>
44
<li>repeat(3, 1fr). Уже изученная вами запись, которая создаст 3 полосы с шириной 1 фракция каждая.</li>
44
<li>repeat(3, 1fr). Уже изученная вами запись, которая создаст 3 полосы с шириной 1 фракция каждая.</li>
45
<li>[main-begin] 1fr. Создаётся именованная линия<em>main-begin</em>. Ширина полосы после линии составит 1 фракцию.</li>
45
<li>[main-begin] 1fr. Создаётся именованная линия<em>main-begin</em>. Ширина полосы после линии составит 1 фракцию.</li>
46
<li>repeat(7, 1fr). Создаётся 7 полос с шириной 1 фракция каждая.</li>
46
<li>repeat(7, 1fr). Создаётся 7 полос с шириной 1 фракция каждая.</li>
47
</ul><p>Теперь данные имена можно использовать в изученных свойствах grid-column-start, grid-column-end, grid-row-start и grid-row-end.</p>
47
</ul><p>Теперь данные имена можно использовать в изученных свойствах grid-column-start, grid-column-end, grid-row-start и grid-row-end.</p>
48
<p><a>https://codepen.io/hexlet/pen/ZEQJgyp</a></p>
48
<p><a>https://codepen.io/hexlet/pen/ZEQJgyp</a></p>
49
<p><strong>Важно:</strong>создание именованных линий не "отнимает" у них индексы. Вы всё ещё можете обращаться к этим линиям как по индексу (положительному или отрицательному), так и по их именам.</p>
49
<p><strong>Важно:</strong>создание именованных линий не "отнимает" у них индексы. Вы всё ещё можете обращаться к этим линиям как по индексу (положительному или отрицательному), так и по их именам.</p>
50
<p>Помимо именования<em>Grid-линий</em>разработчики дали возможность именовать целые области. Как вы помните, область - это несколько полос, которые объединены едиными<em>Grid-линиями</em>. Как же именование областей может помочь при создании макета? На самом деле этот инструмент является одним из прорывных в создании дизайна в<em>CSS</em>. Это свойство позволяет не просто задать имена каким-то абстрактным областям, но и визуализировать сетку с помощью этих имён. Одним из недостатков такого способа является его громоздкость. Давайте разберёмся с этим на практике.</p>
50
<p>Помимо именования<em>Grid-линий</em>разработчики дали возможность именовать целые области. Как вы помните, область - это несколько полос, которые объединены едиными<em>Grid-линиями</em>. Как же именование областей может помочь при создании макета? На самом деле этот инструмент является одним из прорывных в создании дизайна в<em>CSS</em>. Это свойство позволяет не просто задать имена каким-то абстрактным областям, но и визуализировать сетку с помощью этих имён. Одним из недостатков такого способа является его громоздкость. Давайте разберёмся с этим на практике.</p>
51
<p>Для создания именованных областей используется свойство grid-template-areas. В качестве значения оно принимает данные, которые заключаются в двойные кавычки. Внутри этих кавычек описываются области, которые расположатся на сетке. Сколько колонок они занимают, столько раз их и надо повторить внутри значения. Сами по себе значения отделяются пробелом. Создадим сетку из 6 колонок. В ней, как и в прошлых примерах, расположим 2-колоночный макет. Вначале опишем шапку. Она занимает всю ширину экрана, значит ей нужно выделить 6 колонок. Назовём эту область<em>header</em>. Имя области вы можете выбирать произвольное. Так же необходимо указать блок, который будет являться областью<em>header</em>. Для этого используется свойство grid-area, значением которого является имя области. В данном случае<em>header</em>.</p>
51
<p>Для создания именованных областей используется свойство grid-template-areas. В качестве значения оно принимает данные, которые заключаются в двойные кавычки. Внутри этих кавычек описываются области, которые расположатся на сетке. Сколько колонок они занимают, столько раз их и надо повторить внутри значения. Сами по себе значения отделяются пробелом. Создадим сетку из 6 колонок. В ней, как и в прошлых примерах, расположим 2-колоночный макет. Вначале опишем шапку. Она занимает всю ширину экрана, значит ей нужно выделить 6 колонок. Назовём эту область<em>header</em>. Имя области вы можете выбирать произвольное. Так же необходимо указать блок, который будет являться областью<em>header</em>. Для этого используется свойство grid-area, значением которого является имя области. В данном случае<em>header</em>.</p>
52
<p>Обратите внимание, что в контейнере .grid-6 отсутствуют свойства grid-template-columns и grid-template-rows. Сейчас их роль на себя взяло свойство grid-template-areas. Указав в ней определённое количество областей, автоматически создаются колонки с шириной в 1 фракцию. Если вам нужны другие значения, то всегда можно воспользоваться свойствами grid-template-columns и grid-template-rows, установив необходимую ширину полос.</p>
52
<p>Обратите внимание, что в контейнере .grid-6 отсутствуют свойства grid-template-columns и grid-template-rows. Сейчас их роль на себя взяло свойство grid-template-areas. Указав в ней определённое количество областей, автоматически создаются колонки с шириной в 1 фракцию. Если вам нужны другие значения, то всегда можно воспользоваться свойствами grid-template-columns и grid-template-rows, установив необходимую ширину полос.</p>
53
<p>Описав верхний ряд, настало время описать следующий, в котором расположим<em>aside</em>и<em>main</em>. Для этого продолжим в свойстве grid-template-areas указывать значения. Так как нам нужен новый ряд, то писать внутри значения с<em>header</em>не имеет смысла. Добавим пробел, и в новых двойных кавычках укажем расположения элементов в следующем ряду.</p>
53
<p>Описав верхний ряд, настало время описать следующий, в котором расположим<em>aside</em>и<em>main</em>. Для этого продолжим в свойстве grid-template-areas указывать значения. Так как нам нужен новый ряд, то писать внутри значения с<em>header</em>не имеет смысла. Добавим пробел, и в новых двойных кавычках укажем расположения элементов в следующем ряду.</p>
54
<p><strong>Важно:</strong>в каждом ряду количество колонок должно быть одинаковым. Если в любой строке упустить этот момент, то браузер проигнорирует свойство grid-template-areas, так как не сможет корректно обработать и понять, что вы от него хотели.</p>
54
<p><strong>Важно:</strong>в каждом ряду количество колонок должно быть одинаковым. Если в любой строке упустить этот момент, то браузер проигнорирует свойство grid-template-areas, так как не сможет корректно обработать и понять, что вы от него хотели.</p>
55
<p>Если нужно больше рядов, то их можно продолжить добавлять. Это важно, если у вас нестандартные размеры ячеек. В других случаях высота блоков будет определяться контентом внутри них. Это стандартное поведение, знакомое вам по вёрстке макетов. В данном случае создалась сетка из 6 колонок и двух строк.</p>
55
<p>Если нужно больше рядов, то их можно продолжить добавлять. Это важно, если у вас нестандартные размеры ячеек. В других случаях высота блоков будет определяться контентом внутри них. Это стандартное поведение, знакомое вам по вёрстке макетов. В данном случае создалась сетка из 6 колонок и двух строк.</p>
56
<p><a>https://codepen.io/hexlet/pen/QWyqLaM</a></p>
56
<p><a>https://codepen.io/hexlet/pen/QWyqLaM</a></p>
57
<p>Для более удобного чтения<em>CSS</em>позволяет переносить строки внутри свойства. Таким образом свойство grid-template-areas становится более наглядным. Также внутри самих значений можно проставлять любое количество пробелов. Колонки в каждой строке можно выставить друг под другом:</p>
57
<p>Для более удобного чтения<em>CSS</em>позволяет переносить строки внутри свойства. Таким образом свойство grid-template-areas становится более наглядным. Также внутри самих значений можно проставлять любое количество пробелов. Колонки в каждой строке можно выставить друг под другом:</p>
58
<p>Бывают ситуации, когда вместо одной из колонок нужна не какая-то существующая область, а пустая ячейка. Так как количество колонок в каждой строке должно быть одинаковым, то просто удалить одну из областей нет возможности. Вместо этого grid-template-areas может принимать специальное значение, которое обозначает пустую область. Этим значением является точка .. В текущей сетке сделаем шапку на одну колонку меньше. Шапка должна занимать 5 колонок вместо 6. В таком случае значение свойства будет выглядеть следующим образом:</p>
58
<p>Бывают ситуации, когда вместо одной из колонок нужна не какая-то существующая область, а пустая ячейка. Так как количество колонок в каждой строке должно быть одинаковым, то просто удалить одну из областей нет возможности. Вместо этого grid-template-areas может принимать специальное значение, которое обозначает пустую область. Этим значением является точка .. В текущей сетке сделаем шапку на одну колонку меньше. Шапка должна занимать 5 колонок вместо 6. В таком случае значение свойства будет выглядеть следующим образом:</p>
59
<p><a>https://codepen.io/hexlet/pen/qBbPBdE</a></p>
59
<p><a>https://codepen.io/hexlet/pen/qBbPBdE</a></p>
60
<h2>Самостоятельное задание</h2>
60
<h2>Самостоятельное задание</h2>
61
<p>Создайте трехколоночный макет, состоящий из:</p>
61
<p>Создайте трехколоночный макет, состоящий из:</p>
62
<ul><li>Шапка.</li>
62
<ul><li>Шапка.</li>
63
<li>Левый сайдбар.</li>
63
<li>Левый сайдбар.</li>
64
<li>Основной контент.</li>
64
<li>Основной контент.</li>
65
<li>Правый сайдбар.</li>
65
<li>Правый сайдбар.</li>
66
<li>Футер.</li>
66
<li>Футер.</li>
67
</ul><p>При создании используйте оба способа. Вначале используйте<em>Grid-линии</em>, потом<em>Grid-области</em>. Количество колонок в сетке выбирайте самостоятельно. В данном случае их не может быть меньше трёх.</p>
67
</ul><p>При создании используйте оба способа. Вначале используйте<em>Grid-линии</em>, потом<em>Grid-области</em>. Количество колонок в сетке выбирайте самостоятельно. В данном случае их не может быть меньше трёх.</p>