• 漫谈清除浮动


    漫谈清除浮动

    最开始学习float,自然的就了解到了如何清除浮动带来的影响。清除浮动有很多种方法,但是对每一种适用的场合及优缺点却不甚了解。在一次面试中问到,除了clear还有哪些清楚浮动的方法,当时回答也可以利用伪元素,对方接着问到,原理是什么(答的不太好)。要知其然还要知其所以然,所以决心把每种浮动都搞清楚。

    1. 现象

     

    HTML代码:

    1 <div class="outer">
    2     <div class="div1">1</div>
    3     <div class="div2">2</div>
    4     <div class="div3">3</div>
    5 </div>
    6 <div class="footer"></div>

    css样式:

    1 .outer{border: 1px solid #ccc;background:#ccc;color: #fff;}
    2 .div1{ 80px;height: 80px;background: red;float: left;}
    3 .div2{ 80px;height: 80px;background: blue;float: left;}
    4 .div3{ 80px;height: 80px;background: pink;float: left;}
    5 .footer{background-color: #005FC3;  300px; height: 100px;}

    这里没有给最外层的DIV.outer 设置高度,现在只剩一条由上下边框贴合组成的线,这是因为它里面的元素全部浮动,导致父元素没有被撑开。而且DIV.footer也跑到三个浮动元素的底下。这是由浮动造成的。下面看解决方法。

    2. 解决方法

    2.1 clear:both

     HTML代码:

    1 <div class="outer">
    2     <div class="div1">1</div>
    3     <div class="div2">2</div>
    4     <div class="div3">3</div>
    5     <div class="clear"></div>
    6 </div>
    7 <div class="footer"></div>

    CSS样式:

    1 .outer{border: 1px solid #ccc;background:#ccc;color: #fff;}
    2 .div1{ 80px;height: 80px;background: red;float: left;}
    3 .div2{ 80px;height: 80px;background: blue;float: left;}
    4 .div3{ 80px;height: 80px;background: pink;float: left;}
    5 .footer{background-color: #005FC3;  300px; height: 100px;}
    6 .clear{clear:both;}

     HTML代码:

    1 <div class="outer">
    2     <div class="div1">1</div>
    3     <div class="div2">2</div>
    4     <div class="div3">3</div>
    5 </div>
    6 <div class="clear"></div>
    7 <div class="footer"></div>

    原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度。
    注意:利用clear:both清除浮动,这里将新添加的div放在不同的位置有不同的效果。这个方法用来清除同级元素之间的影响,对父级元素则要用以下方法。
    缺点:添加了无意义的元素。

    2.2 overflow(父级div定义 overflow: auto/hidden)

    图略,效果当然实现了!
    HTML代码:

    1 <div class="outer over-flow">outer //父级元素overflow: auto
    2     <div class="div1">1</div>
    3     <div class="div2">2</div>
    4     <div class="div3">3</div>
    5     <div class="clear"></div>
    6 </div>
    7 <div class="footer">footer</div>

    CSS样式:

    1 .over-flow {
    2         overflow: auto;
    3         zoom: 1;             //zoom: 1;  处理兼容性问题
    4     }

    原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。
    优点:简单、代码少、浏览器支持好。
    缺点:超出的尺寸的会被隐藏(hidden)/内部宽高超过父级div时,会出现滚动条(auto)。

    2.3 :after 方法:(注意:作用于浮动元素的父亲)

    图略。
    CSS 样式:

    1 .outer {zoom:1;} //兼容IE
    2 .outer :after {clear:both;content:'';display:block; 0;height: 0;visibility:hidden;}

    原理:这种方法清除浮动是现在网上广泛使用的一种清除浮动,是利用:after和:before来在元素内部插入两个元素块,从面达到清除浮动的效果。其实现原理类似于clear:both方法,只是区别在于:clear在html插入一个div.clear标签,而outer利用其伪类clear:after在元素内部增加一个类似于div.clear的效果。IE8以上和非IE浏览器才支持:after。推荐使用,建议定义公共类,以减少CSS代码。
    优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
    缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。

  • 相关阅读:
    TreeSet——实现Comparable接口并重写CompareTo()方法
    HashMap的四种遍历方式
    HashMap—— values() remove方法 containsKey()方法 containsValue()方法
    HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
    CSS——font使用方法
    css——选择器
    Eclipse怎么改变工程保存路径
    jsp其实是一个java类
    HTML——b i del a p img h1 h2 h3 h4 h5 h6 hr ol ul 标签的使用方法详解
    ACM算法练习-——ZJU1164-Software CRC
  • 原文地址:https://www.cnblogs.com/destinyruru/p/5686445.html
Copyright © 2020-2023  润新知