DivCSS经验:三种实用CSS清除浮动的方法

转自:http://www.bobd.cn/design/web/htmlcss/200906/32713.html

应用DivCSS网页布局,经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,关于清除浮动,在52CSS.com上有过很多介绍。清除浮动是必须要做的,而且随时性地对父级元素清除浮动的做法也被认为是书写CSS的良好习惯之一。

未清除浮动源代码

<style type=”text/css”>
<!–
    *{margin:0;padding:0;}
    body{font:36px bold; color:#F00; text-align:center;}
    #layout{background:#FF9;}
    #left{float:left;width:20%;height:200px;background:#DDD;line-height:200px;}
    #right{float:right;width:30%;height:80px;background:#DDD;line-height:80px;}
–>
</style>
<div id=”layout”>
    <div id=”left”>Left</div>
    <div id=”right”>Right</div>
</div>

一、使用空标签清除浮动

我用了很久的一种方法,空标签可以是div标签,也可以是P标签。我习惯用

,够简短,也有很多人用<hr />,只是需要另外为其清除边框,但理论上可以是任何标签。这种方式是在需要清除浮动的父级元素内部的所有浮动元素后添加这样一个标签清楚浮动,并为其定义CSS代码:clear:both。此方法的弊端在于增加了无意义的结构元素。


<style type=”text/css”>
<!–
 *{margin:0;padding:0;}
 body{font:36px bold; color:#F00; text-align:center;}
 #layout{background:#FF9;}
 #left{float:left;width:20%;height:200px;background:#DDD;line-height:200px;}
 #right{float:right;width:30%;height:80px;background:#DDD;line-height:80px;}
 .clr{clear:both;}
–>
</style>
<div id=”layout”>
 <div id=”left”>Left</div>
 <div id=”right”>Right</div>
 <p class=”clr”>
</div>

二、使用overflow属性

此方法有效地解决了通过空标签元素清除浮动而不得不增加无意代码的弊端。使用该方法是只需在需要清除浮动的元素中定义CSS属性:overflow:auto,即可!”zoom:1″用于兼容IE6。

<style type=”text/css”>
<!–
 *{margin:0;padding:0;}
 body{font:36px bold; color:#F00; text-align:center;}
 #layout{background:#FF9;overflow:auto;zoom:1;}
 #left{float:left;width:20%;height:200px;background:#DDD;line-height:200px;}
 #right{float:right;width:30%;height:80px;background:#DDD;line-height:80px;}
–>
</style>
<div id=”layout”>
 <div id=”left”>Left</div>
 <div id=”right”>Right</div>
</div>

三、使用after伪对象清楚浮动

该方法只适用于非IE浏览器。具体写法可参照以下示例。
使用中需注意以下几点。
一、该方法中必须为需要清除浮动元素的伪对象中设置height:0,否则该元素会比实际高出若干像素;
二、content属性是必须的,但其值可以为空,蓝色理想讨论该方法的时候content属性的值设为”.”,但我发现为空亦是可以的。

<style type=”text/css”> 
<!– 
 *{margin:0;padding:0;} 
 body{font:36px bold; color:#F00; text-align:center;} 
 #layout{background:#FF9;} 
 #layout:after{display:block;clear:both;content:”";visibility:hidden;height:0;} 
 #left{float:left;width:20%;height:200px;background:#DDD;line-height:200px;} 
 #right{float:right;width:30%;height:80px;background:#DDD;line-height:80px;} 
–> 
</style> 
<div id=”layout”> 
 <div id=”left”>Left</div> 
 <div id=”right”>Right</div> 
</div>
哟?不错哎 订阅飞鱼的RSS Feeds 回去慢慢看^_^

您可能还对这些日志感兴趣

该文章已经被摸了74次。 共有 2 条评论

  1. 1. seri 2010年6月12日 at 17:17

    对IE8貌似还是不奏效 – - 偶阴错阳差当上了前端开发啊,还望多多指导。

    回复

    飞鱼 Reply:

    哦 这篇文章好久前更新了,可以用下面的方法:
    .clearfix:after {content:”\0020″; display:block; height:0; clear:both; visibility:hidden;}
    .clearfix { zoom:1;}

    回复

发表评论

评论仅支持“a、abbr、strong、em、blockquote、code”几个简单的标签

Who am I ?

飞鱼,男,浙江人士。
非专业前端设计师兼程序员。
目前在 淘宝-淘日本 工作

最新在啃

actionscript javascript

新鲜的肉

最新评论

  • 小米: 您在我那留言“吓一跳”,哪里吓到了哦?呵呵
  • 小鑫: notpad++ …… 少了”e”
  • Bee君: 这些真的太深奥…..
  • 任鸟飞: 新浪微博 短网址 有白名单之多,令我很郁闷,打算弃用新浪微博。
  • 葉子: 我是更土的人,告诉我吧

订阅-rss-永久链接

MT
备案号:浙ICP备09020026号