У меня есть дизайн, где у меня есть 3 элемента. 2 элемента должны располагаться вертикально, а 1 элемент должен находиться в отдельной ячейке. Итак, 2 элемента должны быть размещены в 1 ячейке по вертикали, а 1 элемент занимает всю свою ячейку. Для демонстрации ниже приведено изображение
Как я могу достичь этого дизайна, используя попутный ветер?
Вы можете выполнить эту настройку, используя grid
/flex
. Использование того или иного зависит от вашего контента.
Создайте сетку три на два, используя grid-cols-3
и grid-rows-2
на контейнере сетки. Затем установите диапазон каждого контейнера в соответствии с вашей структурой (используя col-span-n row-span-n
).
Читайте о grid-cols
здесь и о grid-row
здесь.
<div class = "border-2 grid grid-cols-3 grid-rows-2">
<div class = "border-2 col-span-1">1</div>
<div class = "border-2 col-span-2 row-span-2">2</div>
<div class = "border-2 col-span-1">3</div>
<div>
У нас будет два контейнера. Основной контейнер будет обертывать все элементы (включая второй контейнер), а внутренний контейнер будет обертывать ваши первые два элемента. К каждому из этих контейнеров будет применена утилита flex
.
Затем мы применим flex-col
ко второму контейнеру. Таким образом, контейнер будет размещать свои дочерние элементы друг над другом, как и первый столбец вашего изображения.
Flex-направление первого контейнера по умолчанию — flex-row
, поэтому внутренний контейнер и третий элемент будут расположены рядом друг с другом, как строка.
Чтобы придать структуре пропорции, похожие на ваше изображение, мы можем установить ширину внутреннего контейнера на 30% (w-[30%]
), а третьего элемента на 70% (w-[70%]
).
Читайте о flex-direction здесь.
<div class = "flex border-2">
<div class = "flex w-[30%] flex-col">
<div class = "border-2">1</div>
<div class = "border-2">2</div>
</div>
<div class = "w-[70%] border-2">3</div>
<div></div>
</div>
@LosMos, я понимаю, что ты имеешь в виду. Похоже, grid
не будет хорошо работать с вашей структурой, если вы не используете дополнение Игоря Алексеенко. В вашем случае метод flex
не работает? Для этого должен быть идеальный сценарий. Не могли бы вы предоставить код от вашего SS? Кроме того, номер, который я указал для каждого элемента, является произвольным. Вы можете поменять их местами, но это соответствует вашей структуре.
На самом деле, чтобы использовать flex, мне придется изменить всю внутреннюю структуру базовых компонентов. Эти компоненты получают html динамически из файлов макета. Я работаю над проектом magento 2, и для всех базовых компонентов существуют разные файлы макета. Я могу изменить базовую структуру html, но это займет некоторое время. Кроме того, я уже разработал дизайн для мобильных устройств, и он отлично работает для мобильных устройств. Не работала только настольная версия, которая сейчас работает. Ответ Игоря Алексеенко помог.
Рад, что это помогло :) Я не думал о его подходе, рад, что он работает с вашей структурой.
Вы можете сделать такой макет с помощью сетки — разделите свой макет на три столбца (боковая панель + основной контент занимают два столбца) и 2 строки, как это сделал @ChenBr
<div class = "border-2 grid grid-cols-3 grid-rows-2">
<div class = "border-2 col-span-1">1</div>
<div class = "border-2 col-span-2 row-span-2">2</div>
<div class = "border-2 col-span-1">3</div>
<div>
Однако grid-rows-2
будет скомпилирован как
.grid-rows-2 {
grid-template-rows: repeat(2, minmax(0, 1fr));
}
1fr
для обеих строк означает, что 2 строки будут иметь одинаковый размер. Поэтому я бы рекомендовал изменить этот класс на grid-rows-[min-content_1fr]
- это означает, что первая строка будет занимать место на основе его минимального содержимого
min-content — это ключевое слово, представляющее наибольший минимальный вклад элементов сетки, занимающих дорожку сетки.
а второй возьмет на себя остальное - но это на ваше усмотрение
Базовый пример
<div class = "grid grid-cols-3 grid-rows-[min-content_1fr]">
<div>1</div>
<div class = "col-span-2 row-span-2">2</div>
<div>3</div>
<div>
какая версия попутного ветра? Когда я пытаюсь применить в своем проекте, браузер сообщает мне, что grid-rows-[min-content_1fr] является недопустимым свойством. Но на площадке с попутным ветром работает нормально.
Должна поддерживаться начиная с версии 2.2+ с mode: 'jit'
в конфиге или 3+ по умолчанию - это называется произвольные значения
Хм, я использую Tailwind 3.4. Странно, что он работает не как класс попутного ветра, а как ванильный класс css.
У @LosMos Tailwind еще нет релиза 3.4 - максимум 3.2.4
Я имею в виду 3.2.4. Там была опечатка.
Я пробовал то, что ты сказал. Проблема в том, что 3-й элемент должен быть помещен в первую строку, и поскольку в каждом элементе есть динамические данные, в основном во 2-м элементе, это приводит к тому, что 2-й элемент становится большим, что перемещает 3-й элемент в первой строке слишком вниз. Я прикрепил СС здесь