Хорошо, у моего модуля заголовка есть логотип, компонент телефона и компонент корзины. Вот этот заголовок:
![enter image description here](https://i.stack.imgur.com/lRKOa.png)
И вот что я пытаюсь сделать:
- Адаптивный адаптивный заголовок, поэтому он хорошо смотрится при ширине области просмотра 400-1920 пикселей.
- Чтобы можно было переупорядочить все компоненты заголовка в любом порядке.
- Когда ширина области просмотра превышает 640 пикселей, я хочу, чтобы логотип был слева, а модули телефона и корзины - справа, как на рисунке выше.
- Когда ширина области просмотра составляет 480-640 пикселей, я хочу, чтобы компоненты телефона и корзины находились во втором ряду, и я хочу, чтобы расстояния от их краев до внешних границ были одинаковыми, например:
![enter image description here](https://i.stack.imgur.com/9vA6v.png)
- Когда ширина области просмотра меньше 480px по умолчанию, я хочу, чтобы логотип был в первом ряду, телефон во втором ряду и корзина в третьем ряду, вот так:
![enter image description here](https://i.stack.imgur.com/21F6W.png)
- Но я хочу иметь возможность поменять логотип и компонент телефона без редактирования HTML, чтобы он выглядел так:
![enter image description here](https://i.stack.imgur.com/rBqNl.png)
Я не могу сделать это, чтобы он соответствовал всем требованиям. Вот лучшее, что я придумал до сих пор:
https://next.plnkr.co/edit/9nHCyGk2KC8ZO9JA?preview
Я могу поменять телефон и корзину, но не телефон и логотип, а не корзину и логотип. Если я удаляю элемент <div class="pg-Header_phoneBasketContainer">
из html и применяю grid-area: phone
и grid-area: basket
непосредственно к телефону и корзине соответственно, то я не могу сделать одинаковые расстояния от краев телефона и корзины до внешних границ одинаковыми, потому что будет 2 ячеек во втором ряду, и элементы сетки будут расположены относительно их ячеек, и эти элементы имеют разную длину, поэтому расстояние до границ будет другим.
Если бы я мог использовать позиционирование сетки на косвенных дочерних элементах контейнера сетки, то это было бы легко сделать с областями сетки. Я бы просто определил соответствующие grid-template-areas
для контейнера и соответствующие grid-area
свойства для .pg-Header_phoneBasketContainer
, .pg-Header_phone
и .hdr-Basket
в разных окнах просмотра:
![enter image description here](https://i.stack.imgur.com/lRKOa.png)
.hdr-Top {
display: grid;
grid-template-areas: "logo phoneBasket";
}
.pg-Header_logo {
grid-area: logo;
}
.pg-Header_phoneBasketContainer {
grid-area: phoneBasket;
}
@media only screen and(max-width: 480px) {
.hdr-Top {
display: grid;
grid-template-areas: "phone" "logo" "basket";
}
.pg-Header_phone {
grid-area: phone;
}
.hdr-Basket {
grid-area: basket;
}
}
Это приведет к этому на больших экранах:
![enter image description here](https://i.stack.imgur.com/lRKOa.png)
И это по меньшему:
![enter image description here](https://i.stack.imgur.com/rBqNl.png)
К сожалению, CSS Grid не допускает позиционирования сетки косвенных дочерних элементов . Есть идеи, как мне достичь того, чего я пытаюсь достичь?