【问题标题】:CSS for having a scrollable div, take up 100% available height, but not add scroll bar to body具有可滚动 div 的 CSS,占用 100% 可用高度,但不向正文添加滚动条
【发布时间】:2020-04-07 23:01:49
【问题描述】:

我正在尝试让布局在没有任何 JS 的情况下工作,只需要 HTML 和 CSS。

top-div
left-div      center-div      right-div

这个想法是在中心 div 上有垂直滚动条,但在页面上没有其他地方,包括正文。

似乎最好的想法是使用垂直弹性盒,制作顶行和底行,然后使用水平弹性盒制作左、中和右。

这有多难?

好吧,如果你看看这个小提琴,我显然很难理解:

https://jsfiddle.net/gL4pwkxu/1/

文档总是希望超出窗口的高度。为什么?

【问题讨论】:

    标签: css flexbox height


    【解决方案1】:

    我认为问题在于您忽略了 <header>top</header>元素 我还将高度单位更改为视口高度而不是 %。看一看:https://jsfiddle.net/zL6y7x2j/

    希望对你有帮助

    【讨论】:

    • 感谢您的回答,但我希望标题是特定高度,而不是百分比。我认为弹性框可以很容易地使顶行成为特定高度,而底行可以轻松填充屏幕的其余部分,但仅此而已。
    【解决方案2】:

    要隐藏窗口滚动添加:

    body {
    overflow: hidden;
    }
    

    然后,让 div 可滚动:

    #main-column {
      overflow-y: scroll;
      position: static;
    }
    

    【讨论】:

    • 不错,我可以隐藏正文的滚动条,但是由于中心栏仍然增加了文档的高度,所以现在右栏中的东西被切断了:jsfiddle.net/deLkzhc1
    【解决方案3】:

    很难开始工作。从这个 SO 帖子:Scrolling a flexbox with overflowing content,需要添加一个元素,从内容中创建自己的高度。但我必须将full-page 高度设置为100vh(查看高度单位)并将content 的高度设置为任何值,然后它就可以工作了。见下文...

    CSS

    html, body {
      margin: 0px;
      padding: 0px;
    }
    
    full-page {
      display: flex;
      flex-flow: column;
      height: 100vh;
    }
    
    header {
      background-color: green;
    }
    
    content {
      flex: 1;
      display: flex;
      position: relative;
      height: 1px; // hackery
    }
    
    nav {
      background-color: red;
    }
    
    #right-column {
      background-color: blue;
    }
    
    #main-column {
      flex: 1;
      overflow-y: auto; // used 'auto' so it only appears if you need it
    }
    
    #main-column > div {
      min-height: min-content; // magic
    }
    

    HTML

    <html>
      <body>
      <full-page>  
        <header>top</header>
        <content>
          <nav>left</nav>
          <div id="main-column">
            <div>
              center<br>
              b<br>
              v<br>
              d<br>
              e<br>
              e<br>
              f<br>
              f<br>
              d<br>
              e<br>
              e<br>
              f<br>
              d<br>
              e<br>
              e<br>
              f<br>
              f<br>
              f<br>
            </div>
          </div>
          <div id="right-column">right</div>
        </content>
      </full-page>
      </body>
    </html>
    

    【讨论】:

    • 哇,谢谢。我觉得 flexbox 和 grid 应该非常简单,而且我很厚。那仍然可能是真的。再次感谢。 1px 使所有差异
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多