#html #css
Вопрос:
Посмотрите на фрагмент ниже, у меня есть дивы, которые обрезают фон. Я использовал свойство css отображения таблицы. Но я хочу, чтобы эти дивы были разной высоты. Я не могу использовать таблицу, потому что каждая ячейка таблицы будет иметь одинаковую высоту. Я хочу, чтобы эти дивы были разной высоты.
.blocks {
display:table-row;
}
.block {
display:table-cell;
height:100px;
border:15px solid #FFF;
}
#background-container {
display:table;
width:100%;
border-collapse:collapse;
box-sizing:border-box;
background: url(https://images.unsplash.com/photo-1538867468559-b14ead85b729?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8amp;auto=formatamp;fit=cropamp;w=1051amp;q=80) no-repeat center center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
<div id="background-container">
<div class="blocks">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
<div class="blocks">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
<div class="blocks">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
<div class="blocks">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
</div>
Ответ №1:
Вот еще одна идея, в которой вы применяете фон к псевдоэлементу и размещаете его относительно основного контейнера, а затем обрезаете наложение.
Используя приведенное ниже, вы можете иметь разную ширину/высоту для своих элементов:
.block {
height: 100px;
width: 18%;
flex-grow:1;
margin:15px;
-webkit-mask:linear-gradient(#fff 0 0); /* hide the overflow */
}
/* the same background applied to all */
.block::before {
content: "";
position: absolute;
inset: 0;
background: url(https://images.unsplash.com/photo-1538867468559-b14ead85b729?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8amp;auto=formatamp;fit=cropamp;w=1051amp;q=80) center/cover;
}
/**/
#background-container {
position: relative; /* relative here */
display:flex;
flex-wrap:wrap;
}
<div id="background-container">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
Здесь также подходит конфигурация сетки CSS:
.block {
-webkit-mask:linear-gradient(#fff 0 0); /* hide the overflow */
}
.block:nth-child(odd) {
grid-row:span 2;
}
/* the same background applied to all */
.block::before {
content: "";
position: absolute;
inset: 0;
background: url(https://images.unsplash.com/photo-1538867468559-b14ead85b729?ixlib=rb-1.2.1amp;ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8amp;auto=formatamp;fit=cropamp;w=1051amp;q=80) center/cover;
}
/**/
#background-container {
position: relative; /* relative here */
display:grid;
grid-template-columns:repeat(4,1fr);
grid-auto-rows:50px;
grid-gap:15px;
}
<div id="background-container">
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
</div>
Комментарии:
1. Можете ли вы предложить метод без элементов psuedo?? @TemaniAfif