【问题标题】:Using clearfix when there's nothing to fix?在没有什么可修复的情况下使用 clearfix?
【发布时间】:2012-12-20 17:13:21
【问题描述】:

我很清楚(双关语),这两个 best ways to implement clearfix 要么通过 Nicolas Gallager 的 micro-version .cf { *zoom: 1; },要么使用 overflow: hidden

但是当没有什么要修复的时候应该使用 clearfix 吗?(再次双关语。)

换句话说,如果您有一个像articlesection 这样的容器,只是出于语义原因——它没有背景或任何视觉效果(就像在this example 中所寻求的那样),但已经浮动里面的元素——你还应该清除它吗?

我为什么要问?

好吧,显然有些地方出了问题,因为如果您在网络检查器中调出容器,您将不会看到该容器突出显示,例如它只是一个不可见的滑行:

(在Firefox Tilt 中,它以 3D 形式可视化网站,当您将网站旋转 90 度时,容器块应该是一个空白区域。)

但这有关系吗?

到目前为止我的推理:

当然,如果您决定将来将容器用于视觉/布局目的,您会发现它的行为不正常,然后您将应用 clearfix hack。但是,还有什么需要考虑的?

【问题讨论】:

  • 不需要?不要这样做。
  • 不错的单线,但好的编程是关于使用最佳实践来预测和抵消任何未来的问题。问题是——这符合条件吗? (或多或少是个黑客。)
  • 排序相关:当你删除 ie6 css-101.org/articles/clearfix/latest-new-clearfix-so-far.php 时甚至更小的 clearfix
  • @albert,也需要放弃 IE7。

标签: html css css-float semantic-markup clearfix


【解决方案1】:

听起来在您的情况下,问题还没有出现,但我更喜欢防御性地编写代码。如果您稍后尝试为包含浮动的元素添加边框或背景怎么办?它看起来不正确。或者,如果您稍后对浮动进行更改以使其不占用全部可用宽度怎么办?然后,随后的内联内容可能会潜入浮动的任一侧。在我看来,您正在努力防止未来发生变化。

您在使用 clearfix 时试图避免两个问题:

  1. 包含后代浮动。 这意味着相关元素的高度足以包裹所有浮动后代。 (他们不挂在外面。)
  2. 将后代与外部浮动隔离。这意味着元素内部的后代应该能够使用clear: both,并且不会与元素外部的浮动交互。

当元素包含浮动后代并且您想要完成这两个目标时,使用 clearfix 非常重要。我对所有包含浮动的元素执行此操作。 Read more 在我对the same question 的回答中。

(正如您可能从那篇帖子中看出的那样,我非常不同意“实现 clearfix 的两种最佳方法是通过 Nicolas Gallager 的微版本 .cf { *zoom: 1; },或使用 overflow: hidden。”我没有zoom: 1 的问题,但 overflow: hidden will clip anything that falls outside the bounds of the element。)

【讨论】:

  • 感谢您的回复,但我的问题与您链接的问题不同。
  • 我知道你对 micro-clearfix 的担忧,但你没有提到任何关于 overflow: hidden 的事情。
  • 我指的是您在“实现 clearfix 的最佳方法”链接中提到的问题。在此答案中添加了有关为什么 overflow: hidden 是一个问题的详细信息。
  • 了解每种解决方案的副作用后,您可以选择最适合您情况的一种。传统的 clearfix 解决方案容易受到“clearfixed”元素外部的浮动元素和内部的clear: left|right|both 元素之间的交互影响。 overflow: hidden 元素可能会剪切后代内容,我认为overflow: auto 的问题在于它可能会在后代内容不适合的情况下显示滚动条。这完全取决于您可以接受哪些副作用。
  • 查看答案的第一段。昨天刚加的。从本质上讲,我认为您应该防御性地编写 CSS 代码,以防止您或其他人将来可能做出更改。
【解决方案2】:

我认为您应该始终使用 clearfix。如果不这样做,可能会出现许多问题,例如在此 div 之后的某些元素中浮动内容,页面边界问题(边距、填充等)。始终使用它比在不使用时搜索和查找问题更简单,因为并非在所有情况下都可以很明显地看出问题所在。

【讨论】:

  • 感谢您的回复,似乎是合理的逻辑。所以你是说每个里面有一个浮动的容器元素都应该声明clearfix?或者它是否也扩展到每个容器中没有浮动,但可能有朝一日?
  • 不,只是里面有花车。好吧,除非您有一个适用于所有容器的类“容器”,无论它们内部是否有浮动。然后,您可以将 clearfix css 规则添加到该类。
  • 感谢您的澄清。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多