CSS布局浮动(float)和定位(position)属性的区别:
1、postion:relative是子块级元素面向父级元素的相对定位,定位关键字使用left/right/top/bottom。兄弟块元素之间相对进行定位,但是position移动后,原位置依然保留。而且随后的兄弟块元素定位基于被移走前的位置。
2、float:right/left是子块级元素流集合面向父级元素的定位,定位的关键词使用margin/padding。兄弟块元素之间进行相对的定位均基于移动后的新位置进行重新渲染,可以重叠,原位置被清空。
二者之中最大的差别就是位置保留。
3、同时应用position: absolute和float: left会导致清除浮动无效(position: relative则可以清除浮动)。
常用的清除浮动的方法有两种:
通过在容器中添加一个标签,设置该标签的样式为 clear: both
容器设置overflow: hidden
<div style="background: #fffwidth: 100%overflow: hidden">
<div style="float: leftposition: absolute">我是DIV</div>
<div style="clear: both"></div>
<div>
效果:
float和position这两者并没有孰好孰不好的问题,两者按需使用,各得所需的效果。float从字面上的意思就是浮动,这种在印刷排版之类中可能解释的更加贴切。float能让元素从文档流中抽出,它并不占文档流的空间,典型的就是图文混排中文字环绕图片的效果了。并且float这也是目前使用最多的网页布局方式。不过需要注意的是清除浮动是可能需要注意的地方。并且如果要考虑到古老的IE6之类的还会有一些bug诸如双边距等等问题。
而position顾名思义就是定位。有以下这几种属性:static(默认),relative(相对定位),absolute(绝对定位)和fixed(固定定位)。其中static和relative会占据文档流空间,他们并不是脱离文档的。absolute和fixed是脱离文档流的,不会占据文档流空间。
自然,对CSS的使用是必不可少的了。我们在CSS中很多时候会用到浮动来布局。常见的有float:left或者float:right。简单点来说,前者是左浮动(往左侧向前边的非浮动元素飘,全是飘得元素的话,就按照流式来浮动从左到右,放不下则换行),后者是右浮(往右飘)动。 上述这就是我们对于CSS中的浮动的最初步的认识了。下面我就对float进行了一些简单的研究。有几点需要注意:1、浮动元素会被自动设置成块级元素,相当于给元素设置了display:block(块级元素能设置宽和高,而行内元素则不可以)。2、浮动元素后边的非浮动元素显示问题。3、多个浮动方向一致的元素使用流式排列,此时要注意浮动元素的高度。4、子元素全为浮动元素的元素高度自适应问题。 定义为float以后,将自动变为块级元素块级元素和行内元素区别:简单的来说,块级元素独占一行,可以设置宽高以及边距;行内元素不会独占一行,设置宽高行距等不会起效。常见的块级元素有:h1~h6、p、div、ul、table;常见的行内元素有:span、a、input、select等。浮动元素后的非浮动元素问题测试代码:<div style="width: 500pxheight: 500pxborder: 1px solid bluebackground-color: blue"><div style="float: leftwidth: 200pxheight: 200pxborder: 1px solid Aquamargin: 10px 0pt 0pt 10pxbackground-color: green">浮动DIV</div><div style="background-color: redborder: 1px solid greenwidth: 300pxheight: 150px">跟在浮动元素(块元素)后边的DIV</div><span style="background-color: redborder: 1px solid greenmargin: 0pt 0pt 0pt -50px">跟在浮动元素(行内元素)后边的span</span></div>结果:结果如上图所示。紧跟在浮动div后边的div背景以及边框被压在了底下,内容却没有;而span整体都在浮动div之上显示。 但是,并非在所有情况下都是这样。这里我们不得不考虑一下浏览器的兼容性问题,尤其是在天朝IE6依旧泛滥的大形势之下 :)上述代码在IE6下面展现时:浮动元素没有压在非浮动div之上,反而把span压住了。多个并列,同向,浮动的元素的高度不一致问题多个同方向浮动元素若是高度不一致的话,很可能会得到意外的效果,跟你想要的布局差别很大。多个同方向浮动元素一般是按照流式布局,一行满了则自动换行。理论效果类似于下图: 上述情况往往就是我们所期望得到的结果。但是,通常我们的结果也会是这样: 很多时候,在我们不经意间就会出现类似意外。排列到元素7的时候,一行已经显示不下了,所以要换行,但此处换行并不是从行头开始,而是从元素5那开始,因为元素5比元素6高很多导致。子元素全为浮动元素高度自适应问题由于元素浮动后脱离了文档流,所以父元素是无法根据元素来自适应的。 关于浮动的情况还有很多方便需要介绍,留到下篇在详述吧 :)