【问题标题】:CSS How to set div height 100% minus nPx [duplicate]CSS如何设置div高度100%减去nPx [重复]
【发布时间】:2010-11-14 15:13:21
【问题描述】:

我有一个包装 div,它包含 2 个彼此相邻的 div。在这个容器上方,我有一个包含我的标题的 div。包装器 div 必须是 100% 减去标题的高度。标题约为 60 像素。这是固定的。所以我的问题是:如何将包装器 div 的高度设置为 100% 减去 60 像素?

<div id="header"></div>
<div id="wrapper">
  <div id="left"></div>
  <div id="right"></div>
</div>

【问题讨论】:

    标签: css height


    【解决方案1】:

    在 CSS3 中你可以使用

    height: calc(100% - 60px);
    

    【讨论】:

    • 确保“-”号前后有空格。 Firefox 需要在“-”号前有空格。
    【解决方案2】:

    这是一个可以工作的 css,在 Firefox / IE7 / Safari / Chrome / Opera 下测试。

    * {margin:0px;padding:0px;overflow:hidden}
    div {position:absolute}
    div#header {top:0px;left:0px;right:0px;height:60px}
    div#wrapper {top:60px;left:0px;right:0px;bottom:0px;}
    div#left {top:0px;bottom:0px;left:0px;width:50%;overflow-y:auto}
    div#right {top:0px;bottom:0px;right:0px;width:50%;overflow-y:auto}
    

    "overflow-y" 不是 w3c 认可的,但每个主流浏览器都支持它。如果内容太高,您的两个 div #left 和 #right 将显示一个垂直滚动条。

    要在 IE7 下工作,您必须通过添加 DOCTYPE 来触发标准兼容模式:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title></title>
    <style type="text/css">
    	*{margin:0px;padding:0px;overflow:hidden}
    	div{position:absolute}
    	div#header{top:0px;left:0px;right:0px;height:60px}
    	div#wrapper{top:60px;left:0px;right:0px;bottom:0px;}
    	div#left{top:0px;bottom:0px;left:0px;width:50%;overflow-y:auto}
    	div#right{top:0px;bottom:0px;right:0px;width:50%;overflow-y:auto}
    </style>
    </head>
    <body>
    <div id="header"></div>
    <div id="wrapper">
      <div id="left"><div style="height:1000px">high content</div></div>
      <div id="right"></div>
    </div>
    </body>

    【讨论】:

    • 它在 FF 中工作,但我不知道它在 IE7 下工作。我只看到'标题'代码:
      Left
    • 您是否触发了标准兼容模式?我将在回复中添加一个示例页面。
    • 另外,如果您需要将这些 div 放置在页面中间或其他任何位置,只需将它们包装在容器 div 中并在容器上设置position: relative。然后将容器放置在页面上您喜欢的任何位置。
    • 如果我想要 2 个高度分别为 40% 和 60% 的 div,那么在 #left 内的内部 div 呢?
    • 对于 0 值参数指定 px 是否有特定原因?
    【解决方案3】:

    如果需要支持 IE6,请使用 JavaScript 管理包装器 div 的大小(在读取窗口大小后以像素为单位设置元素的位置)。如果您不想使用 JavaScript,则无法执行此操作。有一些变通方法,但预计需要一两个星期才能使其适用于每种情况和每种浏览器。

    对于其他现代浏览器,使用这个 css:

    position: absolute;
    top: 60px;
    bottom: 0px;
    

    【讨论】:

    • 该站点仅兼容 IE 7。当我使用 height: 100% 和 top: 60px 时;我仍然使用滚动条。我可以向下滚动 60 像素。
    • 不指定高度,使用top和bottom,让浏览器计算高度。
    • 但我希望我的页面的最大高度为 100% 减去 60px;如果内容大于那个,我想通过使用溢出来在 div 中添加滚动条:scroll;
    • 对于滚动条,在 wrapper 中添加一个 div 来完全填充它并使其溢出:scroll;
    • 请注意,由于 IE7 中的错误,这可能仍然会失败。如果你不能让它工作,请使用 JavaScript。我知道,你不喜欢它,但要权衡一周与奇怪错误作斗争的工作。
    【解决方案4】:

    太棒了...现在我已经停止使用 % he he he... 除了如下所示的主容器:

    <div id="divContainer">
        <div id="divHeader">
        </div>
        <div id="divContentArea">
            <div id="divContentLeft">
            </div>
            <div id="divContentRight">
            </div>
        </div>
        <div id="divFooter">
        </div>
    </div>
    

    这里是css:

    #divContainer {
        width: 100%;
        height: 100%;
    }
    #divHeader {
        position: absolute;
        left: 0px;
        top: 0px;
        right: 0px;
        height: 28px;
    }
    #divContentArea {
        position: absolute;
        left: 0px;
        top: 30px;
        right: 0px;
        bottom: 30px;
    }
    #divContentLeft {
        position: absolute;
        top: 0px;
        left: 0px;
        width: 250px;
        bottom: 0px;
    }
    #divContentRight {
        position: absolute;
        top: 0px;
        left: 254px;
        right: 0px;
        bottom: 0px;
    }
    #divFooter {
        position: absolute;
        height: 28px;
        left: 0px;
        bottom: 0px;
        right: 0px;
    }
    

    我在所有已知的浏览器中对此进行了测试,并且工作正常。使用这种方式有什么缺点吗?

    【讨论】:

      【解决方案5】:
      div {
          height: 100%;
          height: -webkit-calc(100% - 60px);
          height: -moz-calc(100% - 60px);
          height: calc(100% - 60px);
      }
      

      确保少用时

      height: ~calc(100% - 60px);
      

      否则less是无法正确编译的

      【讨论】:

        【解决方案6】:

        你可以做类似 height: calc(100% - nPx); 例如 height: calc(100% - 70px);

        【讨论】:

          【解决方案7】:

          这并不能完全回答所提出的问题,但它确实会产生您想要实现的相同视觉效果。

          <style>
          
          body {
            border:0;
            padding:0;
            margin:0;
            padding-top:60px;
          }
          
          #header {
            position:absolute;
            top:0;
            height:60px;
            width:100%;
          }
          
          #wrapper {
            height:100%;
            width:100%;
          }
          </style>
          

          【讨论】:

            【解决方案8】:

            在此示例中,您可以识别不同的区域:

            <html>
            <style>
            #divContainer {
                width: 100%;
                height: 100%;
            }
            #divHeader {
                position: absolute;
                left: 0px;
                top: 0px;
                right: 0px;
                height: 28px;
                background-color:blue;
            }
            #divContentArea {
                position: absolute;
                left: 0px;
                top: 30px;
                right: 0px;
                bottom: 30px;
            }
            #divContentLeft {
                position: absolute;
                top: 0px;
                left: 0px;
                width: 200px;
                bottom: 0px;
                background-color:red;
            }
            #divContentCenter {
                position: absolute;
                top: 0px;
                left: 200px;
                bottom: 0px;
                right:200px;
                background-color:yellow;
            }
            #divContentRight {
                position: absolute;
                top: 0px;
                right: 0px;
                bottom: 0px;
                width:200px;
                background-color:red;
            }
            #divFooter {
                position: absolute;
                height: 28px;
                left: 0px;
                bottom: 0px;
                right: 0px;
                background-color:blue;
            }
            </style>
            <body >
            
            <div id="divContainer">
                <div id="divHeader"> top
                </div>
                <div id="divContentArea">
                    <div id="divContentLeft">left
                    </div>
                    <div id="divContentCenter">center
                    </div>
                    <div id="divContentRight">right
                    </div>
                </div>
                <div id="divFooter">bottom
                </div>
            </div>
            
            </body>
            </html>
            

            【讨论】:

              【解决方案9】:

              我还没有看到这样的帖子,但我想我会把它放在那里。

              <div class="main">
              <header>Header</header>
              <div class="content">Content</div>
              

              然后是 CSS:

              body, html {
                  height: 100%;
                  margin: 0;
                  padding: 0;
              }
              
              .main {
                  height: 100%;
                  padding-top: 50px;
                  box-sizing: border-box;
              }
              
              header {
                  height: 50px;
                  margin-top: -50px;
                  width: 100%;
                  background-color: #5078a5;
              }
              
              .content {
                  height: 100%;
                  background-color: #999999;
              }
              

              这是一个有效的jsfiddle

              注意:我不知道浏览器的兼容性是什么。我只是在玩其他解决方案,这似乎效果很好。

              【讨论】:

                【解决方案10】:

                使用设置为 100% 的外包装 div,然后您的内包装 div 100% 现在应该与此相关。

                我确信这对我有用,但显然不是:

                <html>
                <body>
                <div id="outerwrapper" style="border : 1px solid red ; height : 100%">
                <div id="header" style="border : 1px solid blue ; height : 60px"></div>
                <div id="wrapper"  style="border : 1px solid green ; height : 100% ; overflow : scroll ;">
                  <div id="left" style="height : 100% ; width : 50% ; overflow : scroll; float : left ; clear : left ;">Some text 
                
                on the left</div>
                  <div id="right" style="height : 100% ; width 50% ; overflow : scroll; float : left ;">Some Text on the 
                
                right</div>
                </div>
                </div>
                </body>
                </html>
                

                【讨论】:

                • 可以举个例子。我不明白
                • 我发布了我的想法,但我无法让它这么早/这么晚工作。也许如果我再睡一点。
                【解决方案11】:

                如果您不想使用绝对定位和所有爵士乐,这里有一个我喜欢使用的修复:

                你的html:

                <body>    
                   <div id="header"></div>
                   <div id="wrapper"></div>
                </body>
                

                你的 CSS:

                body {
                     height:100%;
                     padding-top:60px;
                }
                #header {
                     margin-top:60px;
                     height:60px;
                }
                #wrapper {
                     height:100%;
                }
                

                【讨论】:

                • 我不认为这按预期工作。首先#header 应该是margin-top:-60px;。其次,height:100% 表示高度将是父元素高度的 100%,不包括边距、内边距和边框。根据您的滚动设置,这将导致出现滚动条或裁剪您的内容。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-01-19
                • 1970-01-01
                • 2012-04-29
                • 2010-11-24
                相关资源
                最近更新 更多