Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

转:浮动门Bug探析

Posted on 2009-01-14 12:08  analyzer  阅读(273)  评论(0编辑  收藏  举报

转自:http://lifesinger.org/blog/?p=614

 

直接借用PPK的演示代码

div.container { border: 1px solid #000000 }
div.left { width: 45%; float: left }
div.right { width: 45%; float: right }

浮动门Bug就这样粉墨登场了:

div.container { border: 1px solid #000000 } div.left { width: 45%; float: left; background: #E9E2D2 } div.right { width: 45%; float: right; background: #F3F3F3 }

The left column.

The left column.

The left column.

The left column.

The right column.

The right column.

The right column.

做了一个demo页面,各种解法办法都在里面,自己看^o^

个人推荐使用办法二:

#container { overflow: hidden; _zoom: 1 }

采用hidden是因为:如果没设定高宽,hidden和auto的效果一样的;如果设定了高宽,hidden则是大部分情况下的预期结果。_zoom: 1是为了兼容讨厌的ie6.

2008-11-06更新:经圆心指点,overflow: hidden用来布局容易出问题,一是用 JavaScript Popup 出来的层很可能显示不全(致命伤);二是在某些情况下会造成双击空白处全选(没总结出规律,偶尔会出现)。此外,某些时候还会造成性能问题。

另外,用overflow清除浮动其实是一个hack, overflow本意不是用来干这个的,如果哪一天浏览器渲染引擎升级了,解决了这个“bug”,这个方法很可能就会失效。因此最好的清除浮动的办法还是PIE的方法:

.clearfix:after {
content: ""0020";
display: block;
height: 0;
clear: both;
}
.clearfix {
zoom: 1;
}

针对中文网站,上面有些改进:content:""0020";是放一个空白字符(小虎指出“.”在中文编码的页面有时会出问题,采用空白字符借鉴自Adobe首页)。这样,visibility:hidden;也就没必要了。

百度的小志还指出,最好将font-size: 0; line-height: 0;也加上。我和小虎讨论的结果是,这两个其实是针对ie的hack, 但实际上ie不认识:after. ie下,用zoom: 1;就已经搞定了,不需要加入其它hack.

另外,IE/Mac是老古董了,不必再考虑。

我要啦免费统计