CSS学习—浮动

Posted mqxnongmin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(标准流中的元素)的底部对齐

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

?

四、清除浮动

????清除浮动能够理解为打破横向排列。

清除浮动的keyword是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学习—浮动的主要内容,如果未能解决你的问题,请参考以下文章

CSS学习—浮动

CSS学习17-浮动

CSS 学习-1. Float(浮动)

CSS学习19-清除浮动

css 学习笔记浮动,不脱离文档流,继承和层叠

Java学习总结(二十四)——前端:CSS样式设计(CSS引入,选择器,盒子模型,浮动元素)