Здравствуйте! Для достижения желаемого поведения сетки с помощью CSS Grid можно использовать следующие настройки. Вам потребуется установить параметры для родительского элемента, чтобы он реагировал на количество вложенных элементов.
Вот пример CSS, который поможет вам реализовать описанную вами логику:
```css
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* Сетка с 3 колонками */
gap: 10px; /* Расстояние между элементами (по желанию) */
}
.item {
background-color: lightblue; /* Цвет фона для наглядности */
padding: 20px; /* Отступы внутри элементов */
text-align: center; /* Выравнивание текста по центру */
}
/* Стили для одного элемента, чтобы он занимает всю ширину */
.container:only-child {
grid-template-columns: 1fr; /* Один элемент занимает 100% ширины */
}
/* Стили для двух элементов */
.container:has(:nth-child(2)) {
grid-template-columns: repeat(2, 1fr); /* Два элемента делят по 50% ширины */
}
```
### Объяснение:
1. **Сетка с 3 колонками:** `grid-template-columns: repeat(3, 1fr);` устанавливает, что в обычном состоянии будет 3 колонки, каждая из которых занимает равную долю доступного пространства (1fr).
2. **Стили по количеству элементов:**
- Для одиночного элемента используется селектор `:only-child`, который устанавливает одну колонку (`1fr`), заставляя элемент занимать всю ширину.
- Для двух элементов используем комбинацию селектора `:has` и `:nth-child(2)`, чтобы установить сетку на 2 колонки, когда есть ровно два дочерних элемента.
### Учтите:
- Селектор `:has` не поддерживается во всех браузерах, поэтому имейте это в виду при разработке.
- Если вам нужно будет реализовать более сложные стили для разных количеств элементов, вам может потребоваться использовать JavaScript для динамического изменения классов на основе количества дочерних элементов.
Этот код должен предоставлять необходимое поведение для ваших элементов внутри сетки. Вы можете адаптировать стили по своему усмотрению.