У меня есть несколько пунктов, которые должны отображаться в сетке (3 подряд на рабочем столе, 2 подряд на планшете, 1 подряд на телефоне). Каждый элемент имеет подэлементы, которые должны отображаться, когда кто-то нажимает на элемент в сетке. Сложность заключается в том, что подэлементы всегда должны размещаться под строкой выбранного элемента. Кроме того, что элементы отображаются с фиксированной шириной (рабочий стол, например, 1400px и c), а подэлементы всегда находятся в полноэкранном режиме.
Вот как это должно выглядеть на рабочем столе
Я действительно не знаю, какое хорошее решение для этого может быть, мой код сейчас очень грязный и это все равно не работает для планшета или телефона - см. мою скрипку:
new Vue({
el: "#app",
data: {
items: [
{
title: '1. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '2. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '3. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '4. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '5. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '6. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '7. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '8. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
},
{
title: '9. Element',
subitems: [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
],
curIndex: null
},
})
.items {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
.item {
background: green;
height: 120px;
width: 120px;
margin: 10px 5px;
}
.big-item {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
left: 0;
height: 150px;
width: 100%;
background: red;
}
.subitem {
height: 50px;
width: 50px;
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app" class="items">
<template
v-for="(item, index) in items"
>
<div
:key="index"
class="item"
:v-click="curIndex === index ? curIndex = null : curIndex = index"
v-text="item.title"
>
</div>
<template
v-if="(index === 2 || index === 5 || index === 8)"
>
<div
v-for="(item, index) in items"
:key="index"
class="big-item"
>
<p v-text="item.title"></p>
<div
v-for="(subitem, subindex) in item.subitems"
:key="subindex"
class="subitem"
>
</div>
</div>
</template>
</template>
</div>