javascript - 如何在 HTML/CSS 中有可选的分屏布局?
问题描述
我有一个面板,里面装满了可以任意长度的图块,包括滚动超出视口的下限,因此当前正在使用垂直滚动。
我想要的是一个可选的下面板,它可以根据用户的要求显示或隐藏,它总是占据屏幕的下 25%。然后,上面的图块应缩小到其上方的滚动窗格,因此您可以独立滚动图块,而无需更改下面板的位置。
所以我需要一个外部容器,它始终是屏幕高度的 100%,没有滚动。
在其中,我想要一个可滚动的内容面板。如果这是唯一可见的面板,那么它应该占据外部容器的 100% 高度,从而产生主屏幕正在滚动的错觉。
当下部面板可见时,可滚动内容应仅占据屏幕高度的前 75%,滚动条仅占高度的 75% 以反映这一点。较低的 25% 是应该修复的新面板。下部面板也应该是可独立滚动的。因此,您最终会得到两个相互堆叠的独立滚动面板
我试过用 flexbox 来做到这一点,但没有任何运气。谁能告诉我我做错了什么?
小提琴下面
https://jsfiddle.net/cdg6815s/2/
.app-container {
height: 100%;
padding: 10px;
background-color: blue;
overflow: hidden;
display: flex;
flex-direction: column;
}
.container {
height: 80%;
background-color: green;
padding: 10px;
flex: 0.8;
overflow-y: scroll;
}
.logtailContainer {
height: 20%;
background-color: red;
padding: 10px;
flex: 0.2;
overflow-y: scroll;
}
解决方案
编辑: skobaljic 的评论是一种更简单的方法。我保留这个答案,因为它仍然有效。
我假设你想要这样的东西:
* {
box-sizing: border-box;
}
.b {
height: 100vh;
margin: 0;
padding: 0;
}
.app-container {
height: 100vh;
padding: 10px;
background-color: blue;
overflow: hidden;
display: flex;
flex-direction: column;
}
.contentpanel {
max-height: 75vh;
background-color: green;
padding: 10px;
flex: 0 1 75vh;
overflow-y: scroll;
}
.lowerpanel {
max-height: 25vh;
background-color: red;
padding: 10px;
flex: 0 1 25vh;
overflow-y: scroll;
}
<body class="b">
<div class="app-container">
<div class="contentpanel">
App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App
tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br />
</div>
<div class="lowerpanel">
Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br
/><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br />
</div>
</div>
</body>
几个问题:
- 您正在将
.app-container
高度设置为 100%,但是是什么。您需要设置参考,因此需要在 body/html 上设置高度。 flex
property 是简写 - 所以你设置了 flex 增长(你可能知道),但这是它增长的比率。将 flex-basis 属性设置为 height 可能是更好的方法。- 我将高度值更改为
vh
单位以使用视口高度作为参考。 - 在您的元素上设置
max-height
而不是高度,允许它们缩小/增长但停止在特定的高度值。
推荐阅读
- postgresql - 从 docker-compose 接收到用户必须拥有数据目录的错误
- html - 如何使用 Angular 材质创建 Angular 元素?
- elasticsearch - 使用 Kafka-Connect 将消息路由到不同的 ElasticSearchIndex
- powershell - 如何在 IIS 中使用 powershell 删除选定的 Apppool
- python - Python 线程和套接字
- java - 自定义读取、拆分和添加到大文件中的对象列表
- ios - Objective-C中如何在AVAudioSession的setCategory方法中设置几个选项?
- android - 为 ARM 编译 32 位二进制文件
- xamarin.forms - 如果绑定数组没有项目,则隐藏 Xamarin 表单 StackLayout
- git - Git commit --amend 别名挂起