如何在 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;

}


繁星点点滴滴
浏览 107回答 2
2回答

眼眸繁星

&nbsp;skobaljic 的评论是一种更简单的方法。我保留这个答案,因为它仍然有效。我假设你想要这样的东西:* {&nbsp; box-sizing: border-box;}.b {&nbsp; height: 100vh;&nbsp; margin: 0;&nbsp; padding: 0;}.app-container {&nbsp; height: 100vh;&nbsp; padding: 10px;&nbsp; background-color: blue;&nbsp; overflow: hidden;&nbsp; display: flex;&nbsp; flex-direction: column;}.contentpanel {&nbsp; max-height: 75vh;&nbsp; background-color: green;&nbsp; padding: 10px;&nbsp; flex: 0 1 75vh;&nbsp; overflow-y: scroll;}.lowerpanel {&nbsp; max-height: 25vh;&nbsp; background-color: red;&nbsp; padding: 10px;&nbsp; flex: 0 1 25vh;&nbsp; overflow-y: scroll;}<body class="b">&nbsp; <div class="app-container">&nbsp; &nbsp; <div class="contentpanel">&nbsp; &nbsp; &nbsp; 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&nbsp; &nbsp; &nbsp; tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br />&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="lowerpanel">&nbsp; &nbsp; &nbsp; 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&nbsp; &nbsp; &nbsp; /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br />&nbsp; &nbsp; </div>&nbsp; </div></body>几个问题:您将高度设置.app-container为 100%,但是是什么。你需要设置一个参考,所以在body/html上设置高度是必要的。flex属性是简写 - 所以你设置了 flex Growth (你可能知道),但这就是它将增长的比率。将 flex-basis 属性设置为高度可能是更好的方法。我将高度值更改为vh单位以使用视口高度作为参考。设置max-height元素而不是高度,允许它们缩小/增长,但停止在特定的高度值。

皈依舞

如果使用flex,则可以在主容器上使用flex:1;或flex-grow:1来代替设置固定,并且仅在可以隐藏的第二个容器上height设置height/ 。min-height为了填充窗口,height:100vh 和 body 的边距重置在这里也很有效。如果涉及border和,还要注意型号,将它们包含在您的尺码中。paddingbox-sizing这是一个带有复选框的演示,用于切换第二个容器的隐藏/显示,并box-sizing注意padding计算.app-container100vh 高度。body {&nbsp; margin: 0;}.app-container {&nbsp; height: 100vh;&nbsp; padding: 10px;&nbsp; background-color: blue;&nbsp; overflow: hidden;&nbsp; display: flex;&nbsp; flex-direction: column;&nbsp; box-sizing: border-box;}.contentpanel {&nbsp; background-color: green;&nbsp; padding: 10px;&nbsp; flex: 1;&nbsp; overflow-y: scroll;}.lowerpanel {&nbsp; height: 20%;&nbsp; background-color: red;&nbsp; padding: 10px;&nbsp; min-height: 4em;&nbsp; overflow-y: scroll;}/* demo purpose CSS to use input/label to toggle display of lowerpanel */#hide {&nbsp; position: absolute;&nbsp; right: 100vw;}[for="hide"] {&nbsp; cursor: pointer;&nbsp; background: #bee;&nbsp; border: 1px solid;&nbsp; border-radius: 5px;&nbsp; padding: 0.25em;&nbsp; display: block;&nbsp; width: max-content;&nbsp; margin: auto;}#hide:checked~.lowerpanel {&nbsp; display: none;}<div class="app-container">&nbsp; <input type="checkbox" id="hide"><!-- input for demo purpose -->&nbsp;&nbsp;&nbsp; <div class="contentpanel">&nbsp; &nbsp; <label for="hide">toggle red container</label><!-- label for demo purpose -->&nbsp; &nbsp; 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&nbsp; &nbsp; <br /><br /> App tiles<br /><br /> App tiles<br /><br /> App tiles<br /><br />&nbsp; </div>&nbsp; <div class="lowerpanel">&nbsp; &nbsp; 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&nbsp; &nbsp; /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br /> Logtail stuff<br /><br />&nbsp; </div>&nbsp; </div
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript