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

11
使用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>

你能不能不将包含元素的高度设置为 height:100%? - AJM
13个回答

8

您可以选择:

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

或者

  • 编写 3 行脏的、语义不正确的表格,它可以在任何地方完美工作

您自己决定 :)


1
多年来,很多人一直讨厌表格,但多年来,表格一直是解决许多问题的唯一可靠方案。CSS标准从一开始就存在问题。这样一个简单的问题本应易如反掌,但事实并非如此。 - GetFree
1
90年代的时候,表格随处可见 :D 然后现代网页开发说它们不好。现在,哦!多么新奇的功能,表格!!! - FilippoG
1
请参考以下链接 https://stackoverflow.com/users/967727/cfrydlewicz 的回答;使用CSS的min-height: nn; flex-grow: 1;是完全可行的。 - JESii

6

如果您正在使用jQuery,有一种方法可以实现这一点。由于您要求使用CSS,这可能不是您可用的选项,但如果您能够利用它,它将完全符合您的要求。

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

$(divToResize) 是您想要匹配其容器高度的 DIV 的选择器,$(container) 则是您想要获取其高度的容器。

无论容器的高度是否在 CSS 中指定,此方法都适用。


5

我知道这个问题很久以前就有答案了,但是现在我遇到这个问题时,我使用Flex Box。它非常棒。请参考Chris Coyier的完整指南

.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”一词)。

弹性布局的主要思想是赋予容器改变其项目的宽度/高度(和顺序)以最佳填充可用空间的能力(主要是为了适应各种显示设备和屏幕尺寸)。弹性容器扩展项目以填充可用的自由空间,或缩小它们以防止溢出。

最重要的是,与常规布局(垂直基础的块级布局和水平基础的行内布局)相比,弹性盒子布局不受方向限制。虽然这些布局对于页面很有效,但它们缺乏灵活性(没有双关语意味),无法支持大型或复杂的应用程序(特别是在方向更改、调整大小、拉伸、收缩等方面)。


2
最好发布实际的代码并引用链接 - 这样,如果网站崩溃,代码仍将可用。 - Wex
这是我个人认为的实际解决方案。 - BugsArePeopleToo

3

如果我的理解是正确的,没有指定高度的div的默认高度是自动的,那么在不设置包含div的显式高度的情况下,这是不可能实现的。如果在包含div上设置了显式高度,则包含的div上的height:100%将意味着它会增长到容器的高度。


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

2
看起来你正在尝试获得等高列。你可以使用虚假列方法,在其中使用背景图片来模拟等高列。还有其他的方法可供选择。

我必须证明这是目前最简单的方法,并且具有最好的浏览器支持。 - invot

1

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

另一种方法使用Javascript来确定容器的高度,并将右侧列设置为该高度。 该技术已在SO 此处 上讨论过。 只要您的容器大小不是确定外部容器大小的唯一因素,那应该是一个有效的方法(如果不是这种情况,则会出现鸡蛋问题,可能会导致奇怪的行为)。


http://www.alistapart.com/articles/fauxcolumns/ <= 这是原始文章,描述了您链接到的Faux Columns技术 - 这正是顶部帖子所要求的 ;) - Arve Systad

0
CSS文件使用“padding”函数来确定容器的高度和深度。要更改容器字段的高度,只需插入或调整指定容器的填充字段即可。
下面的代码摘录是一个容器类所使用的CSS示例(您可以在HTML文件中找到它作为)。
.container{padding-top:100px;padding-bottom:50px}header

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>

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接