Якщо я правильно розумію вашу проблему, дивна прогалина, яку ви хочете позбутися, - це проблема у другому ряді, коли ваш перший рядок завершиться. Якщо це все, що ви намагаєтеся вирішити, то, можливо, все, що вам потрібно зробити, - це змінити justify-content
з space-between
на flex-start
поля з додаванням до ваших .section
елементів і запасом у вашому #main
налаштованому на відповідність. Відстань тепер буде 20 пікселів між усіма зображеннями.
#outer {
display: flex;
}
#main {
display: flex;
justify-content: center;
flex-wrap: wrap;
border: solid black 25px;
border-radius: 25px;
width: 450px;
height: 500px;
padding: 10px;
}
.section {
background-color: #ddd;
padding: 15px;
margin: 10px;
}
.label, .icon {
text-align: center;
}
<div id="outer">
<div id="main">
<div class="section">
<div class="label">Label 1AAAAAAAAAAA</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 1B</div>
</div>
<div class="section">
<div class="label">Label 2A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 2B</div>
</div>
<div class="section">
<div class="label">Label 3A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 3B</div>
</div>
<div class="section">
<div class="label">Label 4A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 4B</div>
</div>
<div class="section">
<div class="label">Label 5A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 5B</div>
</div>
</div>
</div>
Якщо вам не подобається , як це виглядає, ви можете спробувати інші justify-content
цінності , такі як flex-start
, flex-end
, space-around
, space-evenly
.
Крім того, ви можете позбутися justify-content
і використовувати, flex-grow
щоб розширити кожен, .section
щоб відповідати його оточенню.
#outer {
display: flex;
}
#main {
display: flex;
flex-wrap: wrap;
border: solid black 25px;
border-radius: 25px;
width: 450px;
height: 500px;
padding: 10px;
}
.section {
background-color: #ddd;
padding: 15px;
margin: 10px;
flex-grow: 1;
}
.label, .icon {
text-align: center;
}
<div id="outer">
<div id="main">
<div class="section">
<div class="label">Label 1AAAAAAAAAAA</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 1B</div>
</div>
<div class="section">
<div class="label">Label 2A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 2B</div>
</div>
<div class="section">
<div class="label">Label 3A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 3B</div>
</div>
<div class="section">
<div class="label">Label 4A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 4B</div>
</div>
<div class="section">
<div class="label">Label 5A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 5B</div>
</div>
</div>
</div>
Крім того, якщо ви хочете, щоб їхні жолоби вишикувалися, і все одно розширювались під кожен .section
вмісту елемента, ви можете спробувати використовувати його display: table
.
Недоліком тут є те, що вам потрібно розділити HTML на рядки.
#outer {
display: flex;
}
#main {
display: table;
flex-wrap: wrap;
border: solid black 25px;
border-radius: 25px;
width: 450px;
height: 500px;
border-collapse: separate;
border-spacing: 20px;
}
.row {
display: table-row;
}
.section {
display: table-cell;
background-color: #ddd;
padding: 15px;
}
.label, .icon {
text-align: center;
}
<div id="outer">
<div id="main">
<div class="row">
<div class="section">
<div class="label">Label 1AAAAAAAAAAA</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 1B</div>
</div>
<div class="section">
<div class="label">Label 2A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 2B</div>
</div>
<div class="section">
<div class="label">Label 3A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 3B</div>
</div>
</div>
<div class="row">
<div class="section">
<div class="label">Label 4A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 4B</div>
</div>
<div class="section">
<div class="label">Label 5A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 5B</div>
</div>
</div>
</div>
</div>
Якщо ви замість цього дійсно хочете, щоб усі .section
елементи розгорнулися, щоб вони були рівними найбільшому.section
,
вам, швидше за все, потрібно буде використовувати JavaScript, оскільки елементи братів у CSS не знають багато один про одного.
Ви можете додати наступний JavaScript на свою сторінку і відрегулювати CSS як такий:
function expandSectionsToLargest() {
// Grab all of the elements with "section" class names
var sectionElements = document.getElementsByClassName('section');
// Find the largest width among our section elements
var largestWidth = -Infinity;
Array.prototype.forEach.call(sectionElements, section => {
if (section.offsetWidth > largestWidth) {
largestWidth = section.offsetWidth;
}
});
// Set all of the sections to at least equal the largest width
Array.prototype.forEach.call(sectionElements, section => {
section.style.minWidth = largestWidth + 'px';
});
}
// Expand the section widths now (must be called after the section elements are loaded)
expandSectionsToLargest();
#outer {
display: block;
}
#main {
display: block;
border: solid black 25px;
border-radius: 25px;
width: 450px;
height: 500px;
padding: 10px;
}
.section {
background-color: #ddd;
box-sizing: border-box; /* Important to make the element's CSS width coincide with JavaScript's offsetWidth value */
padding: 15px;
margin: 10px;
float: left;
}
.label, .icon {
text-align: center;
}
<div id="outer">
<div id="main">
<div class="section">
<div class="label">Label 1AAAAAAAAAAA</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 1B</div>
</div>
<div class="section">
<div class="label">Label 2A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 2B</div>
</div>
<div class="section">
<div class="label">Label 3A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 3B</div>
</div>
<div class="section">
<div class="label">Label 4A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 4B</div>
</div>
<div class="section">
<div class="label">Label 5A</div>
<div class="icon"><img src="https://via.placeholder.com/75"></div>
<div class="label">Label 5B</div>
</div>
</div>
</div>