对css float 浮动的学习心得

| 阅读数:--次| 作者:html,css
摘要:css浮动详解 清除浮动的方法及优缺点 清除浮动原理

css float浮动详解

@(css float)[hasLayout|clear float|妙瞳]

css float的定义和用法

float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。
如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。
注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。

默认值:none;
继承性:no;
版本:CSS1
JavaScript 语法:object.style.cssFloat="left";

可能的值

值						描述
left					元素向左浮动。
right					元素向右浮动。
none					默认值。元素不浮动,并显示在其在文本中出现的位置。
inherit					规定应该从父元素继承 float 属性的值。

简单示例


这里用到了float:left;我们把 ul 元素和 a 元素浮向左浮动。

clear float

上述事例表明,如果内层div浮动的话,那么在没有给父div设置高度,padding,margin的情况下,父的高度为0,而我们知道,父容器的高度可以被内层的内容的高度撑大,这就是由于float造成的高度塌陷问题。

假如我们给父容器设置了高度的情况会是如何?
代码以及效果图如下:



我们发现,当给父容器设置高度时,高度不为0,而是为我们设置的200px;

假如我们给父容器设置margin和padding,情况又是如何?
代码以及效果图如下:


上述事例表明,如果我们没有给父div设置高度,只设置padding和margin,如效果图所示,实际上的高度等于上下border,加上上下padding,加上margin,而content的高度还是为0,还是因为float的原因,高度塌陷。

针对这种情况,clear float方法如下:
方法一:添加新的元素标签 ,应用 clear:both;
代码及效果图如下:



上述事例表明,当用clear:both;父div的高度由子层的高度撑大,content的高度变为50px;而且padding,margin都不受影响。此方法是优缺点如下:

方法二:父级div定义overflow:auto/hidden;(这里的父级div指div#wrap)
代码与效果图如下:


上述事例表明,通过方法二,也可以实现效果,content的高度也变为了50px,padding,margin都不受影响。

在创建了 Block Formatting Context 的元素中,其子元素会一个接一个地放置。垂直方向上他们的起点是一个包含块的顶部,两个相邻的元素之间的垂直距离取决于 'margin' 特性。在 Block Formatting Context 中相邻的块级元素的垂直边距会折叠(collapse)。

"float"的值不是"none"
"overflow"的值不是"visible"
"display"的值是"table-cell"
"table-caption",或"inline-block"
"position"的值既不是"static"也不是"relative"

所以,使用overflow属性来清除浮动需注意,overflow属性共有三个属性值:hidden,auto,visible,scroll,inherit。我们可以使用hidden和auto值来清除浮动,但不能使用visible值,这个值将无法达到清除浮动效果,atuo和hidden两个值都ok,而且在IE6中都需要触发 hasLayout ,例如 zoom:1;
用overflow:auto;方法的优缺点如下:

方法三:父元素也设置浮动
代码与效果如下:

方法五:使用:after 伪元素
需要注意的是 :after是伪元素(Pseudo-Element),不是伪类(某些CSS手册里面称之为“伪对象”)。
由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
该方法源自于: How To Clear Floats Without Structural Markup http://snipplr.com/view/86/clear-floats-without-structural-markup/
代码及结果如下:


具体可以参考链接:http://www.w3school.com.cn/cssref/pr_gen_content.asp

结语

本篇文章涉及到hasLayout,BFC等,这里由于水平有限就不一一讲了,等研究研究在另外开篇探讨哟。
今天就写到这里了,假如有错误的地方,欢迎大家指出哟,谢谢!-----妙瞳

返回顶部
学到老代码浏览 关闭浏览