CSS3 flexbox макет max 3 дочерних элемента на одной строке
Является ли их простой способ в CSS иметь фиксированный максимум дочерних элементов в одной строке, прежде чем вы нажимаете следующие дочерние элементы на новую строку?
![flex wrapper with four child items]()
Как я понимаю flexbox, дочерние элементы попадают только в новую строку, если их достаточно свободного места на линии над ней. Но я ищу правило или функцию CSS, которые позволяют мне сказать ", я хочу, чтобы на любой заданной строке было не более 3 дочерних элементов, и даже если пространство доступно для 4-го, нажмите его на новую строку".
Ответы
Ответ 1
Вместо использования display: flex вы можете использовать float: left и clear для каждого третьего дочернего элемента node следующим образом:
.child {
background: #000;
height: 300px;
float: left;
margin:15px 0 0 15px;
width:150px;
}
.child:nth-child(3n+1) {
clear: left;
}
Я создал для вас скрипку: пример скрипки
В случае, если родитель может содержать только двух детей, вы можете использовать это короткое исправление jQuery:
var child = $('.child'),
parent = $('.child').parent();
if( child.width() > (parent.width()/3) ) {
child.css('clear', 'none');
}
Fiddle with fix: скрипт example2
Ответ 2
Используйте flex-basis.
.child {
flex-basis: 33%;
}
Процент должен быть адаптирован в соответствии с вашей моделью выбора размеров ящиков, а также с использованием полей и/или заполнения.
Ответ 3
скрипка
#container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
#container>div {
margin: 15px;
width: 150px;
height: 150px;
}
/* negative paddings are treated as 0 so woohoo */
#container>div {
/* up to 3 boxes in a row */
padding: 0 calc((100% - 180px * 3) / 6);
}
#container>div {
/* up to 4 boxes in a row */
//padding: 0 calc((100% - 180px * 4) / 8);
}
#container>div {
/* up to 5 boxes in a row */
//padding: 0 calc((100% - 180px * 5) / 10);
}
/* 180px = width + horizontal margins */
Ответ 4
Вы можете поместить элементы внутри контейнера div с шириной 100% и максимальной шириной, достаточной для размещения в ней трех элементов?
.parent {
width:100%;
max-width:350px;
}
И затем поместите это вокруг всех элементов.
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
Ответ 5
Если вы используете его с bootstrap, вы добавите этот css для класса псевдо row
.row:before,
.row:after{
width:0 !important;
}