【问题标题】:CSS: content area has to take 100% heightCSS:内容区域必须占据 100% 的高度
【发布时间】:2011-10-15 10:32:56
【问题描述】:

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

页面如下:

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

【问题讨论】:

  • 我也遇到过同样的问题,但一直想不出解决办法。无论出于何种原因,CSS 中的height: 100%; 从来没有为我工作过。我现在对 JavaScript 的了解还不够,但也许您应该使用它来检测用户的屏幕分辨率并将高度设置为近似的像素数。如果您找到合适的解决方案,请告诉我。
  • 我想我找到了,看我的回答...

标签: html css layout height


【解决方案1】:

在容器上放置一个高度:100%?

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

【讨论】:

  • height: 100%; 由于某种原因在 CSS 中永远无法使用。事实上,height: (some number)%; 在 CSS 中永远不会起作用。
  • 这在 Safari 5.1 和 Firefox 中对我有用……也许它与 display: block; 有关
  • 浮动:左;对于放置静态的主容器和导航栏,(不要让一些内容动态环绕它们)不被认为是一种好的做法。尝试使用 position: absolute;在具有自动边距和位置的容器内:相对; .这样就可以了
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我想我找到了使用 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 解决方案,所以如果有人想出一个好主意,请分享 :)

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案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 是我的标题的高度)

        【讨论】:

        • 谢谢,我会再尝试一次纯 css 解决方案,但如果它不起作用我可以试试这个(当然使用 jquery)
        • 如果内容比窗口大怎么办??
        • 您好,您的建议启发了我采用 jquery 的方式,看来我找到了一种方法...
        • @Lud:你可以使用 document.body.parentNode.scrollHeight 来获取页面的高度,然后使用两者中的较大者(vs innerHeight)。
        • 因此人们更喜欢使用 JS 而不是使用具有 3 个单元格的单个表格。证明大多数网页设计师都很疯狂。
        【解决方案6】:

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

        【讨论】:

        • 是的,我试过这个,但我在左边有一个菜单,它必须是背景色(黑色),内容部分需要有灰色背景色;这与示例中的布局略有不同:-/ 我认为在此示例中,包含内容的 div 具有内容本身的大小,并且没有最小高度...
        • 是的,刚刚试了一下,没有成功让#mainmenuandcontent div 展开。
        猜你喜欢
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 2011-08-07
        相关资源
        最近更新 更多