#css #vue.js #flexbox #tailwind-css
Вопрос:
я хочу иметь следующую сетку элементов с использованием flex, tailwind и vue:
Я получаю много элементов из серверной части, и я хочу отображать каждый элемент в контейнере flex рядом друг с другом, но только 2 элемента в одной строке. Этого должно быть легко достичь с помощью justify-between и w-1/2 для каждого элемента. Но следующее требование состоит в том, чтобы элементы, расположенные рядом друг с другом, имели ту же высоту, что и элемент с большим содержанием, чем у другого. Высота теперь зафиксирована здесь, только поля. Как я могу это сделать? У меня работает аналогичный подход, но не с динамическим количеством элементов, а только с фиксированным количеством элементов. Но как я могу этого достичь, если я не знаю, сколько предметов я получу?
Мой нынешний подход:
<div class="mt-3 flex flex-row flex-1 flex-wrap justify-between">
<div v-for="item in items" class="w-1/2 mt-1.5">
<div
class="border border-solid rounded-lg border-black border-opacity-10"
>
The content for each item belongs here
</div>
</div>
</div>
Ответ №1:
Вы можете разделить цикл на 2, а затем выполнить следующее. Смотрите демонстрацию.
<div class="p-4 space-y-4">
<div class="flex space-x-4">
<div class="flex w-1/2 border p-4">Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum assumenda eaque veritatis, porro culpa reprehenderit nisi. Iusto labore ex culpa excepturi velit eos a consequatur beatae aliquam, vero quidem ut.Beatae dolores eligendi accusantium delectus fugiat ex iure vero quam doloribus quo sapiente, necessitatibus fuga! Voluptatibus eaque aut quis omnis magni dolorum iusto delectus laborum, nesciunt id quia praesentium rerum?</div>
<div class="flex w-1/2 border p-4">small content</div>
</div>
<div class="flex space-x-4">
<div class="flex w-1/2 border p-4">small content</div>
<div class="flex w-1/2 border p-4">Lorem ipsum dolor sit amet consectetur adipisicing elit. Magni ut quod voluptas nisi modi perspiciatis aliquid ad tempora cum corporis sapiente blanditiis dicta, esse reiciendis sed eveniet, libero, dignissimos perferendis.</div>
</div>
<div class="flex space-x-4">
<div class="flex w-1/2 border p-4">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Voluptates eum saepe natus, numquam quibusdam praesentium, incidunt debitis at, nihil similique quidem doloribus? Natus delectus vero quidem, autem fugiat amet odit. Maxime dolorum nostrum vitae adipisci, exercitationem corporis iure, repellat sunt quidem numquam voluptatem beatae dignissimos aliquid suscipit laboriosam modi quibusdam excepturi possimus voluptatibus voluptas deleniti maiores saepe atque doloremque. Totam. Fuga dignissimos ducimus dicta pariatur temporibus dolor commodi soluta. Expedita neque hic explicabo deleniti laudantium animi nesciunt aut vero. Deserunt, sint. Deleniti illum optio rem unde placeat ab eos fuga. Cumque illum odio, consequuntur repudiandae quis error fugit deserunt velit modi illo soluta nihil architecto, ex cum nesciunt, ad laboriosam. Ex nihil unde modi facere quibusdam, nesciunt quod aliquid voluptatum.</div>
<div class="flex w-1/2 border p-4">Lorem ipsum dolor sit amet consectetur adipisicing elit. Magni ut quod voluptas nisi modi perspiciatis aliquid ad tempora cum corporis sapiente blanditiis dicta, esse reiciendis sed eveniet, libero, dignissimos perferendis.</div>
</div>
</div>
Комментарии:
1. Спасибо, макет выглядит именно так, как я хочу! Но с вашим решением я не знаю, как перебирать мои предметы, чтобы получить точный макет? Потому что после каждых двух предметов мне нужно обернуть
<div class="flex space-x-4">
мои<div class="flex w-1/2 border p-4">
предметы другой оберткой2. Привет, я исправил это с помощью двух отдельных массивов и цикла v-для индекса. Спасибо! 🙂
Ответ №2:
Вы можете увидеть пример кода здесь. Для динамических данных вы можете записать следующее.
<div class="grid grid-cols-2">
<div v-for="item in items">
<div class="border p-4 rounded-lg m-3">
A lot content
</div>
</div>
</div>
Комментарии:
1. Спасибо! Это дает мне правильный макет и работает с моими итерациями. Но есть некоторые подводные камни: можно ли использовать flex для структурирования моих товаров? Потому что, если я использую какой-либо гибкий элемент в своих элементах, бок о бок высота контейнера сетки больше не работает. Например, я использую для своего элемента следующее
<div class="flex border p-4 rounded-lg m-3">
: вместо<div class="border p-4 rounded-lg m-3">
этого высота больше не выровнена по моему боковому элементу.2. Вы можете добавить класс flex в тег div. После добавления класса flex в мой пример кода ошибка не возникает. Высота выровнена по соседнему элементу. Вы можете посмотреть здесь .
3. По какой — то причине это не работает для меня с моим полным кодом. Но я понял, что это работает с помощью вышеупомянутого принятого решения. Спасибо!