#css #css-grid
#css #css-сетка
Вопрос:
Я сделал следующее с помощью CSS grid:
https://imgur.com/a/wu8bJ7d (анимированный gif, показывающий текущее поведение)
Это поведение, которое я хочу, за исключением того, что я хочу, чтобы первое изображение было в 2 раза больше ширины (т.Е. 3 cols с первым элементом, охватывающим 2 cols, как в макете ниже):
Это код, который у меня есть до сих пор
.news-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(441px, 1fr));
margin-top:2rem;
column-gap: 2.33em;
row-gap: 2.33em;
}
.news-item:first-child {
grid-column: 1 2;
}
.news-item {
position: relative;
border-radius: 10px;
border: 5px solid #fff;
color: #fff;
-webkit-box-shadow: 0px 0px 16px -1px rgba(0,0,0,0.11);
-moz-box-shadow: 0px 0px 16px -1px rgba(0,0,0,0.112);
box-shadow: 0px 0px 16px -1px rgba(0, 0, 0, 0.11);
}
Это возможно?
Спасибо
Ответ №1:
Если у вас есть только две фотографии, и вы хотите, чтобы вторая была перенесена на новую строку при сжатии экрана, проще использовать гибкий блок:
.container {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.container div {
box-sizing: border-box;
padding: 20px;
background-color: green;
color: white;
font: 24px sans-serif;
}
.one {
flex-basis: 441px;
flex-grow: 2;
}
.two {
flex-basis: 220px;
flex-grow: 1;
}
<div class="container">
<div class="one">One</div>
<div class="two">Two</div>
</div>
Вы можете поэкспериментировать с flex-grow
, flex-basis
и max-width
если вы не хотите, чтобы ваше второе изображение занимало всю ширину, когда оно переходит к следующей строке.
Насколько я знаю, единственный способ добиться такого поведения с сеткой, если только ячейки не имеют одинакового размера, — это использовать медиа-запросы и корректировать прямоугольник сетки непосредственно для меньшего экрана.
Комментарии:
1. Спасибо за ответы — в конце концов, я выбрал этот подход.
2. @Burns Всегда пожалуйста. Если вы считаете, что это решение вашей проблемы, пожалуйста, примите его (и проголосуйте за него), чтобы другим людям с такой же проблемой было легче его найти.
Ответ №2:
grid-area
можно сделать это. Например:
.grid-container {
display: grid;
grid-template-columns: auto auto auto auto;
grid-gap: 10px;
background-color: #2196F3;
padding: 10px;
}
.grid-container > div {
background-color: rgba(255, 255, 255, 0.8);
text-align: center;
padding: 20px 0;
font-size: 30px;
height: 50px;
}
.item1 {
grid-area: 1 / 1 / span 2 / span 3;
}
<div class="grid-container">
<div class="item1">1</div>
<div class="item2">2</div>
</div>
Комментарии:
1. Ваше решение не перенесет второй элемент на следующую строку при уменьшении размера экрана.
2. Правильно, и есть способы справиться с этим. Моей целью было просто помочь OP в курсе области сетки.
3. Какие есть способы справиться с этим, используя сетку, за исключением изменения области сетки в медиа-запросах? Могут быть некоторые, но я о них не знаю.