今天在做wordpress主题修改时,遇到一个很奇怪的问题,父级元素背景颜色无法显示。排查了很久终于找到原因:使用div+css布局时,经常会使用到float,而我们在使用时经常会忘记清除浮动,这样就会造成前面我们提到的现像,今天就介绍一下三种解决方式解决这个问题:
下面的代码是未清除浮动属性前的源代码,这段代码的运行结果是无法显示父级元素浅黄色背景:
-
- <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:rightright;width:30%;height:80px;background:#DDD;line-height:80px;}
- –>
-
- </style>
- <div id=”layout”>
-
- <div id=”left”>Left</div>
- <div id=”rightright”>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:rightright;width:30%;height:80px;background:#DDD;line-height:80px;}
-
- –>
- </style>
-
- <div id=”layout”>
- <div id=”left”>Left</div>
- <div id=”rightright”>Right</div>
- </div>
第二种解决方式:使用空标签清除浮动。 我用了很久的一种方法,空标签可以是div标签,也可以是P标签。我习惯用
,够简短,也有很多人用,只是需要另外为其清除边框,但理论上可以是任何标签。这种方式是在需要清除浮动的父级元素内部的所有浮动元素后添加这样一个标签清除浮动,并为其定义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:rightright;width:30%;height:80px;background:#DDD;line-height:80px;}
- .clr{clear:both;}
-
- –>
- </style>
-
- <div id=”layout”>
- <div id=”left”>Left</div>
-
- <div id=”rightright”>Right</div>
- <p class=”clr”> </p>
- </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:rightright;width:30%;height:80px;background:#DDD;line-height:80px;}
- –>
-
- </style>
- <div id=”layout”>
-
- <div id=”left”>Left</div>
- <div id=”rightright”>Right</div>
- </div>
按上面三种方法处理后,float被清除的效果。
以上三种方法各有各的优点,可以根据实际需求进行修改,但是总的来说第三种方法更为合适。
注:在使用float属性时一定要保持一个良好的书写代码的习惯清除float。

2012年6月10日 下午12:01 沙发
说到代码,头疼!!!!!!!!!
2012年6月10日 下午2:08 1层
@站长 我也不喜欢写,但是很多时候没有办法,只能自己写。