div我有包装两列布局的古老问题。我的侧边栏是浮动的,所以我的容器div无法包装内容和侧边栏。
div
<div id="container"> <div id="content"></div> <div id="sidebar"></div> </div>
似乎有很多方法可以修复 Firefox 中的明显错误:
<br clear="all"/>
overflow:auto
overflow:hidden
在我的情况下,唯一似乎工作正常的是<br clear="all"/>解决方案,它有点邋遢。overflow:auto给了我讨厌的滚动条,而且overflow:hidden肯定有副作用。此外,由于其不正确的行为,IE7 显然不应该遭受这个问题,但在我的情况下,它与 Firefox 一样受到影响。
我们目前可用的哪种方法最可靠?
根据所产生的设计,以下每个 clearfix CSS 解决方案都有其自身的优点。
clearfix 确实有有用的应用程序,但它也被用作 hack。在使用 clearfix 之前,这些现代 CSS 解决方案可能会很有用:
overflow: auto;
清除浮动元素的最简单方法是使用overflow: auto包含元素的样式。该解决方案适用于所有现代浏览器。
overflow: auto
<div style="overflow: auto;"> <img style="float: right;" src="path/to/floated-element.png" width="500" height="500" > <p>Your content here鈥�</p> </div>
一个缺点是,在外部元素上使用某些边距和填充的组合可能会导致出现滚动条,但这可以通过将边距和填充放在另一个包含父元素的元素上来解决。
使用“干verflow: hidden”也是一个clearfix解决方案,但不会有滚动条,但是使用hidden会裁剪位于包含元素之外的任何内容。
hidden
注意: 浮动元素img在本例中是一个标签,但可以是任何 html 元素。
img
CSSMojo 上的 Thierry Koblentz 写道:最新的 clearfix reloaded。他指出,通过放弃对 oldIE 的支持,解决方案可以简化为一个 css 语句。此外,当具有 clearfix 的元素是兄弟元素时,使用display: block(而不是display: table) 允许边距正确折叠。
display: block
display: table
.container::after { content: ""; display: block; clear: both; }
这是 clearfix 的最现代版本。
👉👏
以下解决方案对于现代浏览器不是必需的,但对于针对旧浏览器可能很有用。
请注意,这些解决方案依赖于浏览器错误,因此只有在上述解决方案都不适合您的情况下才应使用。
它们大致按时间顺序列出。
CSS Mojo的蒂埃里·科布伦茨 (Thierry Koblentz)指出,在针对现代浏览器时,我们现在可以删除zoomand::before属性/值并简单地使用:
zoom
::before
.container::after { content: ""; display: table; clear: both; }
此解决方案不支持 IE 6/7’n 目的!
Thierry 还提出:“请注意:如果您从头开始一个新项目,那就去做吧,但不要将这种技术与您现在拥有的技术互换,因为即使您不支持 oldIE,您现有的规则也会阻止崩溃的边距。”
最新和全球采用的 clearfix 解决方案,Nicolas Gallagher 的 Micro Clearfix。
已知支持:Firefox 3.5+、Safari 4+、Chrome、Opera 9+、IE 6+
.container::before, .container::after { content: ""; display: table; } .container::after { clear: both; } .container { zoom: 1; }
这种基本方法在通常情况下是首选的,当定位的内容不会显示在容器的边界之外时。
http://www.quirksmode.org/css/clearing.html - 解释如何解决与此技术相关的常见问题,即width: 100%在容器上设置。
width: 100%
.container { overflow: hidden; display: inline-block; display: block; }
除了使用该display属性为 IE 设置“hasLayout”,还可以使用其他属性来触发元素的“hasLayout”。
display
.container { overflow: hidden; zoom: 1; display: block; }
overflow使用该属性清除浮点数的另一种方法是使用下划线 hack。IE 将应用带有下划线前缀的值,其他浏览器不会。该属性在 IE 中zoom触发hasLayout :
overflow
.container { overflow: hidden; _overflow: visible; /* for IE */ _zoom: 1; /* for IE */ }
虽然这可行......但使用黑客并不理想。
这种较旧的“Easy Clearing”方法具有允许定位元素悬挂在容器边界之外的优点,但代价是更棘手的 CSS。
这个解决方案已经很老了,但是您可以了解有关“位置就是一切”的“轻松清算”的所有信息:http ://www.positioniseverything.net/easyclearing.html
当您快速将某些东西拍打在一起时,快速而肮脏的解决方案(有一些缺点):
<br style="clear: both" /> <!-- So dirty! -->
<br style="clear: both" />