【问题标题】:How can I make DIV 100% height of browser without vertical scrolling of header如何在不垂直滚动标题的情况下使浏览器的 DIV 100% 高度
【发布时间】:2014-08-19 02:37:30
【问题描述】:

左右面板的高度均为 100%,但由于 Header div 占用 X 空间,因此我想摆脱窗口中的一些垂直滚动.

如何移除垂直滚动?

JSFiddle:http://jsfiddle.net/G7unG/1/

CSS 和 HTML

html, body{
  height: 100%;
  margin: 0;
}
.header{
  background: #333;
  padding: 15px;
  text-align:center;
  font-size: 18px;
  font-family: sans-serif;
  color: #FFF;
}
.leftpanel, .rightpanel{
  height: 100%;
}
.leftpanel{
  float: left;
  width: 70%;
  background: #CCC;
}
.rightpanel{
  float: left;
  width: 30%;
  background: #666;
}
<div class="header">Header</div>
<div class="leftpanel">Left Panel</div>
<div class="rightpanel">Right Panel</div>
<div class="clearfix"></div>

【问题讨论】:

    标签: html css height


    【解决方案1】:

    使用视口。浏览器现在支持将高度指定为页面高度的百分比。如果标题占用空间,请将 100 降低到 80。

    div {
        height:100vh;
    }
    

    【讨论】:

      【解决方案2】:

      这是一个使用 flexbox 的现代解决方案。无论标题的高度如何,其余元素都会垂直拉伸以填充剩余空间。这是小提琴:http://jsfiddle.net/mggLY/1/

      HTML:

      <div id = "wrapper">
          <div class="header">Header</div>
          <div>
              <div class="leftpanel">Left Panel</div>
              <div class="rightpanel">Right Panel</div>
          </div>
      </div>
      

      CSS:

      * {
          margin: 0;
          padding: 0;
          border: 0;
      }
      
      html, body {
          height: 100%;
      }
      
      .header{
          background: #333;
          padding: 15px;
          text-align:center;
          font-size: 18px;
          font-family: sans-serif;
          color: #fff;
      }
      
      .leftpanel{
          background: #CCC;
      }
      
      .rightpanel{
          background: #666;
      }
      
      #wrapper {
          height: 100%;
          display: -webkit-flex;
          display: flex;
          -webkit-flex-direction: column;
          flex-direction: column;
          outline: 1px solid red;
      }
      
      #wrapper > .header {
          -webkit-flex: 0 0 auto;
          flex: 0 0 auto;
      }
      
      #wrapper > .header + div {
          -webkit-flex: 1 1 auto;
          flex: 1 1 auto;
          display: -webkit-flex;
          display: flex;
          -webkit-flex-direction: row;
          flex-direction: row;
      }
      
      #wrapper > .header + div > div:first-of-type {
          -webkit-flex: 7 0 0;
          flex: 7 0 0;
      }
      
      #wrapper > .header + div > div:last-of-type {
          -webkit-flex: 3 0 0;
          flex: 3 0 0;
      }
      

      【讨论】:

      • 感谢您的解决方案!
      • .leftPanel, .rightPanel 添加某种溢出规则,例如overflow: auto;,以防止内容溢出框架,并导致正文显示滚动条。
      【解决方案3】:

      您可以使用overflow: hidden; 来保护body 可滚动。

      根据您的评论:http://jsfiddle.net/G7unG/9/

      【讨论】:

      【解决方案4】:

      您可以使用“faux columns”类型的结构——将列的背景颜色作为“固定”元素(它们不会随页面滚动)添加到实际列后面。

      <div id="left_faux"></div>
      <div id="right_faux"></div>
      
      div#left_faux {
          position: fixed;
          top:0;
          left:0;
          right:30%;
          bottom:0;
          background-color:#CCC;
      }
      div#right_faux {
          position: fixed;
          top:0;
          left:70%;
          right:0;
          bottom:0;
          background-color:#666; 
      }
      
      .leftpanel{
          float: left;
          width: 70%;
      }
      .rightpanel{
          float: left;
          width: 30%;
      }
      

      出于演示目的,这个快速示例可能过于冗长。我相信你可以精简 CSS,所以没有那么多多余的定义。

      WORKING EXAMPLE

      【讨论】:

        【解决方案5】:

        像这样:http://jsfiddle.net/G7unG/3/

        html, body{
            height: 100%;
            margin: 0;
            overflow:hidden;
        }
        

        【讨论】:

        • 溢出隐藏会导致我的网站其他需要垂直滚动的部分无法滚动。
        • 没有提到你不想要这种行为,但我相信你找到了合适的答案。 :)
        【解决方案6】:

        如果您想始终保持 100% 的高度,您可以使用绝对定位。然后根据需要在左侧面板或右侧面板中使用滚动条。

        示例:http://jsfiddle.net/G7unG/2/

        html, body{
            height: 100%;
            margin: 0;
        }
        .header{
            background: #333;
            padding: 15px;
            text-align:center;
            font-size: 18px;
            font-family: sans-serif;
            color: #FFF;
            height: 22px;
        }
        .leftpanel, .rightpanel{
            top: 52px;
            bottom: 0;
            position: absolute;
        }
        .leftpanel{
            width: 70%;
            left: 0;
            background: #CCC;
        }
        .rightpanel{
            width: 30%;
            right: 0;
            background: #666;
        }
        

        解决方案 2 - 使用固定的高度百分比:http://jsfiddle.net/G7unG/4/

        html, body{
            height: 100%;
            margin: 0;
        }
        .header{
            background: #333;
            padding: 15px;
            text-align:center;
            font-size: 18px;
            font-family: sans-serif;
            color: #FFF;
            height: 30%;
            box-sizing: border-box;
        }
        .leftpanel, .rightpanel{
            height: 70%;
            float: left;
        }
        .leftpanel{
            width: 70%;
            left: 0;
            background: #CCC;
        }
        .rightpanel{
            width: 30%;
            float: right;
            background: #666;
        }
        

        【讨论】:

        • 解决方案 1:绝对定位可以工作,但由于不同的页面具有不同的页眉高度,因此无法知道顶部并且无法修复顶部。解决方案2:标题根据内容在不同页面上改变高度,所以我认为固定的标题高度不起作用。
        • 解决方案 2 正是我所需要的,+1
        • 只是让您知道,现在有更简单的方法或更好的解决方案。要使用 Flex,请参阅此帖子:stackoverflow.com/questions/25098042/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 2016-04-28
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多