Как ограничить количество столбцов в больших окнах просмотра с помощью CSS Grid и автозаполнения / подгонки?

Я начинаю работать с CSS Grid, я читал о свойствах, которые помогают повысить отзывчивость; поэтому я пытаюсь построить небольшую сетку из 6 элементов; я хочу, чтобы они отображались как 2 строки на более крупных устройствах, например:

Как ограничить количество столбцов в больших окнах просмотра с помощью CSS Grid и автозаполнения / подгонки?

А также, чтобы показать их все сложенными на небольших устройствах, чтобы все было хорошо относительно небольших устройств, я использую auto-fill, поэтому он остается отзывчивым, однако, если я просматриваю страницу на экране ноутбука или настольного компьютера, он может заполнить еще один столбец и в итоге выглядит так:

Как ограничить количество столбцов в больших окнах просмотра с помощью CSS Grid и автозаполнения / подгонки? Это мой код макета grid.

display: grid;
grid-template-columns: repeat(auto-fill, 260px);
justify-content: center;
row-gap: 18px;
column-gap: 18px;

Есть ли способ сохранить отзывчивое поведение, но также установить максимальное количество столбцов? Любая помощь приветствуется; Если это можно сделать только с помощью медиа-запросов, это нормально, но сначала я пытаюсь найти способы сделать это без их использования. Кроме того, я как бы заставил его работать так, как задумано, установив горизонтальный padding для всего контейнера сетки, чтобы компенсировать размер дополнительного столбца; но опять же, если есть способ получше, я все уши. Спасибо!

Рабочий примерhttps://codepen.io/IvanS95/pen/NEYdxb

Это и auto-fill на самом деле не означает «отзывчивый». Я уверен, что есть варианты получше, если вы действительно сможете продемонстрировать проблему.

Paulie_D 22.11.2018 17:05

Как они не демонстрируют проблему? Прочтите еще раз, я сказал, что хочу, чтобы сетка отображала две строки, как на первом рисунке, вместо того, чтобы заполнять другой столбец и показывать их, как на втором рисунке, но в любом случае спасибо

IvanS95 22.11.2018 17:10

Не думал, что тени так трудно увидеть, вот и все

IvanS95 22.11.2018 17:24

Отлично. Так-то лучше,

Paulie_D 22.11.2018 17:32

Добавьте, пожалуйста, рабочий пример ..

Wimanicesir 22.11.2018 17:32

Так почему бы не определить количество столбцов и при необходимости использовать медиа-запрос?

Paulie_D 22.11.2018 17:34

@Paulie_D Собственно то, что я сказал в конце описания; Я могу использовать медиа-запросы, я хотел знать, есть ли способ сделать это без media-query

IvanS95 22.11.2018 17:38

@Wimanicesir добавил пример

IvanS95 22.11.2018 17:46

Я не совсем уверен (я использую мобильный телефон), но может ли grid-template-columns: repeat(minmax(auto-fill, 3), 260px); решить эту проблему? В моей голове - и имейте в виду, что я еще не пробовал это в коде - он должен использовать 3 как максимальное количество столбцов трех и auto-fill в противном случае.

David Thomas 22.11.2018 17:53

@DavidThomas пробовал, но не работает, я не думаю, что функцию minmax() можно использовать вместо одного значения там

IvanS95 22.11.2018 17:58

Вы не могу используете auto-fill с количеством столбцов набор ... это невозможно и не ожидаемое поведение. Если вы знать сколько столбцов хотите, просто определите их. auto-fill сделает именно это ... заполнит доступное пространство и обернет тогда.

Paulie_D 22.11.2018 18:22

В качестве тривиального решения вы можете установить максимальную ширину сетки

vals 22.11.2018 21:40

@vals это вроде того, что я сделал в конце, я просто установил горизонтальный padding на сетке, чтобы он не помещался только в другой столбец

IvanS95 22.11.2018 23:19
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
5
13
6 961
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте этот синтаксис:

grid-template-columns: 260px 260px 260px;

Или

grid-template-columns: repeat(3,260px);

Вместо этого:

grid-template-columns: repeat(auto-fill, 260px);

Используйте медиа-запросы, чтобы установить меньше столбцов на небольших экранах.

Также, если промежуток между строками и столбцами одинаковый, вы можете использовать сетка.

Документация

.grid-container{
  display: grid;
  grid-template-columns: 260px 260px 260px;
  grid-gap: 18px;
  background-color: #fff;
  color: #444;
  justify-content: center; 
}

.card {
   border: 1px solid #000;
   width: 260px;
   height: 260px;
}
<div class = "container">
   <div class = "grid-container">
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
   <div class = "grid-item">
      <div class = "card"></div>
   </div>
</div>
</div>

Подойдет, я просто продолжу использовать функцию repeat(), хотя она мне кажется чище, как в repeat(3, 260px).

IvanS95 23.11.2018 15:12

Твердая точка @ IvanS95, я собираюсь отредактировать ее для дальнейшего использования :)

Wimanicesir 23.11.2018 15:15

Добавьте этот код в свой CSS:

grid-template-columns: auto auto auto;

их нужно просто завернуть отдельно.

<div class = "grid-container">
  //grid-items
</div>
<div class = "grid-container">
  //grid-items (2nd row)
</div>

наш код стиля работает, пока не завершится grid-container.

В вашем коде белый это html. Другой, тот же CSS должен работать.

.grid-container{
   display: grid;
   grid-template-columns: repeat(auto-fill, 260px);
   justify-content: center;
   row-gap: 18px;
   column-gap: 18px;
}

.card {
   border: 1px solid #000;
   width: 260px;
   height: 260px;
}
<div class = "container">
   <div class = "grid-container">
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
   </div>
   <div class = "grid-container">
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
     <div class = "grid-item">
        <div class = "card"></div>
     </div>
   </div>
</div>

Это именно то, чего я пытаюсь избежать, идея состоит в том, чтобы иметь возможность обернуть элементы сетки, но в то же время установить максимальное количество элементов в строке; поэтому все они должны быть в одном контейнере, поэтому они обертываются соответствующим образом, не оставляя пустых мест, как в вашем примере

IvanS95 14.11.2019 14:02

Но @ IvanS95 вы всегда можете установить максимальное количество элементов из grid-template-columns: 260px 260px 260px; или с помощью повторения (где вы можете установить ** максимальное количество элементов **, как вы упомянули, потому что он будет напрямую принимать это количество карточек, доступных в HTML, если скорость отклика не твоя забота. Спасибо

Dron 15.11.2019 05:34

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

IvanS95 15.11.2019 14:10

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