css中float的前世今生

html-css012

css中float的前世今生,第1张

1,浮动的历史

在早期网页制作过程中,为了达到图片word文档那样的文字环绕效果,不至于图片和文字不在一行显示,图片占据一行,文字占据一行,这样的样式并不符合大众的审美观,浪费空间,所以w3c就创建了float这个css属性。

2,浮动的包裹性和破坏性

破坏性是指子级元素设置浮动后将会跳出父级元素,父级元素将不被浮动元素所撑开,除非清除浮动带来的影响。

包裹性是指子级元素设置浮动后,并且父元素已经被清除浮动后将会将子元素包裹住,就像inline-block一样。

4,浮动在布局中的应用

(1),双飞翼布局

双飞翼布局就是利用float和margin负值相结合的方式,将center定位到最中间,难点在于margin单位百分比的理解。

(2),圣杯布局

圣杯和双飞翼区别:

二者都是三栏自适应布局方案,圣杯布局是需要结合相对定位,用到left属性,而双飞翼布局只需要使用浮动和margin定位,前者三栏布局是每栏相互独立,而后者是center占据是100%,left和right是浮在center上的。

(2),两列布局

如图五图六所示,当左侧div左浮动,右侧div将会自动适应余下的宽度,当界面大小发生改变时,右侧div同样会随着变化,如果想让左右div中间有一个间距的话,我们可以用右侧div设置一个margin-left为:左侧div的宽度+间距。

如果想让左侧右侧同时自适应的话,我们可以让右侧元素BFC化,此时左侧元素div的marin-left才会有效,如果右侧div不BFC化的话,属于正常流,而浮动已经脱离正常流,所以此时它的margin-left是无效的。

5,清除浮动带来的影响的方法

(1),使用clear:both

.father:after{/*IE7和IE6不识别*/

content:''

display:block

clear:both

overflow:hidden

height:0

}

.father{

*zoom:1/*兼容IE7*/

}

(2),内部使用空标签

div{clear:both}

缺点是多了一个空标签,无意义。

(3),使用BFC

在子元素中使用overflow,position,inline-block,tabel-cell

(4),使用table

.father:after{/*IE7和IE6不识别*/

content:''

display:table

clear:both

}

.father{

*zoom:1/*兼容IE7*/

}

这个东西叫浮动。

顾名思义,就是让设置的标签产生浮动效果,就是脱离原来页面的标准输出流。

正常情况下,HTML页面中块元素都是从上倒下排列的。如果想实现左右结构。

float的一种选择(当然还有其他方法)。

比如

<div style="widht:500px">

<div style="float:leftwidth:200px">左</div>

<div style="float:leftwidth:200px">右</div>

</div>

这样,这个两个DIV标签就在同一行上了(同时靠左),当然有个前提,就是他们俩的父元素的宽度要至少大于400px,这样才能在同一行上。这个结果是两个DIV的右侧会空出100PX的空白

<div style="widht:500px">

<div style="float:leftwidth:200px">左</div>

<div style="float:rightwidth:200px">右</div>

</div>

以上写法,也是在同一行。不同的是,一个靠左,一个靠右。

这里边的两个DIV的中间有100PX的空白。

需要注意的是,当标签使用了float属性后,就脱离了标准输出流,就不受页面约束了。这样不方便,也不利于页面布局。

所以,一般浮动之后要清除浮动。

<div style="widht:500px">

<div style="float:leftwidth:200px">左</div>

<div style="float:rightwidth:200px">右</div>

<span style="clear:both"></span>

</div>

这样,页面整体的布局结构就基本上没有被破坏了。

css清除浮动float的三种方法总结:

不清除浮动的话,浮动层后面的非浮动内容就有可能被浮动层所覆盖,造成版面错乱,所以必须清除浮动。除非浮动层所在的位置是有固定的高度的,也就是说不管是否浮动它所占用的区域都不变,这样就无需清除。比如:

<div> <div style="float:leftwidth:100pxheight:100pxbackground-color:#f00"></div></div><div style="width:200pxheight:200pxbackground-color:#00f"></div>

可以看到蓝色框会被红色框覆盖(IE6-9中则不会,因为它不是标准浏览器)。清除浮动以后就不会了:

<div> <div style="float:leftwidth:100pxheight:100pxbackground-color:#f00"></div> <div style="clear:both"></div></div><div style="width:200pxheight:200pxbackground-color:#00f"></div>

或者给浮动层预留位置:<div style="width:100pxheight:100px"> <div style="float:leftwidth:100pxheight:100pxbackground-color:#f00"></div></div><div style="width:200pxheight:200pxbackground-color:#00f"></div>