如何使用CSS将div的高度调整为容器高度?

时间:2009-12-10 13:38:31

标签: css html css3

如何使用CSS将div的高度调整为容器高度?

<div class='container'><br>
  &nbsp;&nbsp;<div style='display: block; height: 500px'>left</div><br>
  &nbsp;&nbsp;<div id='to-be-sized' >right</div><br>
</div>

14 个答案:

答案 0 :(得分:8)

你可以:

  • 使用纯CSS的不完整但哲学上正确的路径,并面对浏览器之间的各种不兼容性

  • 写出3行脏的语义不正确和魔鬼制作的表,让它在任何地方都能正常工作

你的选择:)

答案 1 :(得分:7)

如果您碰巧使用jQuery,有一种方法可以做到这一点。当你问起CSS时,这可能不是你可以选择的选项,但是如果你可以使用它,那么它将完全符合你的需要。

$(divToResize).css('height',$(container).innerHeight());

$(divToResize)是您希望与其容器高度匹配的DIV的选择器,$(容器)在逻辑上是您想要获得其高度的容器。

无论是否在CSS中指定容器的高度,这都将起作用。

答案 2 :(得分:3)

如果我的理解是正确的并且没有指定高度的div的默认高度是auto,那么如果不在包含div上设置显式高度,则无法实现。如果在包含div上设置了显式高度,则所包含div上的height:100%将表示它增长到容器的高度。

答案 3 :(得分:2)

看起来你正试图获得相同的高度列。您可以使用fauxcolumns方法,其中使用背景图像伪造相同的高度。还有其他方法。

答案 4 :(得分:2)

您可以告诉容器div显示为表格,并让内部div显示为表格单元格。

HTML

<body>
<div id="wrap">
    <div id="header">
        <h1>
            My Header</h1>
    </div>
    <div id="main">
        <ul id="nav">
            <li><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">3</a></li>
            <li><a href="#">4</a></li>
        </ul>
        <div id="primaryContent">

        </div>
    </div>
    <div id="footer">
        <h1>
            My Footer</h1>
    </div>
</div>

CSS

#wrap
{
    width: 800px;
    margin: auto;
}

#header
{
    background: red;
}

#main
{
    display: table;
}

#nav
{
    background: gray;
    width: 150px;
    display: table-cell;
}

#primaryContent
{
    background: yellow;
    padding: 0 .5em;
    display: table-cell;
}

修复IE

    #wrap 
{
    width: 800px;
    margin: auto;
}

#header, #footer
{
    background: red;
}

#main 
{
    background: url(../bg.png) repeat-y;
}

#nav 
{
    background: gray;
    width: 150px;
    float: left;
}

#primaryContent 
{
    background: yellow;
    margin-left: 150px;
    padding: 0 .5em;
}

答案 5 :(得分:2)

我知道这在很久以前就得到了回答,但是当我遇到这个问题时,我会使用Flex Box。这很棒。请参阅Chris Coyier的A Complete Guide to Flexbox

.parent {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  width: 100%;
}
.child {
  flex-grow: 1;
}
.child1 {
  min-height: 200px;
  background-color: #fee;
}
.child2 {
  background-color:#eef;
}
<div class="parent">
  <div class="child child1">Child 1</div>
  <div class="child child2">Child 2</div>
</div>

  

Flexbox Layout(灵活盒子)模块旨在提供一种更有效的方式来布置,对齐和分配容器中的项目之间的空间,即使它们的大小未知和/或动态(因此“弯曲“)。

     

flex布局背后的主要思想是让容器能够改变其项目的宽度/高度(和顺序),以最好地填充可用空间(主要是为了适应所有类型的显示设备和屏幕尺寸)。 Flex容器扩展项目以填充可用空间,或缩小它们以防止溢出。

     

最重要的是,flexbox布局与方向无关,而不是常规布局(基于垂直的块和基于水平的内联块)。虽然这些页面适用于页面,但它们缺乏灵活性(没有双关语)来支持大型或复杂的应用程序(特别是在方向更改,调整大小,拉伸,缩小等方面)。

答案 6 :(得分:1)

这是一个棘手的事情 - 没有明确的最佳方法,但有一些常见的方法。 如果我们假设您真正需要的是右列的高度(或看起来)等于左列的高度,则可以使用常用于获得相等高度列的任何技术。 This piece包含一些技巧,可以获得正确的外观和行为。我建议阅读它以确定它是否能解决您的问题。

另一种方法使用Javascript来确定容器的高度,并将右侧列设置为该值。已经在SO here上讨论了这种技术。只要容器的大小不是决定外容器大小的唯一因素,那应该是一种有效的方法(如果不是这种情况,那么你会遇到鸡蛋问题,可能导致奇怪的行为)。

答案 7 :(得分:0)

示例代码,您需要从html元素开始,以便您可以使用容器中的灵活高度。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>100% Test</title>
 <style type="text/css">

   html, body, #inner { height: 100% }
   #inner { border: 4px blue solid } 
   #container { height: 200px; border: 4px red solid }

 </style>
</head>
<body>

    <div id="container">
        <div id="inner">
            lorem ipsum
        </div>
    </div>

</body>
</html>

答案 8 :(得分:0)

<!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">
.container{
    position:relative;
    background-color:#999;
}
#to-be-sized{
    position:absolute;
    top:0;
    height:100%;
    background-color:#ddd;
}
</style>
<body>

<div class='container'>
    <br>
    &nbsp;&nbsp;
    <div style='display: block; height: 500px'>left</div>
    <br>
    &nbsp;&nbsp;
    <div id='to-be-sized' >right</div><br>
</div>

</body>
</html>

答案 9 :(得分:0)

我做了类似于KyokoHunter的事情:

$('div.row').each(function(){
     var rowHeight = $(this).innerHeight();
     $(this).children('div.column').css('height',rowHeight);
});

这会遍历div“表格”中的每一行,并且只要div被相应分类,所以高度都匹配。

答案 10 :(得分:0)

CSS文件使用'padding'函数来确定容器的高度和深度。要更改容器字段的高度,请简单插入以调整指定容器的填充字段。

以下代码摘录是用于容器类的CSS的示例(您可以在html文件中找到它。

.container{padding-top:100px;padding-bottom:50px}header

答案 11 :(得分:0)

我使用overflow:hidden可以正常工作。

.bu {
    overflow: hidden;
    background-color:blue;
}
<div class="bu">
    <button>english</button>
</div>

答案 12 :(得分:0)

尝试将其添加到要调整大小的div

.layout-fill {
    margin: 0;
    width: 100%;
    min-height: 100%;
    height: 100%;
}

答案 13 :(得分:-3)

您是否可以将包含元素的高度设置为height:100%;