.clear:after{content:''display:blockclear:both}
.clear{zoom:1}//这个是为了兼容IE
然后父级添加一个class=“clear”即可
浮动元素可以相互嵌套,嵌套规律与流动元素的嵌套相同。浮动的包含元素(父元素)总会自动调整自身的高度和宽度以实现对浮动元素的包含。
我们来看一个例子:
浏览器效果图:
这时会发现父元素会自动调整自身的大小来包含子元素。
如果包含元素定义了高度和宽度则他不会随子元素的大小而自动调整自身显示区域来适应子元素的显示。注意,在IE6及更低版本浏览器中包含框仍然能够自动调整自身大小来适应子元素的显示大小,不过在IE7版本中微软纠正了这个不符合标准的显示方法。如下
示例:
浏览器效果图:
默认状态下溢出不隐藏,我们可以添加 样式 overflow:hidden隐藏多余的部分或overflow: scroll多余部分显示滚动条。
如果把浮动元素嵌入到流动元素之内,则父元素不能够自适应子元素的高度,
如下示例:
浏览器效果图:
在上图中可以看到包含元素div并,没用显示。原因就是包含元素没有适应子元素的高度,而是根据自身定义的属性以独立的形式显示(父元素没有被撑开,仅收缩成一条直线显示)。所以,在应用混合嵌套式,要预测到浮动与流动混合布局时会出现的各种怪现象,并积极做好兼容处理。
解决方法:可以在包含元素内的最后一行添加一个清除元素,强制撑开包含元素,使其包含浮动元素。
示例如下:
浏览器效果图:
本文章参考书籍:HTML5+CSS3+JavaScript从入门到精通(标准版)未来科技 编著
不知道你为什么要“float: left”以后又“clear: left”,这样做似乎不怎么合理,一般情况下,a和b 左浮动,c右浮动,而且宽度不满大容器的情况下,应该用一个容器将a和b包起来,结构上更加合理:
<div id="content">
<div class="l_box">
<div id="a"></div>
<div id="b"></div>
</div>
<div id="c"></div>
</div>
css:
/* 定义容器宽度,清除容器内的浮动 */
#content{width:500pxzoom:1}
#content:after{content=" "height:0display:blockclear:both}
.l_box{width:204pxzoom:1float:left}
.l_box:after{content=" "height:0display:blockclear:both}
/* 设置边框 宽度 浮动 */
#a,#b,#c{border: 1px solid #000width:100px}
#a,#b{float:left}
#c{float:right}