7

你能强制一个容器 DIV 高度来容纳两个浮动的 div 孩子吗?我可以用什么花哨的技巧来做到这一点?我正在尝试在父 div 中制作两个大小相同的 div。我希望它们并排出现,它们之间有一点空白。Child2 倾向于弹出并低于 Child1。注意 Child2 包含一个表。我应该漂浮吗?

HTML:

<div id="parent">
  <div id="child1"></div>
  <div id="child2">
    <table><tr><td>content</td></tr></table>
</div>
</div>

CSS:

div#parent
{
    background-color: #C6E4E0;
    border: solid 3px #017E6F;
    font-family: Arial;
    font-size: 10pt;
    font-weight: bold;
    padding-left: 5px;
    padding-right: 5px;
    width:99%;
}

div#parent div
{
    width:49%;
    float:right;  
    padding:3px;  
}

div#parent div:first-child
{
    float:left;
}
4

5 回答 5

7

伙计们,这不是一个明确的问题,他的问题是他的两个浮动 div 没有并排出现。

首先,你不需要设置父 div 的宽度,div 是块元素,这意味着它们会自动调整其宽度以占据其父级的全部宽度(在这种情况下,可能 div#parent 的父级是身体)。

因为您正在明确设置宽度并为其提供填充,所以它可能会延伸到身体之外。这并不重要,但是如果您将相同的知识应用于子浮动 div,您就会明白为什么正确的 div 可能会被撞到底部。

首先,如果您明确地将 div 的宽度设置为百分比,则不需要添加填充。因为您正在处理百分比宽度,所以最好将填充添加到 div 的内容而不是 div 本身,因为填充是添加到宽度的。因此,如果您在 100px 父级中将 10px 填充添加到具有 49% 宽度的 div 中,则它的宽度将为 49px + 10px + 10px(2 个边),总计算宽度为 69px。

由于您没有发布您的标记和内容或您正在测试的浏览器,我无法确切说明为什么 div 会被撞倒。有两种可能的可能性。

  1. 您正在使用 IE,它允许表扩展到其父 div 之外,这将导致损坏。尝试将表格宽度显式设置为其父级的百分比或类似的东西。
  2. 49% 宽度 + padding = 大于 [parent-width] - [left-div-width]。这将导致它被撞倒,因为左 div 和右 div 对于父宽度来说太宽了。
于 2009-08-18T19:03:41.270 回答
3

我使用 clearfix 类。

.clearfix:after {
    content: "."; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;
}

.clearfix {
    display: inline-block;
}

/* Hides from IE-mac \*/
/** html .clearfix {height: 1%;}*/

.clearfix {
    display: block;
}

/* End hide from IE-mac */

然后只需在每个浮动元素容器中使用该类。

于 2009-08-18T16:07:07.117 回答
1
#container { width:200px; }
.floated   { width:100px; float:left; }
.clear     { clear:both; }

<div id="container">
  <div class="floated">A</div>
  <div class="floated">B</div>
  <div class="clear"></div>
</div>
于 2009-08-18T15:58:54.077 回答
1

我不是 的粉丝clear: both;,我宁愿在 Jonathan Sampsons 示例中这样做:

#container { width:200px; overflow: hidden; }
.floated   { width:100px; float:left; }

 

<div id="container">
  <div class="floated">A</div>
  <div class="floated">B</div>
</div>
于 2009-08-18T16:02:02.913 回答
1

顺便说一句,你想要

div#parent > div { float:left; }

代替

div#parent div:first-child { float:left; }

这仍然不是 IE6 友好的,但它会浮动两个子 DIV。

于 2009-08-18T16:02:55.160 回答