CSS:内容区域必须占据100%的高度

时间:2011-07-28 19:50:23

标签: html css layout height

这让我发疯了......我正在http://one29090testvdscom.accounts.combell.net/nl建立页面。这是一个页面,包含标题,左侧菜单,内容和页脚。宽度固定为960px,水平居中。这一切都有效。但是,如果内容中的文本很少,我希望灰色内容区域始终采用可用的屏幕高度,以便页脚在页面下方。

页面如下:

  <body>

    <!-- Centered container that contains site -->
    <div id="centeredcontainer">            
        <!-- Area with header -->
        <div id="header">                
            header here                              
        </div>            
        <!-- Area that contains main menu on the left and content on the right -->
        <div id="mainmenuandcontent">
            <!-- Main menu on the left -->
            <div id="mainmenu">
                main menu here                   
            </div>
            <!-- Content on the right -->   
            <div id="content">
                 body here
            </div>                
            <!-- Clears the floats so that next elements can use margins normally -->
            <div class="clearer"></div>
            <!-- Red line under content -->
            <div id="RedLineUnderContent"></div>
        </div>                         
        <!-- Area with languages -->
        <div id="languages">
          footer here           
        </div>                       
    </div>            
</body>

相关的CSS是:

body
{
    font-size: 12px;
    font-family:Century Gothic,Helvetica,Verdana,Arial,sans-serif; 
    line-height:1.5em;      
    margin: 0; 
    padding: 0;   
    background-color: Black;
}

#centeredcontainer  
{
    width: 960px;    
    margin-left: auto ;
    margin-right: auto ;
}

#header
{
    margin-bottom: 20px; 
    margin-top:20px;  
}

#mainmenuandcontent
{  
    width: 960px;
    clear: both;       
    position: relative;    
}

#mainmenu
{        
    float: left;   
    width:180px; 
    padding:10px;
}

#content
{
    float: left;
    background-color: #403F3F;        
    width: 760px; 
    min-height: 400px;
    color:White;
}

#RedLineUnderContent
{
    height: 20px;
    background: #A10C10;
    margin-left: 200px; 
}

#languages
{        
    margin-top: 10px;   
    margin-left: 200px; 
    margin-bottom:20px;  
    text-transform:uppercase;  
}

.clearer
{
    clear:both;
}

6 个答案:

答案 0 :(得分:5)

也许您可以使用类似于this page, which achieves a 100% height layout的CSS?

答案 1 :(得分:5)

我知道没有跨浏览器方式在CSS中单独执行此操作。

我刚刚使用JS做了类似于昨晚的事情:

<head>
   ....
    <script type="text/javascript">
        function resize() {
            var frame = document.getElementById("main");
            var windowheight = window.innerHeight;
            document.body.style.height = windowheight + "px";
            frame.style.height = windowheight - 180 + "px";
        }
     </script> 
</head>
<body onload="resize()" onresize="resize()">
...

这将调整id为“main”的元素的大小,使其成为窗口的可见高度减去180px(180is是我标题的高度)

答案 2 :(得分:2)

我想我找到了一个使用jquery的解决方法。我将以下脚本添加到母版页:

    <script type="text/javascript">
        var contentHeight;
        $(document).ready(function () {
            contentHeight = $('#content').height();
            Resize();
            $(window).resize(function () {
                Resize();
            });
        });                    
        function Resize() {
            currentWindowHeight = $(document).height();                                
            if (contentHeight < currentWindowHeight - 160) {
                $('#content').css('height', (currentWindowHeight - 160) + "px");   
            }                               
        }
    </script>

因此,在每次加载页面后,它会获得内容区域原始高度的高度。然后根据窗口高度调整大小,这样当内容高度小于窗口高度时,它会调整大小以获取窗口高度(减去页眉和页脚高度)。如果然后调整浏览器窗口的大小,它会完全相同(使用原始内容高度,而不是当前内容!)。

当然,我更喜欢CSS解决方案,所以如果有人想出一个好主意,请分享:)

答案 3 :(得分:1)

您不需要JavaScript。请参阅my answer for a related question, "Set div to remaining height using CSS with unknown height divs above and below"。内容将扩展以填充可用区域。

答案 4 :(得分:0)

您可以将容器的最小高度设置为100%,但您还必须将父容器设置为最小高度100%,否则它将无法工作。 对于不太现代的浏览器,有时需要将主体甚至html标签设置为高度100%(而不是最小高度!)。

答案 5 :(得分:-1)

将高度:100%放在容器上?

2016年更新:使用视口相对单位而不是百分比或像素,例如width: 100wv; height: 100wh;。单位代表浏览器窗口大小的百分比,因此忽略任何父元素大小。