Можно ли обернуть сетку CSS без использования медиа-запросов?
В моем случае у меня есть недетерминированное количество элементов, которые я хочу разместить в сетке, и я хочу, чтобы эта сетка обернулась. Используя Flexbox, я не могу надежно и красиво разместить вещи. Я бы тоже хотел избежать кучи медиа-запросов.
Вот пример кода :
.grid {
display: grid;
grid-gap: 10px;
grid-auto-flow: column;
grid-template-columns: 186px 186px 186px 186px;
}
.grid > * {
background-color: green;
height: 200px;
}
<div class="grid">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
А вот изображение в формате GIF:
В качестве примечания, если бы кто-нибудь мог сказать мне, как я мог бы избежать указания ширины всех элементов, как я, grid-template-columns
это было бы здорово. Я бы предпочел, чтобы дети указали свою ширину.
grid-template-columns: auto auto auto auto;
работает в этом случае? =)Ответы:
Используйте либо,
auto-fill
либоauto-fit
как число повторенияrepeat()
записи.auto-fill
Сетка будет повторять столько треков, сколько возможно, не переполняя свой контейнер.
В этом случае, учитывая приведенный выше пример (см. Изображение) , только 5 дорожек могут поместиться в грид-контейнер без переполнения. В нашей сетке всего 4 элемента, поэтому пятый создается как пустая дорожка в оставшемся пространстве.
Остальное оставшееся пространство, дорожка № 6, завершает явную сетку. Это означает, что не хватило места для размещения другой дорожки.
auto-fit
auto-fit
Ключевое слово ведет себя так же , какauto-fill
, за исключением того, что после алгоритма размещения элемент сетки либо пустые дорожки в пределах оставшегося пространства будут свернуты в0
.Сетка по-прежнему будет повторять столько треков, сколько возможно, не переполняя свой контейнер, но пустые треки будут свернуты в
0
.Свернутая дорожка рассматривается как имеющая фиксированную функцию определения размера дорожки
0px
.В отличие от
auto-fill
примера изображения, пустая пятая дорожка сворачивается, заканчивая явную сетку сразу после 4-го элемента.auto-fill
противauto-fit
Разница между ними заметна при использовании
minmax()
функции.Используйте
minmax(186px, 1fr)
для изменения диапазона элементов от186px
до186px
плюс часть оставшегося пространства в контейнере сетки.При использовании
auto-fill
элементы будут расти, если не будет места для размещения пустых дорожек.При использовании
auto-fit
элементы будут расти, чтобы заполнить оставшееся пространство, потому что все пустые дорожки свернуты0px
.Игровая площадка:
CodePen
Проверка треков автозаполнения
Проверка автоподгонки гусениц
источник
display: grid
элементах используйтеjustify-content: center
repeat(auto-fill, minmax(186px, 1fr));
это не пиксели, но до тех пор, пока внутри div есть текст?Вы хотите либо
auto-fit
илиauto-fill
внутриrepeat()
функции:Разница между ними становится очевидной, если вы также используете a,
minmax()
чтобы разрешить гибкие размеры столбцов:Это позволяет вашим столбцам изменяться по размеру, от 186 пикселей до столбцов одинаковой ширины, растягивающихся по всей ширине контейнера.
auto-fill
создаст столько столбцов, сколько поместится по ширине. Если, скажем, уместится пять столбцов, даже если у вас всего четыре элемента сетки, будет пятый пустой столбец:Использование
auto-fit
вместо этого предотвратит пустые столбцы, при необходимости растягивая ваши:источник
Вы можете искать
auto-fill
:Демо: http://codepen.io/alanbuchanan/pen/wJRMox
Чтобы использовать доступное пространство более эффективно, вы можете использовать
minmax
и передать вauto
качестве второго аргумента:Демо: http://codepen.io/alanbuchanan/pen/jBXWLR
Если вам не нужны пустые столбцы, вы можете использовать
auto-fit
вместоauto-fill
.источник
У меня была похожая ситуация. Вдобавок к тому, что вы сделали, я хотел центрировать свои столбцы в контейнере, не позволяя пустым столбцам перемещаться влево или вправо:
источник
Вот моя попытка. Простите за пух, я чувствовал себя более креативным.
Мой метод - это родитель
div
с фиксированными размерами . Остальное просто соответствует содержимому этого div.Это изменит масштаб изображения независимо от соотношения сторон. Там не будет никакого жесткого подрезания либо.
источник