当前位置: 首页 > 面试题库 >

浮动子元素:溢出:隐藏还是清除:两者?

司毅庵
2023-03-14
问题内容

作为一名Web开发人员,我经常在另一个(父)div中有两个浮动(子)div。实际上,我整天都这样做。

<style type="text/css">
    #left {float:left;}
    #right {float:right;}
</style>
<div id="parent">
    <div id="left" class="child">&nbsp;</div>
    <div id="right" class="child">&nbsp;</div>
</div>

如果没有额外的css / html,这将无法工作,因为父级不会自动增长以适应浮动子级。有两种流行的克服方法:
1)添加overflow:hidden到父级的CSS中。
2)添加第三个“清除”子级<br style="clear:both;" />

我知道关于此类事情还有其他一些类似的问题,但是我的问题是:

哪种方法更好,为什么?各自的优缺点是什么?


问题答案:
  1. 隐藏的溢出-非常可靠的方法。主要缺点是,如果在父元素上设置高度,则任何溢出都会被隐藏。我在创建带有浮动列表项的菜单时发现了这一点-子菜单不会出现。

  2. 清除元素-我将使用div而不是换行符,height: 0; clear: both;因为它不会在下面产生间隙。这是一种更可靠的方法,唯一的缺点是标记中有额外的元素。

  3. 浮动父元素-根据我的经验,在很多情况下,您都不希望浮动父元素,因此我会避免使用它。

  4. 您还可以使用生成的内容方法:

#parent:after {
content: ".";
visibility: hidden;
clear: both;
}

这样可以节省标记中的额外元素,但在IE7及以下版本中将无法使用。

  1. 使用内联块-只是记住了此方法。与其将两列浮动,不如将它们设置为display: inline-block,它们将并排显示:
.child {
display: inline-block;
vertical-align: top;
}

使用此方法时,您唯一必须记住的是,如果一个块的关闭标签与另一块的开始标签之间有空白,则各列之间会出现一个空格(其大小取决于字体,因此很难衡量)
。只要您这样做,...</div><div id=...此方法就可以很好地工作,并且优于浮动元素IMO。



 类似资料:
  • 问题内容: 问题很简单而且简短:为什么要清除浮动?我查看了w3标准文档,但没有任何暗示。 问题答案: 因为当您与其他任何东西一起使用时会建立一个新的块格式设置上下文(链接到w3.org规范)。

  • 问题内容: 我有一个清单,李的有一个。之后的内容应正确对齐。 我认为,可以通过使用:after这样的伪选择器来删除。 我是否总是需要创建一个单独的div来清除浮动元素? 问题答案: 这样写:

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 嗯,我也试着把它藏在身体里!还是不工作..?

  • 问题内容: 我在w3schools上阅读了以下代码,但不了解该属性如何影响文本是否显示在右侧。 我知道它用于处理超出范围的内容,但不了解它在这种情况下如何应用。 问题答案: 我尽力消除混乱: 是一个块级元素,与元素一样(它们延伸到父宽度的100%)。这就是为什么默认情况下,如果在这些元素上未声明宽度或显示,它将显示在if 下方的原因。 现在在您的示例中,仅包含浮动元素。这使其折叠到一个高度(尽管如