Давайте сделаем действительно работающую без проблем плиточку с отступами на марджинах. Пусть у нас изначально есть такая плиточка без отступов:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
<div class="child">9</div>
</div>
.parent {
display: flex;
flex-wrap: wrap;
width: 300px;
border: 1px solid red;
}
.child {
box-sizing: border-box;
width: 100px;
height: 100px;
border: 1px solid green;
}
:
Давайте сделаем горизонтальные отступы между
элементами с помощью margin
.
Поставим для этого всем элементам-потомкам
margin-right
в значение 10px
,
а каждому третьему потомку занулим этот margin
.
Используем для этого псевдокласс nth-child
,
задав в нем параметр так, чтобы получать
каждый третий элемент.
Увеличим также ширину родителя до 320px
,
чтобы дать место под отступы, и посмотрим,
что у нас получается:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
<div class="child">9</div>
</div>
.parent {
display: flex;
flex-wrap: wrap;
width: 320px;
border: 1px solid red;
}
.child {
box-sizing: border-box;
width: 100px;
height: 100px;
margin-right: 10px;
border: 1px solid green;
}
.child:nth-child(3n) {
margin-right: 0;
}
:
Итак, все работает. Давайте уберем последний элемент, чтобы в последнем ряду было меньше элементов и убедимся, что при этом у нас не будет проблем с этим последним рядом:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
</div>
.parent {
display: flex;
flex-wrap: wrap;
width: 320px;
border: 1px solid red;
}
.child {
box-sizing: border-box;
width: 100px;
height: 100px;
margin-right: 10px;
border: 1px solid green;
}
.child:nth-child(3n) {
margin-right: 0;
}
:
Вертикальные отступы
Давайте теперь добавим еще и вертикальные
отступы. Для этого всем потомкам зададим
margin-bottom
в значении 10px
:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
</div>
.parent {
display: flex;
flex-wrap: wrap;
width: 320px;
border: 1px solid red;
}
.child {
box-sizing: border-box;
width: 100px;
height: 100px;
margin-right: 10px;
margin-bottom: 10px;
border: 1px solid green;
}
.child:nth-child(3n) {
margin-right: 0;
}
:
Как мы видим, все работает хорошо, за исключением того, что последний ряд отступает от родителя. Чаще всего это не критично.
Сделайте плиточку по два элемента в ряд с
расстоянием между элементами в 20px
.
Сделайте плиточку по три элемента в ряд с
расстоянием между элементами в 20px
.
Сделайте плиточку по четыре элемента в ряд
с расстоянием между элементами в 20px
.