浮动元素是如何定位的
当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移到碰到了所处的容器的边框,或者碰到了另外一个浮动的元素。
浮动属性
1.只有横向浮动,并没有纵向浮动。
2.当元素应用了float属性后,将会脱离普通流,其容器(父)元素将得不到脱离普通流的子元素高度。
3.会将元素的display属性变更为block
**备注:**如果要在JavaScript中通过[element.style
](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/style)对象来修改float属性,那么你必须使用[element.style
](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/style)对象的cssFloat
属性来操作。另外还要注意到在 Internet Explorer 8 和更老的IE当中,要使用styleFloat
属性。这是DOM驼峰命名和CSS所用的连字符分隔命名法对应关系中的一个特例。
(这么做的原因是在JavaScript中"float"是一个保留字,
因为同样的原因,"class"被改成了"className" 、"for"被改成了"htmlFor"。
4.浮动元素的后一个元素会围绕着浮动元素(典型运用是文字围绕图片),与应用了position的元素相比浮动元素并不会遮盖后一个元素。
5.浮动元素的前一个元素不会受到任何影响(如果你想让两个块状元素并排显示,必须让两个块状元素都应用float)
与position的兼容性问题
1)元素同时应用了position: relative、float、(top / left / bottom / right)属性后,则元素先浮动到相应的位置,然后再根据(top / left / bottom / right)所设置的距离来发生偏移。
2)元素同时应用了position: absolute及float属性,则float失效。
3)第一个元素应用了position之后会覆盖着接下来的float元素(如果两个元素所处的位置相同)
如果你不将float的元素的position设置成relative的话,你想通过设置float元素的z-index
来的达到覆盖position:absolute是无效的。同理,float元素下面存在position: absolute的子元素
,如果你不将float的元素的position设置成relative的话,absolute元素是不会定位到float元素的
需要重点看下z-index章节
浮动元素在浮动的时候,其margin不会超过包含块的padding这一点很简单,浮动元素的浮动位置不能超过包含块的内边界
浮动元素margin和负元素的padding不会合并。正常的也不会
浮动元素的延伸性
元素被设置成浮动后,该元素会进行延伸进而包含其所有浮动的子元素。
比如如元素不是浮动的,子元素浮动,子元素比较高,则子元素会超出父元素高度,如果父元素设计了float属性,则会包裹所有子元素。
修改后:包裹元素
浮动元素重叠问题
1、行内元素与浮动元素发生重叠,其边框,背景和内容都会显示在浮动元素之上
2、块级元素与浮动元素发生重叠时,边框和背景会显示在浮动元素之下,内容会显示在浮动元素之上
常用的清除浮动的方法有两种:
1)通过在容器中添加一个标签,设置该标签的样式为 clear: both
2)容器设置overflow: hidden或auto
<div style="background: #fff; width: 100%; overflow: hidden;">
<div style="float: left; position: absolute;">我是DIV</div>
<div style="clear: both;"></div>
<div>