如今这对你来说已经足够了(IE 8 及更高版本)
.group:after {
content: "";
display: table;
clear: both;
}
将它应用于任何需要清除浮动元素的父元素。例如
<div class="group">
<div class="is-floated"></div>
<div class="is-floated"></div>
<div class="is-floated"></div>
</div>
你会使用它来代替用类似 <br style="clear: both;" />
在父元素底部清除浮动元素(容易忘记,不能直接在 CSS 中处理,非语义化),或在父元素上使用类似 overflow: hidden;
(你并不总是希望隐藏溢出)。
现在谈谈历史!
这是最初流行的版本,旨在尽可能支持较旧的浏览器
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix { display: inline-block; }
/* start commented backslash hack \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */
然后,Jeff Starr 基于没有人使用 IE for Mac 的事实,提出了一个更简洁的版本,在这里记录,因为反斜杠技巧就是为了解决这个问题。
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
* html .clearfix { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
然后,使用“group”作为类名变得流行,这更简洁,也更语义化(来自 Dan Cederholm)。此外,content
属性甚至不需要空格,它可以为空字符串(来自 Nicolas Gallagher)。然后,在没有文本的情况下,font-size
就变得不必要了(来自 Chris Coyier)。
.group:after {
visibility: hidden;
display: block;
content: "";
clear: both;
height: 0;
}
* html .group { zoom: 1; } /* IE6 */
*:first-child+html .group { zoom: 1; } /* IE7 */
当然,如果你不再支持 IE 6 或 7,请删除相关的行。
更新于 2011 年 5 月 18 日:Nicolas Gallagher 再次提出了 “微型” clearfix。还可以查看这篇文章 额外的内容。
.group:before,
.group:after {
content: "";
display: table;
}
.group:after {
clear: both;
}
.group {
zoom: 1; /* For IE 6/7 (trigger hasLayout) */
}
查看此页面顶部,以获取 clearfix 的最新版本。
将来,我们可能能够使用
.group {
display: flow-root;
}
所以,我想确认一下:这是否适用于浮动的子元素,因此父元素会消失?
我发现对父元素应用 overflow: hidden; 可以解决这个问题。然后父元素会填充在子元素后面。
是的,没错,但 overflow: hidden; 也会隐藏溢出部分,这在某些情况下可能是不希望看到的行为。
overflow: auto;
只要你能控制你的边距和填充,它就能很好地工作(否则你会看到滚动条)。这很有讽刺意味。:)
Chris Coyier 说:“是的,没错,但 overflow: hidden; 也会隐藏溢出部分,这在某些情况下可能是不希望看到的行为。””
快速链接菜单、ul、li 使用自定义选择列表等(这些是 **绝对定位** 的)就是 **某些情况**。
哈哈,所以为了让你“清楚”一点哈哈 :)
我只使用它,并且在测试网站时没有发现错误。
我仍然坚定不移地使用它。它很少让我失望,并且在跨浏览器兼容性方面表现出色。
我唯一遇到过问题的时候是,我有一个左浮动或右浮动的流体容器。当 clearfix 存在时,我会在其中一个元素下方看到一个很大的间隙。
太棒了!我一直对判断是使用基于标记的清除还是使用这种方法感到困惑。这很酷……但仍然需要在一个更大的应用程序中测试它。
我担心 .clearfix{display:inline-block;}, block。我不确定这在大量标记/复杂布局的应用程序中是否 100% 完美。如果我错了,请纠正我。
这个评论部分的编辑和删除功能太棒了:)。我非常喜欢计数器……很棒的用户体验和出色的交互设计。继续努力,Chris!
Chris – 你就像玛丽·波平斯一样,几乎在各个方面都完美无缺,除了“it’s”和“its”。所以为了帮助你达到更高的完美境界,我要免费给你上一课! (你兴奋了吗?)
所有格代词:his,hers,theirs,ours,mine,yours,whose 和 its
注意这些代词都没有使用撇号 – 只需记住“his,hers,its”。
缩写:It is 缩写为 it’s,he is => he’s,she is => she’s,I am => I’m,you are => you’re,they are => they’re,we are => we’re,who is => who’s
对于代词来说,只有上面所示的缩写才使用撇号。普通名词使用撇号来表示所有格,但代词不使用。
所以你的帖子标题应该是“强制元素自行清除其子元素”(而不是 it’s)。我在你的帖子中经常看到这个错误,但这个错误在标题中显得更加突出。
Whew!现在终于解决了这个问题(看到这些错误确实会妨碍内容),你很棒,我从你那里学到了很多东西 – 我希望我的语法小课真的能有所帮助!
另外,关于主题,感谢你提供这个有用的片段!
你是我见过的最糟糕的人。
然后你醒来,意识到谁在乎。
哇,那个 Maggie Wolfe Riley,她真的很爱指手画脚,不是吗?
我不得不再次检查一下我的撇号使用情况。
你怎么能在晚上睡得着觉?多么愚蠢的评论,我们都知道他的意思。
他实际上改变了他的标题哈哈,这很有趣
Maggie Wolfe Riley 可能养了很多猫。
谢谢 Maggie!非常有帮助。
我讨厌像你这样的人!
我真的只有我一个人认为应该在 CSS3 中添加一个标准化的非黑客方法来实现这一点吗?
真的吗?只有我一个人吗?(难过,缓慢地拍脸)
overflow: evelop;
overflow: contain-floats;
float-collapse: none;
任何东西,什么都可以。
你不是一个人。我最喜欢第三个。
我完全同意。
是的!早就应该有了!
一个本地属性将非常受欢迎。
我在谷歌搜索“为什么 CSS 中没有本地 clearfix”时,找不到任何有用的解释。
有人知道为什么吗?
前几天,我使用 flexbox 时,使用 justify-content:space-between;,它将不可见的伪元素也包含在计算中。使用 modernizr 作为钩子可以很容易地再次删除它们,但这真的很麻烦。
除非作者完全了解这种样式在构造方面的含义,否则使用这种方法可能很危险。
查看 关于 clearfix 的所有错误信息
在 史上最佳 clearfix 中可以找到最佳的 clearfix 使用方法。它不使用类名来解决问题,而是采用了一种自动解决方案,应该应用于除 p 和 footer 元素以外的所有块级元素。
哇。毫无疑问,这是我见过的设计最出色的网站之一。一切都非常漂亮,加载速度快,并且交互性和极简主义的程度恰到好处。
关于这篇文章,我刚开始接触 CSS,这个问题困扰了我一段时间,直到我从一个 TutorialZine 模板中了解到类似 clearfix hack 的东西。我难以置信的是,这么多年来,这么多人指出了这个问题,它仍然没有得到解决。当像这样的基本问题没有得到解决时,像 nav 和 section 这样的语义标签就毫无意义。我觉得用 CSS 设计整个过程非常乏味,我不能怪以前开发人员使用表格。
Clearfix 对我来说在 IE7 上完全不起作用,它修复了 IE6 的问题,但没有修复 IE7,有什么想法吗?
我刚刚发现了这个网站
http://wiki.fluidproject.org/display/fluid/Testing+clear-fix+solutions
所有 clearfix 解决方案都在这里进行了测试,似乎在 IE7 上没有一个能正常工作 :( 奇怪。有人有解决方案吗?
5 月 18 日更新
“display:table” 通常不是不鼓励的吗?还是在这里可以使用,因为它应用于“content:””?
HTML 表格用于表格数据,用它们进行布局在语义上是错误的。CSS 不是关于语义,而是关于表现。
所以将一个元素呈现为 display:table 或 display:table-cell 等等是完全可以的!
我非常确定 :before 和 :after 伪选择器在 IE6 和 IE7 中不起作用,所以这个解决方案对于跨浏览器功能来说并不有用。
还有其他关于这个问题的评论吗?
它确实有效。在抱怨之前先尝试一下。在 http://jsfiddle.net/ 中编写测试非常容易。所有技术都有多个选择器,没有伪元素的选择器用于 IE 6/7。
抱歉,我说的是最后一个。唯一没有伪元素的行是触发 IE 的 hasLayout 的那一行。我肯定错过了什么重要的事情,或者这个对于 IE 来说是作为 clear:both 工作的……
我已经使用这个很多年了,它从来没有让我失望过。但让我惊讶的是,当他们还是 UI 开发人员时,人们仍然难以理解这个概念。我最近不得不教一个有 15 年编程经验的程序员,他们仍然对这个概念模糊不清。
我向他们展示的最好的例子之一是父元素的背景颜色和独立的子容器。这通常会立即让事情变得清晰,从而区分使用 clear fix 和不使用 clear fix 的区别。
我可能应该知道这个,但 clearfix 到底是什么,它的作用是什么?我在各处搜索解释,但找不到关于它们是什么的任何内容。感谢您的帮助!:)
当使用元素浮动时,父元素不再尝试包裹该元素。当使用大量的浮动元素作为布局的一部分时,有时需要“清除”浮动的子元素,以便父元素可以继续完全包裹它们,如预期的那样保持适当的布局/设计流程。
当与上述解决方案一起使用时,.clearfix 或 .group 类提供了一种模块化方法,可以通过 CSS 和类将此添加到父元素中,而不必诉诸于在 HTML 中添加非语义 div 或断点。
感谢 Kristian 的解释。直到现在,我也很难找到一个清晰的答案。
嗨!由于最新更新:具有“display:table”的父元素不会影响其绝对定位的子元素吗?
您如何显示修复的更新非常棒。这样真的很容易看到它的发展!谢谢!
迄今为止关于 Clearfix hack 最清晰的文章。
这个网站的图形作品非凡。
太棒了!
完全同意~~
Overflow 是缺失的“缺口”[谢谢,帕特里克,你这个老家伙]……
CSS3 父级[CSScube] 从 IE4-6 开始就是语义,Opera.fun 只是
overflow: auto
在上下文中,它是[女士们的事]
.cleargroup, parentname.cleargroup {
display: block;
font-size: 0;
overflow: auto;
}
然后,既然我们要做到极致
Font-size 是显示元素的间距,而不是高度。属性 font-size 是逻辑显示锚点,它的值将被忽略(在新浏览器中选择器不需要?哦,天哪,锚点!)。在属性中回显 display:block 对于管理 cleargroup 内部,带有绝对位置的流体浮动溢出至关重要。相对定位处理您可能抛入 cleargroup 区域的任何 CSS 小部件。对于那些仍然被旧版 IE 和 Firefox 的怪癖所困扰的人,<操作符缓存> 有所帮助;操作符被其他人忽略。同样,可见性(放松你的领子,脚本编写者)由附加到父元素和子元素的 display:block 管理,根据需要确保属性操作符在显示中的溢出。
这在构建包含并排垂直列并环绕浮动元素或块的地方尤其有效。Parentname 允许包含一个开头的块引用攻击,或者任何东西。但是,结束的攻击会稍微搞乱你的浮动包裹,无论是内联还是其他。因为没有剩余的溢出。这是 CSS 逻辑消亡的典型情况之一,Ugh。
现在,设计和开发问题是在父元素内部还是在祖先元素外部。在页面上,在新浏览器中,它似乎是一个不挑剔的 div。这为脚本编写和设备化留下了样式提示。对于纯粹主义者来说,还有 cleargroup 容器弹出窗口教程。在这种情况下,溢出平衡裁剪边距等。
因此:希望在任何 CSS 属性附近的那些很棒的“回显”和“区域”术语不会让那里的设计师感到不安。确保 CSS 论述的解释学外壳并不十分安全,是吗?Net5 和 CSS4 正在前进。……overflow:auto
你在说什么鬼东西。我讨厌伪知识分子。
(抱歉,我只是不得不说。听起来很有趣,而且非常适合出现在这里)
伪知识分子:一个试图通过假设他们选择的词汇会让大多数人感到困惑来伪装成高于平均智力的一个人。预期效果是:“哇,他听起来很聪明!”
[我的定义]
好了。我应该停止了。
顺便说一句——您的网站很棒,Chris。祝您一切顺利。
我喜欢这种方法。group 类现在已经完全取代了我的 clearfix。您再也不会在我的作品中看到 clearfix 类名了。一如既往的棒,先生!
我喜欢您的网站,但如果您只提供一个有效的 clearfix 代码段而不是两个或三个,会更简单。
那么您应该只使用最后一个,只要它只在 IE8+ 中有效是可以的——他在这里向您展示的是 hack 的演变,倒数第二个迭代是最先进的,它仍然在所有地方都能正常工作……就这样。
感谢您提供 clearfix 代码段,Chris!仍然运行良好。我使用的是 Nicolas 的微修复,它与 Paul 的 Boilerplate 一起提供,但在最新的 Firefox 中它破坏了我的布局,并出现了意外的行为。您的仍然有效,在这个方面棒极了 :D
这里也发生了同样的事情。Firefox 在使用 Nicolas 的 clear-fix 时遇到了问题。该怎么办?
嗨,Chris,
我认为当前 Firefox 中存在一个错误,如果您在“content”中没有任何内容,那么表单元素会获得双倍边距。我确信即使空格也不起作用,FF 至少需要一个点。我还没有注意到其他元素有这样的行为。
对我来说,始终有效的方法是使用 clearfix,而是在您的 css 文件中使用一个简单的类
然后只需将一个包含上述类元素的 div 放在所有浮动元素的下方
我从未遇到过这个问题,不像 clearfix 解决方案。
添加标记以修复样式问题不是一个好主意(即使确实可行),仅仅因为标记应该具有语义原因,没有任何样式/设计含义。
您可以添加一个 <div>(或一个 <hr> 等等)来修复浮动问题,这已经做了很长时间,但它会向 DOM 树添加可避免的元素,并且它会将标记用于错误的目的。
此外,为需要清除修复的元素添加一个类比在需要清除修复的元素的结束标签之前添加一个非语义元素更容易。
哇,我有一分钟觉得自己有点傻。我也用这个方法。感谢您的发布。这拯救了我的理智。
似乎是假的胡戈
您好,
我喜欢微型清除黑客,发现它在编写模块化 CSS 时非常合适。只需将 .cf 类添加到您要清除的元素,然后完成!此外,在使用 LESS 或 SCSS 时将其用作混合非常容易。
但是,与同事的讨论让我思考。当浏览器渲染页面时,使用伪元素 :before/:after 会如何影响内存使用?
在您的 CSS 中使用 content: “”; 不会将任何内容插入 DOM 树,但它们被渲染到渲染树中,对吗?
假设您有 1000 个元素,所有元素都应用了清除修复。浏览器实际上必须处理 :before 和 :after 以及主元素(视觉上)。问题出现在讨论移动浏览器优化时。通常它们的性能比桌面浏览器慢。
如果传统的 overflow:hidden 可以用来清除元素(并且您的设计允许您使用它),这在性能方面不是更好吗?
很棒的想法。我怀疑即使是移动浏览器也能非常快地处理它,但这值得一些测试。太可惜这种 CSS 测试太难了。
似乎不太可能您需要在一个页面上应用清除修复到如此多的元素?如果您这样做,也许在担心这是否会拖累浏览器之前,您应该考虑编写更简单的布局 HTML 和 CSS,这样就不需要那么多清除事件来使一切都按需进行,因为如此复杂或冗余的布局代码也会拖累浏览器。
overflow:hidden 和 overflow:auto 有时会出现问题,要么 a) 隐藏您不想隐藏的东西,要么 b) 有时如果东西有点偏离就会显示滚动条。在我看来,这些都不是最佳选择,因此这些清除修复黑客是首选方法。人们喜欢 Chris 和 Nic Gallagher 推广这些解决方案是有原因的——从布局/设计角度来看,它们是可靠的,并且比替代方案具有更少的负面影响。
无论我做什么,我总是无法使其正常工作……好吧,就让它溢出吧。
使用通配符选择器 (*) 会对性能产生非常严重的负面影响。根据我的经验,在 CSS 中添加单个顶级通配符(如您所示)通常会至少使 CSS 解析时间增加四倍。最好使用 IE 条件注释来处理 IE 特定的内容,这样就不会减慢其他人的浏览器速度(更不用说它不是黑客,而是一个支持的功能,旨在做你想做的事情,你可以依靠它)。
您是否有关于此的真实数据?我从没见过相关数据。我知道,从技术上讲,是的,该选择器的解析时间比 ID 选择器长,但它真的是可以感受到的延迟吗?我的假设是这没什么大不了的,要么您的页面包含比普通网站更多的元素,要么您使用了大量通配符选择器。
function example() {
element.innerHTML = “code”;
}
在最后一个示例中,您也可以使用 display: block; 而不是 display: table;,它将以相同的方式工作。它们之间有区别吗?比如,使用哪一个很重要吗?
我认为您可以通过将内容信息更改为此来改进这一点
.clearfix:after { content: "0A0";}
,这基本上会将其更改为空格,您还可以添加font-size:0;
来删除元素末尾不需要的线,它将正确对齐 :)非常感谢您提供这个
我从这个网站获得了这个想法,希望对您有所帮助 :)
http://www.jqui.net/tips-tricks/css-clearfix/
最后一个示例(2012 年 8 月)在 Safari 6.0.1 中不起作用
前一个示例工作完美。谢谢!
兼容性问题:?
我不知道您是否尝试过使用此网站
Opera 12.02
构建 1578
Windows 7 (32 位),
但是 CSS 代码片段看起来根本不好。
代码片段要求用户水平滚动才能查看整个代码片段,这使得阅读变得很困难。
我在 Chrome 上尝试了这个,它按预期工作,但 Opera 将所有内容都放在一行上,并添加了一个左右滚动条。
这对我们 Opera 用户来说非常不友好。我只是想让你知道,以防这对您很重要。
我尝试使用 http://jigsaw.w3.org/css-validator/ 验证此 CSS。它只发现了一个错误:元素 * + html .clearfix 不存在 zoom 属性。似乎可以通过替换以下 base.css 文件片段来修复此问题
[code=css]/* for IE7 */
* + html .clearfix {
zoom: 1 !important;
}[/code]
有没有人在 Chrome 上遇到过网页部分消失,而在其他浏览器上却没有?如果我将浏览器窗口向右拉伸,丢失的部分就会加载。它们似乎出现在页面上第二个 div 之后,该页面具有“group”类(WP 电子商务插件将 group 类应用于产品页面上的每个产品 div)。我想知道在一个页面上多次使用 group 类是否会在 Chrome 中出现问题。
我在几台电脑上尝试过这个,我认为空白区域出现的模式比我想象的要随机。我认为这与“group”类无关。但是,如果有人想回答有关将 group 类分配给页面上多个 div 是否会引发问题的问题,那么了解这一点将很有帮助。谢谢大家。
我似乎无法使用这种技术获得预期的结果(尽管我记得它以前对我来说按预期工作)。
http://jsfiddle.net/92wmB/9/
未浮动的元素仍然包裹在浮动和“自清除”元素周围。我预计即使未浮动的元素也会遵守伪元素的清除规则。正如您在示例中看到的,它确实适用于额外的标记方法(使用 <div style=”both”></div>)
这里真正的问题是我们正在对不应该有浮动的块元素使用浮动。
我能想到的唯一真正解决方案来消除对这种黑客的需求是让 CSS 实现一种方法来正确处理块元素的浮动。
考虑到 CSS 到目前为止的缓慢进展,我不会等待它很快发生。
等待 flexbox
很棒。我特别喜欢 2012 年 8 月的最后一次更新。终于有一个清除修复我可以记住。我已经成功地将它与我的学生一起使用。非常感谢。
为什么您仍然建议使用
table
,而尼古拉斯说使用table
是由于 :before。我是不是遗漏了什么?
你好!
我尝试在这里应用最新版本的清除修复/组:jsfiddle 链接。
为什么在 feed 的“ul”中“li”标签后面有一个额外的空格?当我使用原始的清除修复版本时,那里没有空格。(Chrome、Firefox、IE)
谢谢。
li
内部的p
元素需要margin-top: 0;
第一个
p
需要margin-top: 0;
,第二个(最后一个)p
需要margin-bottom: 0;
以下是修正版本
嗨,Adonis K.
更新了 jsfiddle
我在“ul”中添加了 background:skyblue,在“li”中添加了 background:darkgrey。您能看到暗灰色背景之后的淡蓝色背景吗?
淡蓝色背景不应该出现在暗灰色 li 下面,对吗?
我对所有更新感到有点困惑。 最上面的那个是最新的还是最下面的那个?
我也是。
是的,我应该使用哪个? O.o
我相信倒数第二个是 clearfix 的最新“更新”(如果你不支持 IE6/7,你可以使用最后一个)。 我知道这看起来不太对,因为上面的日期是 2012 年 8 月,但我正在浏览 CodeSchool.com,他们使用的是这个。 另外,他提到了他如何更新为使用 .group 而不是 .clearfix,这将使所有使用 clearfix 作为类名的无效。 你可以看出它比其他的更简单,我想这意味着随着时间的推移,它会变得更相关。
可能错了,但这只是我的意见。
大家好,我还是不太理解解决方案。
为什么需要:
content: "";
是因为浏览器不认可附加的元素,因为它为空吗? 还是类似的情况?
谢谢!
伪元素 ::after 和 ::before 需要属性“content”,否则它们会被忽略。
有没有人向 W3C 建议过
display:clearfix
规则或等效的 CSS 新标准? 用一个 hack 来实现本应作为内置选项的功能真是太疯狂了。我们如何才能建议这样的事情?
大家好!
我一直在整个互联网上寻找解决这个 Firefox 的 bug 的方法。 我的网站在 Chrome、IE 上表现完美,但在 Firefox 中是空白的(是的,"container" 内没有任何内容出现在屏幕上)。
解决方案:#contaier {overflow: auto; clear: both;}
注意: "container" 是我网站中主 div 的 ID 名称。
我遇到的问题
在容器内添加一个具有属性“clear: both”的 div 有效,直到我意识到我的“border-radius”消失了。
“Overflow: visible”(仅)显示了元素,但背景颜色也消失了。
“clear: both”(仅)也显示不了背景。
对我来说,这很有效。
我真的很想更多地解释一下这个问题,但我英语水平不足以做到这一点。
所以基本上,如果我的布局使用包装器,我只需要将类“group”添加到所有包装器?
为了安全起见,它们也需要放在 ul 列表中吗?
顺便说一句,克里斯你的视频播客真的太棒了!
对这个页面的建议:我们是否应该反转修复的顺序,以便最新的修复显示在最前面? 我认为这是人们最想要的,他们可以根据需要滚动浏览历史记录。
哈哈哈。 我喜欢看到更新的进步!
提醒一下,一些早期的评论(从很久以前)链接到一个页面,“史上最佳 Clearfix”。
链接失效了。 我用了一点 Google 大法来追踪它。
正确的链接:史上最佳 Clearfix
我喜欢他们的方法,但可以做得更好。 他们有很多重复的样式,每个人都知道这根本不 DRY。 哈哈。
对作者表示敬意,但 CSS 的重点是剔除冗余的样式。 因此,他们的版本虽然工作得很好,但可以用这种方式改进。
不需要为每个元素重复相同的行来清除,对吧? 现在这才是真正的自动清除。 太棒了。
我的天,你真是救星……我找了很久了。
你用这个救了我一命!
我一定是误解了什么,因为虽然它乍一看很好……我的图像在 Div 的下部重叠,你需要向上滚动才能看到它们。 有人知道如何防止这种情况吗? http://www.eweknit.com/photos/
我看到的较短版本有什么问题,比如
.cf:before, .cf:after { content: “”; display: table; }
.cf:after { clear: both; }
.cf { zoom: 1; } (随着 IE 6/7 的消亡,这个可以去掉吧?)
?
这与克里斯列出的最后一个没什么不同——但你可以随意命名它。
.group::after {
content: "";
display: table;
clear: both;
}
这篇文章只是列出了所有旧的迭代,向你展示 clearfix 如何演变……以及如何在简化的辉煌中展示最简单、最新的形式。
(实际上,克里斯的版本不同之处在于它只包含 ::after,因此只渲染了 1/2 的对象到 DOM 中。)
这是我一直在用 SCSS 的方法。
它是一个 mixin,因为你不能在 Sass 中通过媒体查询扩展占位符类。 我用这种方式来保持 HTML 的简洁。
我不确定为什么
clear: both
总是放在::after
中,但这对我来说并不总是有效。 我还没有在实际元素中放进去的时候遇到任何问题,而且在我测试的所有情况下它似乎都有效。我不明白 IE6/7 行有什么用,因为 IE7/更早的版本不支持 :after 或 :nth-child,所以它将无效。
对于这样的浏览器问题(是的,我们仍然需要在 2015 年支持 IE7),在元素中使用
<div class='clearfloat'/>
比使用class='superlativeclearfloat'
以及一堆神秘的 CSS 更不简洁吗?为什么不直接使用……
overflow: auto;
zoom: 1;
嗨,Chris,
我注意到你在最后一次更新中没有包含 :before。 我也没有包含它,到目前为止它按预期工作,但我以后会发现我应该包含它吗?
谢谢,
贾斯汀
请注意,伪元素使用两个冒号(与使用单个冒号的伪类相反)。 所以
.clearfix:after
应该写成
.clearfix::after
哥兰对所有 IE9+ 和现代浏览器都是正确的。
IE8 只能理解旧的单冒号语法。 如果你需要 IE8 支持,也包含一个单冒号版本。 这不是理想的,但我们毕竟是在谈论一个 hack。
我认为我们很快将有一个更好的解决方案,即内在和外在尺寸模块,但它对大多数项目的支持还不够好,需要一段时间 https://caniuse.cn/#feat=intrinsic-width
直接使用 display: table 会有问题吗? 对不起,我无法在订单或移动浏览器上测试。
简斯·梅耶特(谷歌框架开发人员)就在上周写了一篇关于 clearfix 的文章,并建议直接使用 overflow。 https://meiert.com/en/blog/20161114/no-clearfix/
我认为添加一张图片可以更容易理解这篇文章在讲什么。 这对我有帮助
http://stackoverflow.com/questions/8554043/what-is-a-clearfix/29562362#29562362
overflow:auto|hidden
(在父容器上)怎么样?怎么样
谢谢 Rob。我很喜欢这个。它在我的所有测试浏览器中都按预期工作。
但是,根据您的 html 结构,.clearfix {display:flow-root;} 解决方案似乎与 .clearfix::after {content: “”; clear: both; display: block;} 解决方案在处理边距折叠方面有所不同。因此,最好在使用此解决方案时,彻底检查所有必需浏览器的边距折叠,以确保它符合预期结果。
在 http://www.cssmojo.com/the-very-latest-clearfix-reloaded/ 中,有一些关于 clearfix::after 解决方案和边距折叠的讨论。
就我而言,由于我选择的布局方法以及需要同时兼容 IE11 和现代浏览器,我坚持使用 .clearfix::after 解决方案。我期待着 display:flow-root 成为我们唯一需要的那一天。
我一直不明白为什么人们使用 “clearfix” 技巧。
我一直认为,你不应该在
<
div> 之后没有任何 CSS 属性。
我从未在我的网站上使用过这个 “clearfix” 东西,而且我总是得到我想要的结果。
不要假设浏览器知道你想要对你的 html 元素做什么。
所以不要把你的元素样式留给运气,你就会没事的!
我的 “clearfix” 简写如下,除非您想要 “clearfix” 容器中的最后一个元素
嗨 Chris!我一直都是你的粉丝。你的信息很棒,你真的让它成为一个很棒的学习体验。我意识到你的帖子可以追溯到 2009 年。太棒了!你还在这里发帖吗?我只是想知道,因为我还在阅读和学习,哦,还有练习。谢谢 JP Olivier
我在某个地方了解到,将父元素设置为 inline-block 是浮动子元素的正确高度。