博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于css清除浮动的补充
阅读量:5153 次
发布时间:2019-06-13

本文共 2535 字,大约阅读时间需要 8 分钟。

之前写过关于清除浮动的一些方法介绍---(),最近在学习的过程中又翻阅到了不少好的文章---(如)----

因此重头审视之前写的文章的时候,发现漏洞百出。特此加上一篇简单的补充作为自己的学习笔记:

一、仍然以原来代码为例(如下):

子元素1
子元素2
.block1{
width:200px; height:200px; background: #CBA627; float:left; margin-right:10px;}.block2{
width:200px; height:100px; background:#009900; float:left;}

(1)首先,针对之前提到的:after方法(即原样式中添加新样式如下):

.container:after{
content:" 20";visibility:hidden;display:block;clear:both;height:0;}

存在两个比较模糊的地方,一个是理解不准确,不深入;另一个则是margin-bottom会引发问题。

关于第一个理解不准确,之前是称".container:after"为伪类,其实应该是伪元素才对。{content:"20";visibility:hidden;height:0;}很明显的表明了这是一个在.container尾部添加的一个内容为20 的元素,且为了不影响父元素内容被隐藏,高度也被设置为0(其实可以理解为在父元素尾部新加了一个高度为0的"<div>20</div>")。{clear:both;display:block;}则为该元素添加了最终要的clear属性,并设置为block。整个样式最后的结果就相当于添加了一个"<div style="clear:both;display:block;height:0">20</div>",.container:after指的就是这个"div"。

关于第二个margin-bottom会引发问题是指,当.container内以浮动子元素结尾,而且浮动子元素具有margin-bottom值时,margin-bottom的数值会在ie6/7/8中失效。解决方法则是取消:after方法,代之以添加空标签(clear:both)的方法。

(2)对于清除浮动的方法总结过于简单,一是不全面,而是不深入。上文中提到的参考文章(),我觉得对于浮动问题的讲解比较深入,而且对方法的整理和分类也比较合理。尤其是将方法归类为“清除”和“闭合”。

清除:主要是指通过添加空元素(并保证该元素display:block;clear:both;)来实现。其实通过对.container:after的解释可以看出,该方法本质上仍然是添加元素来清除浮动。

闭合:是指,不添加额外的元素或内容,通过设置父元素来实现。有一种方法,之前的文章已经提到,即.container{overflow:hidden;zoom:1},但是参考文章还提到了是给父元素添加display:table的方法和添加overf:auto的方法。

综上,如果用例子来表示分类及分类中的方法的话应该如下所示(以html文档和css为基础):

清除类方法:1.添加空标签:<div class="clear"></div>  .clear{ clear:both;}

                                     或者<br class="clear"/>  .clear{ clear:both;}

                  2.使用:after伪元素:.container:after{ content:".";visibility:hidden;height:0;  display:block;clear:hidden;}  .container{zoom:1}(为了兼容ie6)

闭合类方法:1.使用overflow:.container{ overflow:hidden;zoom:1;}

                                        或者.container{ overflow:auto;zoom:1;}

                  2.使用display: .container{ display:table;}

此外,还有一种方法没有把它归类到任何一类,即:给父元素添加浮动的方法---如:.container{ float:left;}。因为该方法在文档结构比较复杂的时候会对文档产生极坏的影响,因此是最不推荐的一个,忽略之。

二、

方法多,自然就要权衡比较一下,采取最优方案。其实,着眼于两个“类”的时候,优劣势就会显得比较明显。

清除类方法  优势:比较简单,便于掌握使用。劣势:会在文档中添加无意义的标签元素。

闭合类方法  优势:不对原文档的html结构产生影响,书写也比较简单。劣势:要考虑到兼容,而且该类中的方法都会对父元素的样式或文档表现产生影响。

因此,实际上闭合类的方法相对而言,是不推荐使用的。反过来再看清除类方法中的伪元素方法,它既没有添加多余的东西,也没有改变父元素的display或者overflow而对其产生未知的影响,只是需要用到zoom来兼容一下。因此,该方法应该算是比较好的解决方法,推荐使用。本文中使用的伪元素方法的写法是比较常见的一种。在文中提到的参考文章中,对该方法又进行了优化,可以参考一下。

 

三、

要注意的是,上文中关于zoom提到了haslayout这一ie特有的概念。实际上,解决浮动的第二类方法都是和这一概念有关的,而且关于ie6的很多bug也是因为这个layout而产生的。

详细的了解一下haslayout会让你对于ie的一系列问题尤其是ie6bug会有更深的理解和更多的解决方法。

关于haslayout参考文章:

转载于:https://www.cnblogs.com/qiwenke/archive/2012/10/18/2728798.html

你可能感兴趣的文章
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Attributes.Add用途与用法
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
Swift 入门之简单语法(六)
查看>>