Я разрабатываю приложение на Angular и столкнулся с проблемой при использовании CSS GRID. Моя сетка адаптивно изменяет положение контента, но мне необходимо, чтобы в каждой строке находилось как минимум 3 ячейки, даже на мобильных устройствах. На данный момент, при переключении на мобильный режим, ячейки располагаются в 2 или 1 колонку. Я хотел бы, чтобы они изменяли свой размер и размещались в 3 колонки.
Вот страница с версткой:
<pre><code><div class="container">
<div *ngFor="let category of [1, 2, 3]" class="grid-container">
<div class="category-header">
<h2 class="category-title">Название категории</h2>
<button size="m" appearance="outline-grayscale" tuiButton class="show-all-button">Показать все ({{ numberOfItems }})</button>
</div>
<div *ngFor="let item of [].constructor(numberOfItems); let i = index" class="grid-item"></div>
<div class="show-more-button">
<button size="m" appearance="outline-grayscale" tuiButton>Показать больше</button>
</div>
</div>
</div></code></pre>
И здесь идет LESS-код:
<pre><code>@border-radius: 8px;
@border-color: #cccccc;
@padding: 16px;
@image-height: 210px;
@font-size: 24px;
button {
border-radius: @border-radius;
}
.container {
max-width: 1200px;
padding: 0;
margin: 0 auto;
}
.grid-container {
display: grid;
border-radius: @border-radius;
box-sizing: border-box;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-template-rows: auto;
gap: @padding;
.grid-item {
aspect-ratio: 16 / 9;
object-fit: cover;
padding: @padding;
text-align: center;
border: 1px solid @border-color;
border-radius: @border-radius;
...
}
}
</code></pre>
Чтобы задать фиксированный размер ячеек в CSS Grid и обеспечить наличие минимум трех ячеек в строке на всех устройствах, вы можете использовать фиксированные значения для колонок непосредственно в правилах `grid-template-columns`. Вместо использования `repeat(auto-fit, minmax(150px, 1fr))`, попробуйте задать специфические размеры колонок.
Вот пример, как можно изменить ваши стили в LESS:
```less
@border-radius: 8px;
@border-color: #cccccc;
@padding: 16px;
@image-height: 210px;
@font-size: 24px;
@item-width: 300px; // Ширина каждой ячейки, задайте по вашему усмотрению
button {
border-radius: @border-radius;
}
.container {
max-width: 1200px;
padding: 0;
margin: 0 auto;
}
.grid-container {
display: grid;
border-radius: @border-radius;
box-sizing: border-box;
// Задаем фиксированную ширину для ячеек и 3 колонки
grid-template-columns: repeat(3, @item-width);
grid-template-rows: auto;
gap: @padding;
.grid-item {
aspect-ratio: 16 / 9;
object-fit: cover;
padding: @padding;
text-align: center;
border: 1px solid @border-color;
border-radius: @border-radius;
...
}
}
// Добавьте медиазапрос для уменьшения ширины на мобильных устройствах
@media (max-width: @item-width * 3) { // Установите ширину вашего контейнера
.grid-container {
grid-template-columns: 1fr; // Строки по одному элементу
}
}
```
### Объяснение:
1. **Фиксированная ширина ячеек**: Здесь задается фиксированная ширина для каждой ячейки (300px в примере). Вы можете изменить это значение на подходящее для вашего дизайна.
2. **Медиазапрос**: Для того чтобы сделать адаптивный дизайн, добавлен медиазапрос. Если ширина контейнера становится меньше, чем 900px (это 3 ячейки по 300px), вы можете сделать отдельные ячейки по одной в строке. На более широких экранах сетка будет оставаться с тремя ячейками в строке.
С этими изменениями ваша сетка должна быть более предсказуемой и поддерживать требуемое количество колонок на мобильных устройствах.
Может быть просто добавить фиксированно три колонки, коль скоро это минимальное количество?
grid-template-columns: repeat(3, minmax(150px, 1fr)) repeat(auto-fit, minmax(150px, 1fr));