Я тестирую несколько разных макетов с помощью flexbox, и у меня возникла следующая проблема.
У меня есть галерея изображений с гибкими элементами, настроенными для flex:0 0 25%;, и я хотел бы добавить к ним маржу в 1 пиксель, потому что 1% слишком велик. Так что мне было интересно, что мне делать в этом случае.
Прилагаю пример ниже.
#foto-container {
display: flex;
flex-wrap: wrap;
flex: 1;
justify-content: space-around;
margin: 10px;
}
.foto {
flex: 0 0 25%;
min-height: 200px;
background-color: red;
}
/*---------How I can add 1px to photo?-----------------*/<link href = "https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel = "stylesheet" />
<div id = "foto-container">
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
<div class = "foto foto4">4</div>
<div class = "foto foto5">5</div>
<div class = "foto foto6">6</div>
<div class = "foto foto7">7</div>
<div class = "foto foto8">8</div>
<div class = "foto foto9">9</div>
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
</div>Спасибо,






Например, вы можете использовать flex: 1 0 22%. Это позволит вашему элементу быть определенным 22% как flex-basis (так что только 4 элемента в строке), и они будут расти, чтобы заполнить оставшееся пространство, оставленное полями (поскольку для flex-grow установлено значение 1)
#foto-container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
margin: 10px;
}
.foto {
flex: 1 0 22%;
min-height: 50px;
margin: 1px;
background-color: red;
}<div id = "foto-container">
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
<div class = "foto foto4">4</div>
<div class = "foto foto5">5</div>
<div class = "foto foto6">6</div>
<div class = "foto foto7">7</div>
<div class = "foto foto8">8</div>
<div class = "foto foto9">9</div>
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
</div>Значение flex-basis должно быть больше, чем (20% - margin * 2), и ниже, чем (25% - margin * 2). Первое значение позволит вам иметь 5 элементов в строке, поэтому большее значение сделает их 4, а большее значение, чем второе, сделает количество элементов равным 3 в строке.
#foto-container {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
margin: 10px;
}
.foto {
flex: 1 0 21%;
min-height: 50px;
margin: 1px;
background-color: red;
animation: change 4s linear infinite alternate;
}
@keyframes change {
0%,40% {flex: 1 0 calc(20% - 2 * 1px);background:yellow;}
41%,59% {background:red;}
60%,100% {flex: 1 0 calc(25% - 2 * 1px + 1px);background:green;}
}<div id = "foto-container">
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
<div class = "foto foto4">4</div>
<div class = "foto foto5">5</div>
<div class = "foto foto6">6</div>
<div class = "foto foto7">7</div>
<div class = "foto foto8">8</div>
<div class = "foto foto9">9</div>
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
</div>Это возможно с гибкостью, как показано в другой ответ к этому сообщению.
Ваш вопрос также освещен в этом посте: Flexbox: 4 элемента в строке
Однако, если вам интересно, есть еще более простое решение с CSS Grid.
#foto-container {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 1px;
margin: 10px;
}
.foto {
min-height: 200px;
background-color: red;
}<div id = "foto-container">
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
<div class = "foto foto4">4</div>
<div class = "foto foto5">5</div>
<div class = "foto foto6">6</div>
<div class = "foto foto7">7</div>
<div class = "foto foto8">8</div>
<div class = "foto foto9">9</div>
<div class = "foto foto1">1</div>
<div class = "foto foto2">2</div>
<div class = "foto foto3">3</div>
</div>вы можете использовать метод calc для решения этой проблемы flex: calc (33,33% - 5%);
.digit-grid {
display: flex;
flex-wrap: wrap;
font-size: 2em;
}
.box {
flex: calc(33.33% - 5%);
margin: 5px 5px;
background: gray;
height: 50px;
color: white;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
HTML идет сюда
<div class = "digit-grid">
<div class = "box box1">1</div>
<div class = "box box2">2</div>
<div class = "box box3">3</div>
<div class = "box box4">4</div>
<div class = "box box5">5</div>
<div class = "box box6">6</div>
<div class = "box box7">7</div>
<div class = "box box8">8</div>
<div class = "box box9">9</div>
<div class = "box box10">10</div>
<div class = "box box11">11</div>
<div class = "box box12">12</div>
</div>
попробуйте
calc(25% - 1px)