Как разместить один элемент в строке адаптивной сетки?

Я использую сетку для размещения карточек. Сетка адаптивна с использованием minimax и auto-fit:

grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));

Но я хотел бы иметь одну карту в первом ряду, чтобы карта не охватывала (т. е. имела ту же ширину, что и карты в следующих строках).

Итак, вот желаемые макеты для 1-3 столбцов (в зависимости от ширины экрана), где x означает «карточка», а . означает «пустое место»:

x
x
x

x .
x x
x x

x . .
x x x
x x x
x x x

Я попытался указать grid-row для второй карточки и далее, но поскольку я заранее не знаю, сколько столбцов там будет (шаблон адаптивной сетки), я не знаю.

Мне понадобится такое свойство, как min-grid-row.

Обновлено:

  • Я не могу разместить первый элемент за пределами сетки, потому что хочу, чтобы все карточки имели одинаковую ширину (адаптивную).
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете приблизиться к этому, поместив псевдоэлемент в строку 1 (здесь он окрашен в синий цвет), который простирается до конечного столбца (с минимальной шириной, соответствующей минимальной ширине столбца).

Затем при наименьшей ширине (скажем) мобильного телефона вы отключите псевдоэлемент в медиа-запросе.

https://codepen.io/Paulie-D/pen/bGPbBNr

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: .5em;
}

.grid:after {
  content: "";
  grid-row: 1;
  grid-column: 2 / -1;
  min-width: 250px;
  background: lightblue;
}

.item {
  border: 1px solid grey;
  text-align: center;
}

@media (max-width: 520px) {
  .grid::after {
    background: pink;
    content: none;
  }
}
<div class = "grid">
  <div class = "item">Item 1</div>
  <div class = "item">Item 2</div>
  <div class = "item">Item 3</div>
  <div class = "item">Item 4</div>
  <div class = "item">Item 5</div>
  <div class = "item">Item 6</div>
  <div class = "item">Item 7</div>
  <div class = "item">Item 8</div>
  <div class = "item">Item 9</div>
  <div class = "item">Item 10</div>
  <div class = "item">Item 11</div>
  <div class = "item">Item 12</div>
</div>

выглядит хорошо, приму позже сегодня, если не появится что-то еще. Спасибо!

Leevi L 04.07.2024 14:59

Оказывается, есть еще лучший ответ, используя grid-column: 1 для второго ребенка, см. принятый ответ.

Leevi L 05.07.2024 14:20
Ответ принят как подходящий

Возможно, я что-то упускаю, но похоже, что для второго элемента достаточно установить Grid-column: 1:

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: .5em;
}

.item {
  border: 1px solid grey;
  text-align: center;
}

.item:nth-child(2) {
  grid-column: 1;
}
<div class = "grid">
  <div class = "item">Item 1</div>
  <div class = "item">Item 2</div>
  <div class = "item">Item 3</div>
  <div class = "item">Item 4</div>
  <div class = "item">Item 5</div>
  <div class = "item">Item 6</div>
  <div class = "item">Item 7</div>
  <div class = "item">Item 8</div>
  <div class = "item">Item 9</div>
  <div class = "item">Item 10</div>
  <div class = "item">Item 11</div>
  <div class = "item">Item 12</div>
</div>

работает, фантастический ответ! К вашему сведению, по аналогичной причине я пытался, но не смог использовать grid-row: 2 и не подумал установить для столбца сетки значение 1. Что меня удивляет, так это то, что это похоже на настоящий «разрыв строки», т. е. влияет на последующие элементы даже без установки order. Спасибо!

Leevi L 05.07.2024 14:19

это то, что я пробовал изначально, но у меня это не сработало, не знаю почему (и я был убежден, что это сработает)

Temani Afif 05.07.2024 15:43

Если вы не используете Grid-auto-flow: Density, после размещения элемента во второй строке пустые места в первой строке не будут использоваться.

vals 08.07.2024 10:16

Другие вопросы по теме