使div的高度随其内容而扩大

pat*_*ick 360 css height

我有这些嵌套的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 accomodate 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>
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

#main_content遇到的问题是不能伸展以容纳所有内部div,结果是它们不断背景.

我怎么解决这个问题?

jen*_*nny 268

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

.clear { clear: both; }
Run Code Online (Sandbox Code Playgroud)

更新:此问题仍然获得了相当多的流量,因此我想使用CSS3中名为Flexible box或Flexbox新布局模式,使用现代替代方案更新答案:

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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="flex-container">
  <header>
    <h1>
     Header   
    </h1>
  </header>

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

  <footer>
    <h4>
      Footer
    </h4>
  </footer>
</div>
Run Code Online (Sandbox Code Playgroud)

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

  • [这里](http://www.w3schools.com/cssref/pr_class_clear.asp)关于CSS clear属性的w3schools文章.基本上,clear表示应用clear的元素从其流中的浮点开始(仅左侧,仅右侧或两者). (3认同)

小智 219

试试这个: overflow: auto;

它适用于我的问题..

  • +1,此解决方案很优雅,不会在页面中添加不可见标记.看到这个小提琴:http://jsfiddle.net/XmKrm/1/ (9认同)
  • 溢出汽车对我来说运作良好.如果溢出自动容器的高度小于内部的内容,这将添加滚动条.调整大小或设置高度:自动与溢出一起. (4认同)
  • 最好和最简单的解决方案......你救了我的一天。谢谢 (3认同)

小智 83

添加以下内容:

overflow:hidden;
height:1%;
Run Code Online (Sandbox Code Playgroud)

到你的主要div.消除<br />了清除额外的需要.

  • 它对我来说只有'身高:1%;` (3认同)

h0m*_*yun 59

作为替代方式,您也可以尝试这在某些情况下可能有用

display:table;
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


小智 22

我会用的

height: auto;
Run Code Online (Sandbox Code Playgroud)

在你的div.是的,我知道我迟到了一点但是我觉得这可能有助于像这样的人会帮助我.

  • @madi因为它并不总是有用吗? (5认同)

Ste*_*ike 14

以下应该工作:

.main #main_content {
    padding: 5px;
    margin: 0px;
    overflow: auto;
    width: 100%; //for some explorer browsers to trigger hasLayout
}
Run Code Online (Sandbox Code Playgroud)

  • 那是因为填充计数除了指定的宽度之外,所以元素的宽度是100%+ 5px左边填充+ 5px右边填充 (2认同)

Dan*_*ami 13

很简单的方法

在父 DIV 上:

height: 100%;

每次都为我工作


小智 8

使用带有display:inline-blockcss 的span标记.然后你可以使用CSS并在很多方面像div一样操作它,但是如果你不包含一个widthheight它根据其内容进行扩展和缩小.

希望有所帮助.


Dav*_*mas 6

通常我认为这可以通过clear:both在最后一个子元素上强制规则来解决#items_list.

你可以使用:

#items_list:last-child {clear: both;}
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在使用动态语言,则在创建列表本身的任何循环中生成的最后一个元素中添加一个额外的类,因此您最终会在html中使用以下内容:

<div id="list_item_20" class="last_list_item">
Run Code Online (Sandbox Code Playgroud)

和css

.last_list_item {clear: both; }
Run Code Online (Sandbox Code Playgroud)


Ift*_*mud 6

当父Div的子元素浮动时会出现此问题.这是问题的最新解决方案:

在你的CSS文件中写下以下类.clearfix和伪选择器:after

.clearfix:after {
    content: "";
    display: table;
    clear: both;
}
Run Code Online (Sandbox Code Playgroud)

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

<div class="clearfix">
    <div></div>
    <div></div>
</div>
Run Code Online (Sandbox Code Playgroud)

它总是应该工作.你可以调用类的名称.集团而不是.clearfix,因为它将使代码更多的语义.请注意,不必在双引号""之间的Content值中添加点或甚至空格.另外,溢出:auto; 可能会解决问题,但它会导致其他问题,如显示滚动条,不建议.

资料来源:Lisa Catalano和Chris Coyier的博客


ona*_*lbi 6

在做任何事情之前,请检查 css 规则:

{ position:absolute }
Run Code Online (Sandbox Code Playgroud)

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

  • 因为“绝对定位的元素从流中移除,因此被其他元素忽略。所以你不能根据绝对定位的元素设置父高度。” http://stackoverflow.com/questions/12070759/make-absolute-positioned-div-expand-parent-div-height (3认同)

Ray*_*Ray 5

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


小智 5

看起来这有效

html {
 width:100%;
 height:auto;
 min-height:100%
} 
Run Code Online (Sandbox Code Playgroud)

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