Проблема с flexbox заключается в том, что это не настоящая сетка, она полагается на перенос, который оставляет нежелательное пустое пространство, надеясь, что может быть гибкий элемент, достаточно маленький, чтобы поместиться в него, и поэтому контейнер не сжимается.
Кроме того, поскольку flexbox не устанавливает sh истинную сетку, нет никакого способа нацеливания на последнюю строку.
Однако это легко сделать в сетке CSS.
Использование
grid-template-columns:repeat(auto-fit,300px);
Мы говорим сетке создавать столбцы размером 300px
ширина, определенная в .flex-item
, только если это возможно и только если есть больше элементов для размещения в этом созданном столбце благодаря auto-fit
.flex-container {
max-width: 100%;
margin: 0 auto;
background-color: whitesmoke;
}
.flex-row {
display: grid;
grid-template-columns: repeat(auto-fill, 300px);
overflow: hidden;
justify-content: center;
}
.flex-item {
width: 300px;
position: relative;
box-sizing: border-box;
border: dashed 1px navy;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
-webkit-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
padding: 1em;
}
.flex-item .flex-wrapper {
height: 100%;
width: 100%;
overflow: hidden;
background-color: crimson;
}
.flex-item a.flex-permalink {
text-decoration: none;
color: black;
display: block;
background-color: lightpink;
height: 100%;
}
.flex-item img {
width: 100%;
}
.flex-item h1 {
font-family: 'Roboto', sans-serif;
font-size: 1.5em;
font-weight: 500;
margin: 0;
padding: 1em;
}
<div class="flex-container">
<div class="flex-row">
<!-- ------ Let the loop begin ------ -->
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Exercitation cupidatat ex non aliqua dolore veniam veniam officia ex dolore.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Sint eiusmod est laborum reprehenderit.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Adipisicing quis tempor duis irure magna quis occaecat.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Culpa dolore sint sit non voluptate nostrud nulla dolor laborum.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Tempor consectetur do elit magna sunt cillum dolor.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>AEu eiusmod qui nostrud anim nulla dolore non veniam excepteur adipisicing sed.</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Lorem ipsum duis non laboris</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Dolor occaecat laboris enim duis eiusmod</h1>
</a>
</div>
</div>
<div class="flex-item">
<div class="flex-wrapper">
<a class="flex-permalink" href="">
<img src="SVG_fallback_image.svg" alt="">
<h1>Exercitation do enim sint pariatur consectetur</h1>
</a>
</div>
</div>
<!-- ------ Let the loop end ------ -->
</div>
</div>