代码之家  ›  专栏  ›  技术社区  ›  Dave

三个垂直堆叠的中间滚动分隔符

  •  8
  • Dave  · 技术社区  · 15 年前

    是否可以垂直堆叠三个分区,并且只垂直滚动中间的分区?不过,我不想使用像素高度,因为分隔符在可调整大小的对话框中。像这样的(请原谅我的糟糕的ASCII艺术):

    +-----------+
    |  Header   |
    +-----------+
    |          ^|
    |          ||
    |  Scroll  ||
    |          ||
    |          v|
    +-----------+
    |  Footer   |
    +-----------+
    

    目标是固定页眉和页脚,并且随着对话框的增长,中间的DIV将垂直增长。也许我只是在装傻,但我这几个小时一直在和这个做斗争,似乎都做不好。这三个div可能需要在“另一个”div中,但当我这样做时,将高度设置为100%,它会随着中间的div的增长而增长。再说一次,这可能是我没有考虑到的愚蠢的事情。我也试过用桌子也没用。

    谢谢你的帮助。

    2 回复  |  直到 8 年前
        1
  •  7
  •   John Hartsock    15 年前

    这应该管用

    <div id="header" style="position:absolute; top:0px; left:0px; height:50px;overflow:hidden;">
    </div>
    <div id="content" style="position:absolute; top:50px; bottom:50px; left:0px; overflow:auto;">
    </div>
    <div id="footer" style="position:absolute; bottom:0px; height:50px; left:0px; overflow:hidden;">
    </div>
    

    编辑-用于模式对话框中的固定位置页眉和页脚

    <div id="wrapper" style="position:relative; overflow:hidden; height:100%; width:100%;">
        <div id="header" style="position:absolute; top:0px; left:0px; height:50px;overflow:hidden;">
        </div>
        <div id="content" style="position:absolute; top:50px; bottom:50px; left:0px; overflow:auto;">
        </div>
        <div id="footer" style="position:absolute; bottom:0px; height:50px; left:0px; overflow:hidden;">
        </div>
    </div>
    
        2
  •  3
  •   Adam Leggett    8 年前

    2017年再次访问。使用flexbox,现在无需显式定义页眉和页脚的高度即可完成此操作。这至少在所有当前拥有重要市场份额的浏览器中都有效,但ie<=10除外,它仍然有1-5%的份额,这取决于您的要求。因为这通常是一种视觉/可用性机制,并且不会阻塞功能,所以在这种情况下使用flexbox至少应该使页面对不受支持的浏览器的用户可用。

    您所需要做的就是将页眉、内容和页脚包装在一个具有明确高度(例如,正文或其子级具有100%高度)的DIV中,样式为:

      display: flex;
      flex: auto;
      flex-direction: column;
    

    并将样式应用于可滚动窗格:

      overflow-y: auto;
    

    如果希望可滚动窗格增大,以便使用所有垂直空间:

      flex-grow: 1;
    

    在页眉和页脚(对于Safari和IE 10是必需的):

      flex-grow: 0;
    

    https://jsfiddle.net/ornsk10a/