使div的高度随其内容扩展

我有这些嵌套的div,我需要主容器扩展(高度)以容纳内部的DIV

    <!-- head -->
    ...
    <!-- /head -->

    <body class="main">
      <div id="container">
        <div id="header">
          <!--series of divs in here, graphic banner etc. -->
        </div>

    <div id="main_content"> <!-- this DIV _should_ stretch to accommodate inner divs -->
      <div id="items_list" class="items_list ui-sortable">
        <div id="item_35" class="item_details">
        </div>
        <div id="item_36" class="item_details">
        </div>        
        <div id="item_37" class="item_details">
        </div>
        <!-- this list of DIVs "item_xx" goes on for a while
             each one representing a photo with name, caption etcetc -->
      </div>
    </div>
    <br class="clear"/>

    <div id="footer">
    </div>
  </body>
</html>

CSS是这样的:

* {
    padding: 0;
    margin: 0;
}

.main {
    font: 100% Verdana, Arial, Helvetica, sans-serif;
    background: #4c5462;
    margin: 0; 
    padding: 0;
    text-align: center; 
    color: #000000;
}
.main #container {
    height: auto;
    width: 46em;
    background: #4c5462;
    margin: 0 auto; 
    border: 0px solid #000000;
    text-align: left;       
}

.main #main_content {
    padding: 5px;
    margin: 0px;
}
#items_list {
    width: 400px;
    float: left;
}

.items_list {
    width: 400px;
    float: left;
}
.item_details {
    margin-top: 3px;
    margin-bottom: 3px;
    padding: 3px;
    float: left;
    border-bottom: 0.5px solid blue;
}

我的问题是#main_content不能拉伸以容纳所有内部div,结果它们一直在背景下运行。

考虑以上情况,如何解决此问题?

LEYTony2020/03/20 13:14:56

无需使用大量CSS,只需使用引导程序,然后使用:

class="container"

用于需要填充的div。

您可以从这里获得引导

Jim前端Near2020/03/20 13:14:56

在div上添加了display:inline,当高度内容大于设置的div高度200px时,它会自动增长(而不是滚动的东西)

DavaidTony宝儿2020/03/20 13:14:56

您可以使用CSS Grid Layout目前支持范围非常广泛:请在caniuse上进行检查

这里是例子上的jsfiddle。还有大量文本内容的示例

HTML代码:

<div class="container">
  <div class="header">
   Header
  </div>
  <div class="content">
   Content
  </div>
  <div class="footer">
   Footer
  </div>
</div>

CSS代码:

html, body {
  width: 100%;
  height: 100%;
  margin: 0;
}

.container {
  width: 100%;
  height: 100%;

  display: grid;
  grid-template-rows: 100px auto 150px;
  grid-template-columns: auto;
}
// style stuff
西里Near2020/03/20 13:14:56

我知道这是一种旧线程,但是,可以通过min-heightCSS属性以一种干净的方式实现这一点,因此,这里我将其留作以后参考:

我根据此处的OP发布代码创建了一个小提琴:http : //jsfiddle.net/U5x4T/1/,当您在其中删除并添加div时,您会注意到容器如何扩大或减小大小

除了OP代码外,您仅需完成以下两项操作即可:

*主容器中的溢出(浮动div必需)

* min-height css属性,可在此处获取更多信息:http : //www.w3schools.com/cssref/pr_dim_min-height.asp

Tom西门2020/03/20 13:14:56

如果您使用的是jQuery UI,则它们已经有一个类,该类的作用只是一个魅力 而已<div>,在您要扩展的div的底部height:auto;添加一个a 然后添加一个类名ui-helper-clearfix或使用此style属性并按如下所示添加:

<div style=" clear:both; overflow:hidden; height:1%; "></div>

将jQuery UI类添加到clear div,而不是要扩展的div。

MandyTony2020/03/20 13:14:56

我尝试了这个并且有效

<div style=" position: absolute; direction: ltr;height:auto; min-height:100%">   </div>
神奇Near2020/03/20 13:14:56

我自己在一个项目中遇到了这个问题-我的div内有一张桌子从div的底部溢出。我尝试的所有高程修复方法均无济于事,但我发现了一个怪异的修复方法,那就是在div的底部放置一个段落,其中只包含一个句点。然后将文本的“颜色”设置为与容器的背景相同。工作整洁,您可以随意使用,不需要javascript。不间断的空间将不起作用-透明的图像也不起作用。

显然,只需要查看表格下方有一些内容即可进行拉伸以包含表格。我想知道这是否对其他任何人都有效。

这种事情使设计师不得不诉诸于基于表格的布局-我花了很多时间弄清楚这些东西并使之与浏览器兼容,这使我发疯。

小胖Gil2020/03/20 13:14:56

您是否尝试过传统方式?给出主容器高度:自动

#container{height:auto}

我已经使用了它,并且在大多数情况下都可以使用。

逆天Davaid2020/03/20 13:14:55

在CSS中: #clear_div{clear:both;}

在内部div的div标签之后,添加以下新的div

<div id="clear_div"></div>

http://www.w3schools.com/cssref/pr_class_clear.asp:更多信息

Mandy村村2020/03/20 13:14:55

我将Bootstrap添加到section具有设置为屏幕高度100%的标签的项目中在我使项目响应之前,它一直很好用,这时我借用了jennyfofenny的答案的一部分,因此当屏幕尺寸在较小的屏幕上更改时,我的部分背景与内容的背景匹配。

我的新sectionCSS如下所示:

section {
    // min-height so it looks good on big screen
    // but resizes on a small-screen
    min-height: 100%;
    min-height: 100vh;
    width:100%;
    width:100vh;
}

假设您有一个特定颜色的部分。通过使用min-height,如果部分的宽度由于屏幕较小而缩小,则该部分的高度将扩大,内容将保留在该部分内,并且背景将保持所需的颜色。

斯丁前端2020/03/20 13:14:55

看起来像这个作品

html {
 width:100%;
 height:auto;
 min-height:100%
} 

它以屏幕尺寸为最小值,并且如果内容扩展,它就会增长。

前端Green2020/03/20 13:14:55

浮动元素不会占据父元素内部的空间,顾名思义,它们是浮动的!因此,如果未明确为其浮动子元素的元素提供高度,则父元素将缩小并且看起来不接受子元素的尺寸,即使给定overflow:hidden;子元素的元素也可能未出现在屏幕上。有多种方法可以解决此问题:

  1. 在具有clear:both;属性的浮动元素下方插入另一个元素,或在浮动元素clear:both;使用on :after

  2. 使用display:inline-block;flex-box代替float

DavaidAPro2020/03/20 13:14:55

#main_contentdiv中添加一个float属性-然后它将展开以包含其浮动内容

老丝阿飞2020/03/20 13:14:55

在执行任何操作之前,请使用以下命令检查CSS规则:

{ position:absolute }

删除(如果存在)并且不需要它们。

神奇Harry2020/03/20 13:14:55

当父Div的Child元素浮动时,会出现此问题。这是该问题最新解决方案

在您的CSS文件中,编写以下名为.clearfix的以及伪选择器:after

.clearfix:after {
    content: "";
    display: table;
    clear: both;
}

然后,在您的HTML中,将.clearfix添加到父Div。例如:

<div class="clearfix">
    <div></div>
    <div></div>
</div>

它应该一直工作。你可以调用类的名称。集团而不是.clearfix,因为它使代码更语义。请注意,不必在双引号“”之间的Content值中添加点或什至空格另外,溢出:自动;也许可以解决问题,但是会引起其他问题,例如显示滚动条,因此不建议这样做。

来源:Lisa Catalano和Chris Coyier博客

宝儿理查德2020/03/20 13:14:55

很简单的方法

在父级DIV上:

height: 100%;

每次都对我有用

樱Harry2020/03/20 13:14:55

使用跨度标签和display:inline-block附加的CSS。然后,您可以使用CSS和操纵它就像在很多方面一个div,但如果你不包括widthheight它基于它的内容扩展和伸缩。

希望能有所帮助。

Mandy村村2020/03/20 13:14:55

通常,我认为可以通过clear:both对的最后一个子元素施加规则来解决此问题#items_list

您可以使用:

#items_list:last-child {clear: both;}

或者,如果您使用的是动态语言,则在循环创建列表本身的最后一个循环中生成的最后一个元素中添加一个附加类,以便最终在html中添加以下内容:

<div id="list_item_20" class="last_list_item">

和CSS

.last_list_item {clear: both; }
逆天LEY逆天2020/03/20 13:14:55

我只会用

height: auto;

在您的div中 是的,我知道我来晚了一点,但我认为这可能会对某人有所帮助,就像它在这里对我有帮助。

卡卡西路易前端2020/03/20 13:14:55

以下应该工作:

.main #main_content {
    padding: 5px;
    margin: 0px;
    overflow: auto;
    width: 100%; //for some explorer browsers to trigger hasLayout
}
小哥Green小哥2020/03/20 13:14:55

添加以下内容:

overflow:hidden;
height:1%;

到您的主要部门 消除了对额外内容的需求<br />

乐米亚2020/03/20 13:14:55

作为一种替代方法,您也可以尝试在某些情况下可能有用的方法

display:table;

jsFiddle

Near小哥Green2020/03/20 13:14:54

尝试这个: overflow: auto;

它解决了我的问题。

逆天LLEY2020/03/20 13:14:54

您需要clear:both#main_contentdiv关闭之前强制输入a 我可能会将其<br class="clear" />;移入#main_contentdiv并将CSS设置为:

.clear { clear: both; }

更新:这个问题仍然有相当多的流量,因此我想使用CSS3中称为“弹性框”或“弹性框”新布局模式,以现代替代方法来更新答案

body {
  margin: 0;
}

.flex-container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

header {
  background-color: #3F51B5;
  color: #fff;
}

section.content {
  flex: 1;
}

footer {
  background-color: #FFC107;
  color: #333;
}
<div class="flex-container">
  <header>
    <h1>
     Header   
    </h1>
  </header>

  <section class="content">
    Content
  </section>

  <footer>
    <h4>
      Footer
    </h4>
  </footer>
</div>

当前,大多数现代浏览器都支持Flexbox视口单元,但是如果您必须保持对旧版浏览器的支持,请确保检查特定浏览器版本的兼容性。