css - 如何让 v-col 变成可滚动的?

标签 css vue.js flexbox vuetify.js vuetifyjs3

我正在尝试实现以下布局。

  • 灰色容器应遍布整个视口(viewport),但不得更大
  • 绿色v-row应填充灰色容器
  • v-col 1 应填充可用空间,必要时应添加滚动条
  • v-col 2 应填充可用空间并在必要时缩小
  • v-col 3 应始终位于底部且仅占用必要的空间

enter image description here

到目前为止,我有以下内容。问题是“1”不会变成可滚动的,而是将“2”和“3”推出视口(viewport)。我做错了什么?

额外问题:是否有更好的方法让容器填充视口(viewport)?由于某种原因,100% 对我不起作用。

更多好处:仅使用常规 div 来实现这一点会更容易吗?

<template>
  <v-app>
    <v-container class="ma-0 pa-0 d-flex full-height">
      <v-row no-gutters class="d-flex flex-column flex-nowrap flex-1-0-100">
        <!-- column 1 -->
        <v-col class="overflow-y-auto flex-1-0">
          <v-list :items="dummy"></v-list>
        </v-col>

        <!-- column 2 -->
        <v-col class="d-flex justify-center flex-1-1-100">
          <v-btn color="primary">+</v-btn>
        </v-col>

        <!-- column 3 -->
        <v-col class="d-flex justify-center flex-0-1">
          <v-btn color="secondary">Schließen</v-btn>
        </v-col>
      </v-row>
    </v-container>
  </v-app>
</template>

<script setup>
  const length = 10 // Adjust for smaller/larger array
  const dummy = [...Array(length).keys()]
</script>

<style scoped>
  .full-height {
    height: calc(100vh - 37px);
  }
</style>

最佳答案

据我了解,您希望在第 1 列和第 2 列之间平均分配未使用的空间,但第 1 列应占用尽可能多的空间,但不能超过可用空间。

那么有两个问题:

  • 第 1 列可以增长而不收缩 (flex-1-0),但您希望它占用的空间不超过其他列剩余的空间,因此如果有,它应该收缩没有足够的可用空间,因此应该是 flex-1-1
  • 第 2 列的 flex-basis 设置为 100% (flex-1-1-100),但它应该只占用第 1 列留下的空间,因此应该是 flex-1-1

这是一个playground


对我来说,如果您的布局只是一个 flex 列,那么使用 v-rowv-col 会很困惑。在这种情况下,仅使用 div 似乎更容易,特别是因为 v-col 有自己的 Flex 规则,可能会妨碍您。这是playground using divs.

关于css - 如何让 v-col 变成可滚动的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76917066/

相关文章:

javascript - 如何将 100% 高度应用于 div?

javascript - 滚动到元素在 <ol> 中的位置

CSS 动画/过渡与不透明度交互

javascript - Vue js 如何从模板 Datetimepicker 获取格式化值

css - 玩转 CSS 不透明度

javascript - Vue.js - 为按字母顺序排序的列表创建字母标题

javascript - Vue.js Electron : Synchronize variables between backend and frontend

css - Flexbox 均匀大小的元素而不考虑内容

html - 不同大小的盒子不会与 flex 对齐

css - flex 行不换行