css - 如何获取 CSS 溢出和高度 :calc to work in a resizable div

标签 css vue.js

我正在使用 vue-grid-layout,它提供了 x 个 div。通过拖动右下角的图标可以调整每个 div 的大小。

我试图将 div 分成 3 个逻辑部分。我想要拥有

  • 固定高度的顶部,
  • 一个可变的中间部分,和
  • 固定高度的底部

我无法将中间部分包含在它自己的空间中。无论我做什么,它似乎都会溢出。向中间 div 的样式添加 overflow:auto 和 height:calc(100%-topHeight+bottomHeight) 似乎并没有按预期工作。作为额外的好处,我不确定我是否知道父 div 的高度,因为它们可以调整大小并根据网格布局/网格元素组件计算。

我在下面的 fiddle 中有一个演示 https://jsfiddle.net/uglyhobbitfeet/gs2qf3t6/1/

下面是我试图开始工作的主要代码块。

'            <v-layout secondary>',
'              <v-flex xs12>',
'                <div style="height:25px;background-color:green">TOP</div>',
'              </v-flex>',
'              <v-flex xs12 style="height:calc(100%-50px);overflow:auto;">',
'                <div style="height:125px;background-color:blue">MIDDLE</div>',
'              </v-flex>',    
'              <v-flex xs12>',
'                <div style="height:25px;background-color:red">BOTTOM</div>',
'              </v-flex>',
'            </v-layout>',

最佳答案

您可以使用 Flexbox 实现此目的或 Grid布局。两者的标记相同,都不依赖于已知的高度或计算。

HTML

<div class="container">
  <header>Header</header>
  <div class="body">
    <div class="body-content">Body</div>
  </div>
  <footer>Footer</footer>
</div>

选项 1:Flex CSS

.container {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.body {
  flex: 1 1 auto;
  overflow: auto;
}

header,
footer {
  flex: 0 0 auto;
}

选项 2:网格 CSS

.container {
  display: grid;
  grid-template:
    "header" auto
    "body" 1fr
    "footer" auto;
}

.body {
  overflow: auto;
}

关于css - 如何获取 CSS 溢出和高度 :calc to work in a resizable div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54367095/

相关文章:

json - vuejs : the correct path of local json file for axios get request

javascript - 如何在 Vue 中为整个应用程序注册全局指令

javascript - VueJS - Axios 数组未更新

html - 按钮未与绝对定位 HTML CSS 的浏览器底部对齐

javascript - "Incremented"元素中的 CSS 类

html - 垂直排列 div 类图 block

html - 如何调整标签之间垂直虚线的长度?

css - Mobile Safari,CSS 动画在导航时卡住

javascript - 使用路由或查询更改 vuetify 选项卡

vue.js - 如何在Vuetify数据表中同时使用v槽:item and v-slot:item. <名称>?