尽管像这样
例如:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
在此示例中,父div 不会扩展为包含其浮动的子级-似乎有height: 0。
你怎么解决这个问题?
我想在这里创建一个详尽的解决方案列表。如果您知道跨浏览器的兼容性问题,请指出。
解决方案1
Float the parent.
<div style="float: left;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:语义代码。
缺点:您可能并不总是希望父母浮动。即使您这样做,您是否也浮动了父母的父母,依此类推?您是否必须浮动每个祖先元素?
解决方案2
Give the parent an explicit height.
<div style="height: 300px;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:语义代码。
缺点:不灵活-如果内容更改或浏览器调整大小,布局将中断。
解决方案3
在父元素内附加一个“ spacer”元素,如下所示:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
<div class="spacer" style="clear: both;"></div>
</div>
优点:直接编写代码。
缺点:没有语义;spacer div仅作为版式hack存在。
解决方案4
将parent设置为overflow: auto
。
<div style="overflow: auto;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
优点:不需要额外的div。
缺点:好像是骇客-这不是overflow酒店的既定目的。
解决方案1:
最可靠,最简单的方法似乎是这样的:
HTML:
<div class="clearfix">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
CSS:
.clearfix::after {
content: " ";
display: block;
height: 0;
clear: both;
}
只需一点CSS定位,您甚至无需向父级添加类DIV。
此解决方案与IE8向后兼容,因此您无需担心较旧的浏览器出现故障。
解决方案2:
建议对解决方案1进行修改,如下所示:
HTML:
<div class="clearfix">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
CSS:
.clearfix::after {
content: " ";
display: block;
height: 0;
clear: both;
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML += '<div class="ie7-clear"></div>' );
}
.ie7-clear {
display: block;
clear: both;
}
此解决方案似乎向后兼容IE5.5,但未经测试。
解决方案3:
也可以在不折叠的情况下设置display: inline-block;和width: 100%;模拟正常的块元素。
CSS:
.clearfix {
display: inline-block;
width: 100%;
}
此解决方案应与IE5.5向后兼容,但仅在IE6中进行了测试。
急求!子元素设置了float:left,为什么是浮动到父元素的父元素(part1)上,而不是浮动到父元素(box1)上?想让这个子元素和学院新闻同行应该怎么办? 这是那个子元素 这是那个子元素 这是整体:
我正在开发一个web应用程序,它显示了一个巨大的卡片网格,其高度本质上是可变的。 为了美观起见,我们使用jQuery的来均衡每行卡片的高度。 它的性能没有得到很好的扩展,所以今天我一直在迁移到一个基于flex box的解决方案,它的速度要快得多。 然而,我失去了一个行为——如果卡头的内容不合适,应该用省略号将其截断。 目标: 3列 列宽度变化以填充父 行间距不变 高度在一排内相等 如何安排容器大小
问题内容: 考虑以下HTML: 和以下CSS: 就目前情况而言,Firefox目前与以下内容类似: 注意,第四项在第二和第三列之间分配。我该如何预防? 所需的渲染可能更像: 要么 编辑: 仅指定宽度以演示不需要的渲染。在实际情况下,当然没有固定的宽度。 问题答案: 正确的方法是使用闯入式CSS属性: 不幸的是,截至2019年10月,Firefox不支持此功能,但其他所有主流浏览器均支持此功能。使用
问题内容: 任何人都知道为什么overflow:hidden强制具有浮动元素的元素包装元素吗? 我真的很想了解内部工作原理,而不是仅仅使用它并相信“它确实有效”。 当包含元素的方向与浮动的子元素相同的方向时,我可以理解它的工作原理,但是overflow:hidden意味着裁剪溢出的内容(与position:absolute / relative一起使用时)。 任何信息表示赞赏。 问题答案: 浮点数
问题内容: 我已经在SO上看到了几次这样的问题,并且给出了相同的答案,但这些答案在我的Chrome或Firefox中不起作用。 我想让一组左浮动div开始运行,水平放置一个带有水平滚动条的父div。 我可以在这里演示如何使用此糟糕的嵌入式CSS 但是,从SO *给出的答案来看,这应该可行,但对我而言却不可行。 有没有一种方法可以定义每个项目的绝对位置呢? eg [防止浮动的div包装到下一行 问题
问题内容: 我有一个“浮动工具箱”-的div 。效果很好。 但是,当在该框内滚动(使用鼠标滚轮)并到达底部或顶部时,父元素将“接管”“滚动请求”:工具箱后面的文档将滚动。 -这很烦人,而不是用户的“要求”。 我正在使用jQuery,并认为可以使用event.stoppropagation()停止此行为: 它确实输入了该函数,但是仍然会发生传播(文档滚动) 很难在SO(和Google)上搜索此主题,