css清除浮动的几种方式,哪一种最合适?

细心的人可能发现了,写的导航条中存在一个问题,那就是使用了float以后,父级盒子的高度变为0了。css

咱们来写一个例子来看一下,建立一个父级div,并设置border属性,而后下边建立两个子元素span,并设置浮动。具体代码以下所示:浏览器

由上图能够看出,在给span添加了float以后,父级元素div的高度就变成了0。咱们有如下几种方式来解决这个问题布局

(1)给父级元素单独定义高度(height)优化

原理:若是父级元素没有定义高度,父元素的高度彻底由子元素撑开时,父级div手动定义height,就解决了父级div没法自动获取到高度的问题。 spa

优势:简单、代码少、容易掌握。code

缺点:只适合高度固定的布局,要给出精确的高度,若是高度和父级div不同时,会产生问题。对于响应式布局会有很大影响。blog

(2)在标签结尾处加空div标签 clear:bothit

原理:添加一个空div,利用css提升的clear:both清除浮动,让父级div能自动获取到高度。io

优势:简单、代码少、浏览器支持好、不容易出现怪问题class

缺点:很多初学者不理解原理;若是页面浮动布局多,就要增长不少空div,不利于页面的优化。

(3)父级div定义 伪类:after 和 zoom    ------------比较支持

原理:元素生成伪类的做用和效果至关于方法2中的原理,可是IE8以上和非IE浏览器才支持:after,zoom(IE转有属性)可解决ie6,ie7浮动问题

优势:浏览器支持好、不容易出现怪问题,写法是固定的,不理解也能够直接复制使用;(小编大力推荐使用此种方法,简单便捷,只需添加一个class便可解决问题)

缺点:css代码多、很多初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。

4)父级div定义 overflow:hidden

优势:简单、代码少、浏览器支持好

缺点:不能和position配合使用,由于超出的尺寸的会被隐藏。(不建议使用此种方式,可能会影响页面元素布局)

5,父级div定义 overflow:auto

<style type="text/css"> .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:auto} .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} .left{float:left;width:20%;height:200px;background:#DDD} .right{float:right;width:30%;height:80px;background:#DDD} </style> <div class="div1"> <div class="left">Left</div> <div class="right">Right</div> </div> <div class="div2"> div2 </div> 

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
优势:简单、代码少、浏览器支持好
缺点:内部宽高超过父级div时,会出现滚动条。
建议:不推荐使用,若是你须要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

好了,本篇文章就给你们说到这里,你们本身下来能够这几种方式都试一试,本身感受下哪一种更适合本身,小编一直使用的是第3种方式。

相关文章
相关标签/搜索