0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Во всех прошлых уроках создавались сетки определённого размера и элементы внутри такой сетки располагались чётко в ячейках. Возникает вопрос: "Что случится, если элемент будет расположен вне определённой сетки?"</p>
1
<p>Во всех прошлых уроках создавались сетки определённого размера и элементы внутри такой сетки располагались чётко в ячейках. Возникает вопрос: "Что случится, если элемент будет расположен вне определённой сетки?"</p>
2
<p>Для рассмотрения этого вопроса используем пример с тремя элементами внутри сетки 6x6. Каждая ячейка такой секции имеет размер 30px на 30px.</p>
2
<p>Для рассмотрения этого вопроса используем пример с тремя элементами внутри сетки 6x6. Каждая ячейка такой секции имеет размер 30px на 30px.</p>
3
<p><a>https://codepen.io/hexlet/pen/MWKZeaQ</a></p>
3
<p><a>https://codepen.io/hexlet/pen/MWKZeaQ</a></p>
4
<p>Переместим первый элемент, указав ему в качестве стартовой точки grid-линию номер 7. Сейчас её не существует в рамках сетки. Воспользуемся для этого псевдоклассом nth-child, который позволяет выбирать элемент по его порядковому номеру среди родственных ему элементов.</p>
4
<p>Переместим первый элемент, указав ему в качестве стартовой точки grid-линию номер 7. Сейчас её не существует в рамках сетки. Воспользуемся для этого псевдоклассом nth-child, который позволяет выбирать элемент по его порядковому номеру среди родственных ему элементов.</p>
5
<p><a>https://codepen.io/hexlet/pen/PoZXzjb</a></p>
5
<p><a>https://codepen.io/hexlet/pen/PoZXzjb</a></p>
6
<p>Возможно, вы ожидали любого результата, кроме такого. Первый элемент сместился относительно своего начального расположения, как и задумывалось. Но он стал очень широким, и при этом остальные элементы переместились на другую строку.</p>
6
<p>Возможно, вы ожидали любого результата, кроме такого. Первый элемент сместился относительно своего начального расположения, как и задумывалось. Но он стал очень широким, и при этом остальные элементы переместились на другую строку.</p>
7
<p>Рассмотрим поближе. Воспользуемся инспектором<em>Chrome DevTools</em>и взглянем на сетку, которая получилась в контейнере.</p>
7
<p>Рассмотрим поближе. Воспользуемся инспектором<em>Chrome DevTools</em>и взглянем на сетку, которая получилась в контейнере.</p>
8
<p>В сетке появился новый трек. Седьмой по счёту, который не создавался изначально. В этом треке и расположился первый элемент. Так как свойство<em>grid-template-columns</em>ничего не знает о седьмой колонке, то оно и не работает с ним. Получается ситуация, при которой новая колонка забрала всё свободное пространство, переместив следующие элементы на новую строку, так как у них просто нет места расположиться рядом с первым элементом.</p>
8
<p>В сетке появился новый трек. Седьмой по счёту, который не создавался изначально. В этом треке и расположился первый элемент. Так как свойство<em>grid-template-columns</em>ничего не знает о седьмой колонке, то оно и не работает с ним. Получается ситуация, при которой новая колонка забрала всё свободное пространство, переместив следующие элементы на новую строку, так как у них просто нет места расположиться рядом с первым элементом.</p>
9
<p>На этот раз переместим первый элемент на восьмой трек. Для этого так же воспользуемся свойством<em>grid-column-start</em>:</p>
9
<p>На этот раз переместим первый элемент на восьмой трек. Для этого так же воспользуемся свойством<em>grid-column-start</em>:</p>
10
<p><a>https://codepen.io/hexlet/pen/qBbLabZ</a></p>
10
<p><a>https://codepen.io/hexlet/pen/qBbLabZ</a></p>
11
<p>Первый элемент уменьшился ровно в два раза. Из-за чего же это случилось? Стоит взглянуть на сетку, используя средства веб-инспектора:</p>
11
<p>Первый элемент уменьшился ровно в два раза. Из-за чего же это случилось? Стоит взглянуть на сетку, используя средства веб-инспектора:</p>
12
<p>Новые треки получили всё свободное пространство в контейнере, при этом поделили его поровну между собой. Это поведение очень похоже на то, если бы у этих треков в качестве значения использовались единицы измерения "фракции".</p>
12
<p>Новые треки получили всё свободное пространство в контейнере, при этом поделили его поровну между собой. Это поведение очень похоже на то, если бы у этих треков в качестве значения использовались единицы измерения "фракции".</p>
13
<p>Такое поведение сетки называется<em>неявной сеткой</em>. Под ней подразумеваются любые участки секции, которые не были заданы явно, но образовались вследствие расположения элементов внутри сетки.</p>
13
<p>Такое поведение сетки называется<em>неявной сеткой</em>. Под ней подразумеваются любые участки секции, которые не были заданы явно, но образовались вследствие расположения элементов внутри сетки.</p>
14
<p>Неявная сетка может появиться не только после явной сетки, но и до неё. Так как полосы могут иметь не только положительные, но отрицательные значения, элемент внутри сетки можно расположить до неё. Из-за этого так же возникнет неявная сетка. Так как ячеек в сетке сейчас 6, то для создания неявной сетки до текущей необходимо расположить элемент на Grid-линии<em>-8</em>.</p>
14
<p>Неявная сетка может появиться не только после явной сетки, но и до неё. Так как полосы могут иметь не только положительные, но отрицательные значения, элемент внутри сетки можно расположить до неё. Из-за этого так же возникнет неявная сетка. Так как ячеек в сетке сейчас 6, то для создания неявной сетки до текущей необходимо расположить элемент на Grid-линии<em>-8</em>.</p>
15
<p><a>https://codepen.io/hexlet/pen/KKVbgNJ</a></p>
15
<p><a>https://codepen.io/hexlet/pen/KKVbgNJ</a></p>
16
<p>Поведение немного поменялось. Теперь соседние элементы не перенеслись на новую строку, так как им стало хватать места. Вся явная сетка переместилась к правому краю<em>viewport</em>, а слева пустое пространство заняла неявная сетка. В веб-инспекторе это выглядит следующим образом:</p>
16
<p>Поведение немного поменялось. Теперь соседние элементы не перенеслись на новую строку, так как им стало хватать места. Вся явная сетка переместилась к правому краю<em>viewport</em>, а слева пустое пространство заняла неявная сетка. В веб-инспекторе это выглядит следующим образом:</p>
17
<p>Если продолжать смещать элемент влево, использовав значение grid-column-start: -9, то свободное пространство в неявной сетке заберёт второй элемент явной сетки.</p>
17
<p>Если продолжать смещать элемент влево, использовав значение grid-column-start: -9, то свободное пространство в неявной сетке заберёт второй элемент явной сетки.</p>
18
<p><a>https://codepen.io/hexlet/pen/PoZXGje</a></p>
18
<p><a>https://codepen.io/hexlet/pen/PoZXGje</a></p>
19
<p>Это произошло по причине того, что у элементов нет чёткой позиции и они изначально следуют друг за другом, перескакивая на неявную сетку. Если вам необходимо избежать такой ситуации, то необходимо привязать элемент к конкретной<em>Grid-линии</em>. В этом случае при появлении неявной сетки элементы останутся на своих местах.</p>
19
<p>Это произошло по причине того, что у элементов нет чёткой позиции и они изначально следуют друг за другом, перескакивая на неявную сетку. Если вам необходимо избежать такой ситуации, то необходимо привязать элемент к конкретной<em>Grid-линии</em>. В этом случае при появлении неявной сетки элементы останутся на своих местах.</p>
20
<h2>Управление неявной сеткой</h2>
20
<h2>Управление неявной сеткой</h2>
21
<p>В прошлых примерах неявная сетка создавалась автоматически, а свои размеры брала исходя из свободного пространства. Зачастую это неудобное решение, так как мы не управляем новыми элементами в неявной сетке. Чтобы появилась возможность самостоятельно управлять размером неявной сетки, существует два правила:</p>
21
<p>В прошлых примерах неявная сетка создавалась автоматически, а свои размеры брала исходя из свободного пространства. Зачастую это неудобное решение, так как мы не управляем новыми элементами в неявной сетке. Чтобы появилась возможность самостоятельно управлять размером неявной сетки, существует два правила:</p>
22
<ul><li>grid-auto-rows - высота трека в неявной сетке</li>
22
<ul><li>grid-auto-rows - высота трека в неявной сетке</li>
23
<li>grid-auto-columns - ширина трека в неявной сетке</li>
23
<li>grid-auto-columns - ширина трека в неявной сетке</li>
24
</ul><p>В прошлом примере поставим ширину треков в неявной сетке равной 50 пикселям. Данная манипуляция никак не отразится на размерах трека явной сетки.</p>
24
</ul><p>В прошлом примере поставим ширину треков в неявной сетке равной 50 пикселям. Данная манипуляция никак не отразится на размерах трека явной сетки.</p>
25
<p><a>https://codepen.io/hexlet/pen/gOPZwEB</a></p>
25
<p><a>https://codepen.io/hexlet/pen/gOPZwEB</a></p>
26
<p>Если взглянуть в веб-инспектор, то будет видно, что неявные треки стали шириной в 50 пикселей. За счёт этого и весь Grid-контейнер стал меньше, так как теперь ему не нужно занимать ширину в 100%<em>viewport</em>.</p>
26
<p>Если взглянуть в веб-инспектор, то будет видно, что неявные треки стали шириной в 50 пикселей. За счёт этого и весь Grid-контейнер стал меньше, так как теперь ему не нужно занимать ширину в 100%<em>viewport</em>.</p>
27
<p>Со свойством grid-auto-rows всё обстоит немного сложнее. Новая ячейка трека не может быть ниже соседней, так как это нарушит логику работы сетки. Для демонстрации работы свойства grid-auto-rows видоизменим пример.</p>
27
<p>Со свойством grid-auto-rows всё обстоит немного сложнее. Новая ячейка трека не может быть ниже соседней, так как это нарушит логику работы сетки. Для демонстрации работы свойства grid-auto-rows видоизменим пример.</p>
28
<p>Используем сетку размером 2x2. В каждой ячейке будет находиться блок с различным цветом. Разместив в этой сетке пять элементов вместо четырёх, получим одну неявную<em>Grid-полосу</em>, которая образовалась вследствие появления неявной сетки. Отметим этот блок оранжевым цветом. Если мы не добавим никаких правил к этому блоку, он останется невидимым. Существуя в разметке, он не будет обладать высотой, так как внутри этого блока нет никаких элементов. Высота неявных полос при таком условии исходит из высоты контента внутри него. Это осуществляется благодаря значению auto свойства grid-auto-rows.</p>
28
<p>Используем сетку размером 2x2. В каждой ячейке будет находиться блок с различным цветом. Разместив в этой сетке пять элементов вместо четырёх, получим одну неявную<em>Grid-полосу</em>, которая образовалась вследствие появления неявной сетки. Отметим этот блок оранжевым цветом. Если мы не добавим никаких правил к этому блоку, он останется невидимым. Существуя в разметке, он не будет обладать высотой, так как внутри этого блока нет никаких элементов. Высота неявных полос при таком условии исходит из высоты контента внутри него. Это осуществляется благодаря значению auto свойства grid-auto-rows.</p>
29
<p>Изменим значение высоты треков, установив значение в 50 пикселей.</p>
29
<p>Изменим значение высоты треков, установив значение в 50 пикселей.</p>
30
<p><a>https://codepen.io/hexlet/pen/PoZXbwV</a></p>
30
<p><a>https://codepen.io/hexlet/pen/PoZXbwV</a></p>
31
<p>Теперь все новые неявные полосы будут иметь значение в 50 пикселей. Обратите внимание, что изменение ширины полосы неявной сетки в данном примере не сработает, так как это нарушит логику работы сетки.</p>
31
<p>Теперь все новые неявные полосы будут иметь значение в 50 пикселей. Обратите внимание, что изменение ширины полосы неявной сетки в данном примере не сработает, так как это нарушит логику работы сетки.</p>
32
<h2>Самостоятельное задание</h2>
32
<h2>Самостоятельное задание</h2>
33
<p>Используя примеры из данного урока создайте следующую сетку:</p>
33
<p>Используя примеры из данного урока создайте следующую сетку:</p>
34
<ul><li>6 колонок с шириной 50 пикселей</li>
34
<ul><li>6 колонок с шириной 50 пикселей</li>
35
<li>3 строки с высотой 100 пикселей</li>
35
<li>3 строки с высотой 100 пикселей</li>
36
</ul><p>Добавьте несколько элементов до сетки и после неё. Неявная сетка будет иметь ширину полос в 100 пикселей. При неявных полосах сверху и снизу установите высоту в 50 пикселей.</p>
36
</ul><p>Добавьте несколько элементов до сетки и после неё. Неявная сетка будет иметь ширину полос в 100 пикселей. При неявных полосах сверху и снизу установите высоту в 50 пикселей.</p>