【问题标题】:Clear child floats without clearing 'external' floats清除子浮动而不清除“外部”浮动
【发布时间】:2012-06-17 00:00:30
【问题描述】:

清除一组浮点数最流行的方法是在父级的:after 伪元素上使用clear:both;。比如这个:

.group:after {
    visibility: hidden;
    display: block;
    content: "";
    clear: both;
    height: 0;
    }
* html .group             { zoom: 1; } /* IE6 */
*:first-child+html .group { zoom: 1; } /* IE7 */

这在大多数情况下都可以正常工作,但是当您在浮动元素中包含浮动元素时它会失败。 它会清除 所有 个浮动,而不仅仅是子级浮动。

一种可能的解决方法是添加

.group {
    display:inline-block;
}

但这可能会产生不必要的副作用。

有什么方法可以只清除子浮动,而不是页面上的所有浮动?

【问题讨论】:

    标签: css clearfix


    【解决方案1】:

    我首选的清除浮动的方法实际上是将包含元素的overflow 属性设置为auto

    .group {
        overflow: auto;
    }
    

    overflow: hidden 也可以。

    这将强制.group 清除任何浮动的孩子,但不会清除页面上的任何其他浮动。我认为这可能是您想要实现的目标?

    有时这种方法不会强制旧版本的 IE 清除浮动(抱歉,我不记得具体是哪个版本的 IE),在这种情况下,您需要为 IE 强制使用 haslayout。在.group 上设置显式宽度即可。但在大多数情况下,我发现这种方法“有效”。

    这是一个演示:http://jsfiddle.net/C7KWn/

    【讨论】:

    • 这很好用,谢谢。 haslayout 可以由zoom:1;触发。
    • 如果可以的话,我喜欢避免使用 zoom:1,因为它看起来像是一个多余的声明。但是,如果您最终使用这种方法,请在 IE 中进行测试,我认为大多数情况下它无需任何调整/修改即可工作。我有一种感觉,有时可能是 IE6 导致了我的问题,因为自从我注意到 IE 中的任何浮动清除问题以来,它已经很久了。
    • 如果需要触发hasLayout也不是多余的。如果只是 IE6 有这些问题,我不会费心支持它,因为它是一个非常过时的浏览器。
    • 这种方法的缺点是如果父级的文本环绕在外部浮动块周围,那么它将导致父级宽度缩小以适应外部浮动块,并且父级文本内容将不再环绕外部浮动。
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多