CSS学习(二)—浮动


一、 定义

   浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 

解决的问题:如何在一行显示多个div元素

二、 浮动与不浮动区别    

1           


2

 

区别

   不浮动的框是由上往下独占一行的,而浮动的框是紧靠着排列的。图2中d1、d2、d3都是向左浮动的,所以先把d1放在紧靠着父框摆放,然后把d2紧靠着d1摆放,最后d3紧靠着d2摆放。向右浮动亦与之类似。

语法:

float : none | left |right

参数:

none : 对象不浮动

left : 对象浮在左边

right : 对象浮在右边


三、浮动实例

div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的标准。如下图:


   可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为div元素是独占一行的。   

   浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。

情况1div2左浮动

    假设上图中的div2浮动,那么它将脱离标准流,但div1、div3、div4仍然在标准流当中,所以div3会自动向上移动,占据div2的位置,重新组成一个流。


div1、div3、div4依次排列,成为一个新的流。又因为浮动是漂浮在标准流之上的,因此div2挡住了一部分div3,div3看起来变“矮”了。

下图是d1d2d3左移时出现的两种情况

 1                       


2



    1中无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间。

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


情况2div2右浮动

右浮动(float:right;)当然就是靠右排列。如果我们把div2采用右浮动,会是如下效果:


 

此时div2靠页面右边缘排列,不再遮挡div3,可清晰的看到上面所讲的div1、div3、div4组成的流。

目前为止我们只浮动了一个div元素.

 

情况3div2div3左浮动


   由于div2、div3浮动,它们不再属于标准流,因此div4会自动上移,与div1组成一个“新”标准流,而浮动是漂浮在标准流之上,因此div2又挡住了div4。

 

div2在每个例子中都是浮动的,但并没有跟随到div1之后。得结论:

   假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。

 

小结:

div的顺序是HTML代码中div的顺序决定的。

靠近页面边缘的一端是前,远离页面边缘的一端是后。




情况4:div2、div3、div4都设置成浮动


   div2发现上边的元素div1是标准流中的元素,因此div2的相对垂直位置不变,顶部仍然和div1元素的底部对齐。由于是左浮动,左边靠近页面边缘,所以左边是前,因此div2在最左边。

 

情况5:div2、div3、div4都设置成浮动


由于是右浮动,因此右边靠近页面边缘,所以右边是前,因此div2在最右边。

 

情况6:div2、div4左浮动


    div2、div4浮动,脱离了标准流,因此div3将会自动上移,与div1组成标准流。div2发现上一个元素div1是标准流中的元素,因此div2相对垂直位置不变,与div1底部对齐。div4发现上一个元素div3是标准流中的元素,因此div4的顶部和div3的底部对齐,并且总是成立的,因为从图中可以看出,div3上移后,div4也跟着上移,div4总是保证自己的顶部和上一个元素div3(标准流中的元素)的底部对齐

    可以看出:元素浮动之前,也就是在标准流中,是竖向排列的,而浮动之后可以理解为横向排列。

 

四、清除浮动

    清除浮动可以理解为打破横向排列。

清除浮动的关键字是clear,官方定义如下:

语法:

clear: none left right both

取值:

none  :  默认值。允许两边都可以有浮动对象

left   :  不允许左边有浮动对象

right  :  不允许右边有浮动对象

both  :  不允许有浮动对象

 

情况1div1div2为两行(两个)


希望得到:div1没有浮动,而div2左浮动效果

    用到清除浮动(clear),我们刚开始会写:在div1的CSS样式中添加clear:right;理解为不允许div1的右边有浮动元素,由于div2是浮动元素,因此会自动下移一行来满足规则。

其实这种理解是不正确的,这样做没有任何效果。

清除浮动规则:只能影响使用清除的元素本身,不能影响其他元素。

    如果采用div1clear right这个清除浮动是在div1中调用的,它只能影响div1,不能影响div2。要想让div2下移,就必须在div2的CSS样式中使用浮动。因此只要在div2的CSS样式中使用clear:left,来指定div2元素左边不允许出现浮动元素,这样div2就被迫下移一行。


情况2:div1、div2都是右浮动

    此时如果要让div2下移到div1下边,要如何做呢?

    我们希望移动的是div2,就必须在div2的CSS样式中调用浮动,因为浮动只能影响调用它的元素。可以看出div2的右边有一个浮动元素div1,那么我们可以在div2的CSS样式中使用clear:right;来指定div2的右边不允许出现浮动元素,这样div2就被迫下移一行,排到div1下边。


五、 环绕与清除  

                            


   上图中d1向左浮动,d2、d3都不浮动。一开始的定义中就有说到,浮动的框的是脱离普通流的,即d1就浮在上面的,下面的d2、d3感觉不到d1的存在。所以d2在父框中处于顶端。而且d2中的内容不会覆盖d1中的内容,我们可以利用这一点做出环绕效果。比如d1中放的是一张图片,d2中是图片的解释。这样就十分合理。

实例:

浮动框旁边的行框被缩短,从而给浮动框留出空间,行框围绕浮动框。

因此,创建浮动框可以使文本围绕图像:


     

   但如果d1与d2是不相关的,就想要d2另起一行。那就要使用另一个CSS属性clear。clear属性用于设置框的左边或右边或两边不挨着浮动框。上图d1向左浮动,d2、d3不浮动,且d2的clear属性为left。                                 


   另外,虽然不浮动的框感觉到不到浮动框的存在,但浮动框却知道不浮动框的存在。如上图,d1是不浮动的,d2、d3都是向左浮动的,d2能够另起一行而不覆盖到d1。


六、 注意

(1)文中的框即是div。

(2)对于行内标签,比如span,clear属性不会起到任何效果。clear属性的功能仅仅是解决块(block)级标签跟在浮动块之后会忽略浮动块所占位置的问题。

(3)用这种浮动块可以使用div来构建分栏布局,也就是上文说的那种多个div浮动,然后用页脚clear:both的方式进行分栏。

(4)如果你的页面使用css浮动之后挤压在一起,试试clear属性

CSS学习(二)—浮动,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。