首页 文章

CSS如何设置div高度100%减去nPx

提问于
浏览
178

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

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

11 回答

  • 230

    这是一个工作的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>
    
  • -1

    在CSS3中你可以使用

    height: calc(100% - 60px);
    
  • 0

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

    对于其他现代浏览器,请使用此css:

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

    伟大的...现在我已经停止使用他了他...他除了主容器,如下所示:

    <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;
    }
    

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

  • 3

    你可以做一些像height:calc(100% - nPx);例如height:calc(100% - 70px);

  • 0
    div {
        height: 100%;
        height: -webkit-calc(100% - 60px);
        height: -moz-calc(100% - 60px);
        height: calc(100% - 60px);
    }
    

    确保使用更少

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

    否则少就不能正确编译它

  • 46

    这并没有完全回答所提出的问题,但它确实创造了你想要达到的相同视觉效果 .

    <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>
    
  • -1

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

    <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>
    
  • 6

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

    <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

    注意:我不知道浏览器的兼容性是什么 . 我正在玩替代解决方案,这看起来效果很好 .

  • 0

    使用外包装div设置为100%然后你的内包装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>
    
  • 1

    如果您不想使用绝对定位和所有爵士乐,这是我想要使用的修复:

    你的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%;
    }
    

相关问题