Как разместить несколько элементов в ячейке столбца сетки, используя попутный ветер?

У меня есть дизайн, где у меня есть 3 элемента. 2 элемента должны располагаться вертикально, а 1 элемент должен находиться в отдельной ячейке. Итак, 2 элемента должны быть размещены в 1 ячейке по вертикали, а 1 элемент занимает всю свою ячейку. Для демонстрации ниже приведено изображение

Как я могу достичь этого дизайна, используя попутный ветер?

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
0
1 066
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете выполнить эту настройку, используя 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>

Попутный ветер

Я пробовал то, что ты сказал. Проблема в том, что 3-й элемент должен быть помещен в первую строку, и поскольку в каждом элементе есть динамические данные, в основном во 2-м элементе, это приводит к тому, что 2-й элемент становится большим, что перемещает 3-й элемент в первой строке слишком вниз. Я прикрепил СС здесь

LosMos 28.11.2022 02:14

@LosMos, я понимаю, что ты имеешь в виду. Похоже, grid не будет хорошо работать с вашей структурой, если вы не используете дополнение Игоря Алексеенко. В вашем случае метод flex не работает? Для этого должен быть идеальный сценарий. Не могли бы вы предоставить код от вашего SS? Кроме того, номер, который я указал для каждого элемента, является произвольным. Вы можете поменять их местами, но это соответствует вашей структуре.

ChenBr 28.11.2022 16:51

На самом деле, чтобы использовать flex, мне придется изменить всю внутреннюю структуру базовых компонентов. Эти компоненты получают html динамически из файлов макета. Я работаю над проектом magento 2, и для всех базовых компонентов существуют разные файлы макета. Я могу изменить базовую структуру html, но это займет некоторое время. Кроме того, я уже разработал дизайн для мобильных устройств, и он отлично работает для мобильных устройств. Не работала только настольная версия, которая сейчас работает. Ответ Игоря Алексеенко помог.

LosMos 28.11.2022 19:15

Рад, что это помогло :) Я не думал о его подходе, рад, что он работает с вашей структурой.

ChenBr 28.11.2022 19:45
Ответ принят как подходящий

Вы можете сделать такой макет с помощью сетки — разделите свой макет на три столбца (боковая панель + основной контент занимают два столбца) и 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] является недопустимым свойством. Но на площадке с попутным ветром работает нормально.

LosMos 28.11.2022 11:25

Должна поддерживаться начиная с версии 2.2+ с mode: 'jit' в конфиге или 3+ по умолчанию - это называется произвольные значения

Ihar Aliakseyenka 28.11.2022 11:46

Хм, я использую Tailwind 3.4. Странно, что он работает не как класс попутного ветра, а как ванильный класс css.

LosMos 28.11.2022 15:19

У @LosMos Tailwind еще нет релиза 3.4 - максимум 3.2.4

Ihar Aliakseyenka 28.11.2022 15:26

Я имею в виду 3.2.4. Там была опечатка.

LosMos 28.11.2022 15:50

Другие вопросы по теме