Вот идея использования нескольких фоновых изображений, если вы знаете высоту каждого элемента (т.е. высоту каждой строки)
.parent {
display: flex;
flex-wrap: wrap;
margin:10px;
background:
linear-gradient(blue,blue) 0 0/100% calc(100% - 4 * 50px),
linear-gradient(yellow,yellow) 0 0/100% calc(100% - 3 * 50px),
linear-gradient(grey,grey) 0 0/100% calc(100% - 2 * 50px),
linear-gradient(pink,pink) 0 0/100% calc(100% - 1 * 50px),
linear-gradient(black,black) 0 0/100% calc(100% - 0 * 50px);
}
.parent > div {
max-width: 100%;
height:50px;
flex-grow:1;
min-width:100px;
border:1px solid red;
box-sizing:border-box;
}
div.two {
flex-basis:22%;
border:1px solid blue;
}
div.three {
flex-basis:44%;
border:1px solid green;
}
<div class="parent">
<div class="two"></div>
<div ></div>
<div ></div>
<div class="two"></div>
<div ></div>
<div class="three"></div>
<div ></div>
<div class="two"></div>
<div class="three"></div>
<div class="three"></div>
</div>
<div class="parent">
<div class="two"></div>
<div ></div>
<div ></div>
<div class="two"></div>
<div ></div>
<div class="three"></div>
<div ></div>
<div class="two"></div>
<div class="three"></div>
<div class="three"></div>
<div ></div>
<div class="three"></div>
</div>
<div class="parent">
<div class="two"></div>
<div ></div>
<div ></div>
<div ></div>
<div class="two"></div>
<div class="three"></div>
<div class="three"></div>
</div>
<div class="parent">
<div class="two"></div>
<div ></div>
<div ></div>
<div ></div>
<div class="two"></div>
</div>
Трюк прост, у нас разные фоновые слои, и каждый слой занимает полную ширину и высоту, равную calc(100% - n * 50px)
.Если значение высоты отрицательно, слой не будет отображаться, но если он будет положительным, он будет отображаться, и, поскольку background-repeat
по умолчанию repeat
, он будет охватывать все элементы.
Порядок также важен,Если, например, у нас есть 3 строки, синий и желтый получат отрицательную высоту, а другую положительную, поэтому мы покажем ту, на вершине которой серый.Добавляем еще один ряд, делаем желтый позитив (он покажет).Мы удаляем еще одну строку, в которой мы делаем серый негатив, а розовый будет отображаться.
Конечно, этот прием работает только в том случае, если вы хотите применить стиль фона к элементу.Мы должны найти другой трюк, если вы хотите применить другие стили.