css浮动

来源:互联网 发布:天正建筑2014 for mac 编辑:程序博客网 时间:2024/05/29 19:34
文档流

是浏览器解析网页的一个重要概念。对于一个XHTML网页,body元素下的任意元素,根据其先后顺序,组成了一个上下关系,这便是文档流。浏览器根据这些元素的顺序去显示它们在网页中的位置。文档流是浏览器的默认显示规则。

Float

float :none| left | right

  • 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
  • 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。
请看下图,当把框 1 向右浮动时,它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘:
例1:
如果把所有三个框都向左移动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。

例2:
再请看下图,当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了框 2,使框 2 从视图中消失。

例3:
如下图所示,如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间。

例4:
如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”:

例5:

  • 浮动元素会生成一个块级元素,而不论它本身是何种元素。
代码:
  1. <style type="text/css">
  2. <!--
  3.         span{ float:left; width:100px; height:100px; background-color: #FFCCCC}
  4. -->
  5. </style>
  6. </head>

  7. <body>
  8. <span>
  9.         内联元素浮动会变成块
  10. </span>
  11. </body>
复制代码
效果:
解释:内联元素无法设置宽高,但是加了float后便可以,说明浮动的元素都是块。
  • 如果未给浮动元素设置宽度,那么其宽度为内容宽度。
代码:
  1. <style type="text/css">
  2. <!--
  3.         div{ float:left;background-color: #FFCCCC}
  4. -->
  5. </style>
  6. </head>

  7. <body>
  8. <div>
  9.         浮动元素的默认宽度看内容
  10. </div>
  11. </body>
复制代码

效果:
解释:div是个块级元素,默认宽度为父级容器的100%,但是加上浮动后,宽度变的符合内容,可见,浮动的元素,如果不设置宽度,那么它会根据内容自适应宽度。

清除浮动 clear
clear :none| left | right | both
由于浮动的元素会对其下的元素产生影响,所以,可以给其下元素清除浮动。
上例的解决办法是给蓝色块加clear:left或者clear:both

浮动中常见的问题
  • IE6 margin加倍
产生原因:同方向定义了float和margin,如margin-left,float:left
解决:display:inline。内联元素没有加倍问题
  • IE6的3像素问题
    产生原因:左边加float,右边没加。
解决:都加浮动
  • 内层浮动,外层不能自动扩高
产生原因:内层元素浮动,脱离文档流,外层等同于没有包含内容。
解决:内部清除浮动。或者overflow:hidden;zoom:1;
扩展:haslayout(拥有布局)
一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。一些元素默认会有一个布局,例如img或者input。
大部分的 IE 显示错误,都可以通过激发元素的 haslayout 属性来修正。可以通过设置 css 尺寸属性(width/height)等来激发元素的 haslayout,使其“拥有布局”。如下所示,通过设置以下 css 属性即可。   
* display: inline-block   
* height: (任何值除了auto)   
* float: (left 或 right)   
* position: absolute   
* width: (任何值除了auto)   
* writing-mode: tb-rl   
* zoom: (除 normal 外任意值)   
Internet Explorer 7 还有一些额外的属性(不完全列表):   
* min-height: (任意值)   
* max-height: (除 none 外任意值)   
* min-width: (任意值)   
* max-width: (除 none 外任意值)   
* overflow: (除 visible 外任意值)   
* overflow-x: (除 visible 外任意值)   
* overflow-y: (除 visible 外任意值)   
* position: fixed   
其中 overflow-x 和 overflow-y 是 css3 盒模型中的属性,目前还未被浏览器广泛支持。
  • 浮动元素自动换行,被卡住问题
解决:固定宽高,overflow:hidden
  • 浮动的列表,图标不出现
解决:将小图标用做li的背景
0 0
原创粉丝点击