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看起来变“矮”了。

下图是d1、d2、d3左移时出现的两种情况

图1:

图2:

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

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

情况2:div2右浮动

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

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

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

情况3:div2和div3左浮动

由于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  :  不允许有浮动对象

情况1:div1与div2为两行(两个)

希望得到: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学习(二)—浮动,布布扣,bubuko.com

时间: 2024-12-20 06:10:16

CSS学习(二)—浮动的相关文章

HTML/CSS学习(二)

续...... ============================================================================================= 浮动的样式和特性 浮动:就是使元素脱离文档流,按照一定的方式排列,遇到相邻的浮动元素或者父级的边界就停下来 浮动的特性 1.浮动的元素排在同一排 2.浮动的元素内容撑开宽度 3.浮动的元素支持所有css样式 4.浮动的元素脱离文档流 5.浮动的元素提升层级半级(属性盖住内容溢出,可做文字环绕di

CSS学习笔记-浮动(float,clear)

float float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.如果浮动非替换元素,则要指定一个明确的宽度:否则,它们会尽可能地窄. 注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止. 属性值: left    元素向左浮动. right   元素向右浮动. none    默认值.元素不浮动,并会显示在其

css学习二

(1) 伪 类 伪类分为 ui伪类 与 结构化伪类 先说下ui伪类 UI( User Interface,用户界面)伪类会在 HTML 元素处于某个状态时(比如鼠标 指针位于链接上),为该元素应用 CSS 样式. 链接伪类::link{未被点击时} :hover{鼠标悬浮时} :active{被选择时} :visited{被访问过时} 注意,如果在样式表中上面四个伪伪类不是按序写的话,在某些情况下是无法起作用的. focus伪类 :focus {获得焦点时}   target伪类 :taregt

CSS学习摘要-浮动与清除浮动

float 浮动float CSS属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它.该元素从网页的正常流动中移除,尽管仍然保持部分的流动性(与绝对定位相反). 一个浮动元素是float的值不为none的元素. /* Keyword values */float: left;float: right;float: none;float: inline-start;float: inline-end; /* Global values */float: inherit;float

css学习归纳总结(二) 转

原文地址:css学习归纳总结(二) 标签与元素 <p>标签和p元素有什么区别呢?大多数时候他们表示的是同一样东西,但仍有细微的区别.<p>.<div>等指的是HTML分隔符,而元素则是由一对开始结束标签构成的,用来包含某一些内容 子选择器和后代选择器的区别: 后代选择器的写法就是把外层的标记写在前面,内层的标记写在后面,之间用空格分隔. 子选择器只对直接后代有影响的选择器,而对“孙子后代”以及多层后代不产生作用. 注意:在IE6中,只支持后代选择器,不支持子选择器 链接

html+css学习笔记 3[浮动]

inline-block/float(浮动) 回顾:inline-block 特性:      1.块在一排显示 2.内联支持宽高 3.默认内容撑开宽度 4.标签之间的换行间隙被解析(问题) 5.ie6 ie7不支持块属性标签的inline-block(问题) float浮动: 1.块在一排显示     2.内联支持宽高     3.默认内容撑开宽度      4.脱离文档流     5.提升层级半层 文本流 float:left | right | none | inherit; 文档流是文档

CSS学习------CSS定位(position)与浮动(float)

position属性:用来对元素进行定位 定位的意义: 定位允许你定义元素框相对于其正常位置应该出现的位置. 相对于父元素. 相对于另一个元素. 相对于浏览器窗口本身的位置. 定位分为:绝对定位和相对定位. 相对定位: 如果对一个元素进行相对定位,它将出现在它所在的位置上.然后,可以通过设置垂直或水平位置,让这个元素"相对于"它的起点进行移动. 在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间.因此,移动元素会导致它覆盖其它框. 示例: <html>   <

CSS学习笔记08 浮动

从CSS学习笔记05 display属性一文中,我们知道div是块元素,会独占一行,即使div的宽度很小,像下面这样 应用display属性的inline属性可以让div与div共享一行,除了这种方法外,还有没有其他方法可以实现这种效果呢,答案是肯定的,那就是下面要介绍的CSS的浮动特性,浮动从字面意思上来看,就是浮起来,动起来,那么是谁浮起来,又是谁动起来呢?往下看,很快就会知道答案了. 元素的浮动是指设置了浮动属性的元素会脱离标准文档流的控制,漂浮在标准流之上.元素浮动后,虽然脱离标准流,但

CSS学习之float解析

转自:http://www.w3cplus.com/css/float.html 一.float是什么? float即为浮动,在CSS中的作用是使元素脱离正常的文档流并使其移动到其父元素的“最左边”或“最右边”.下面解释下这个定义中的几个名词的概念: 文档流:在html中文档流即为元素从上至下排列的顺序. 脱离文档流:元素从正常的排列顺序被抽离. 最左边/最右边:上述的移动到父元素最左和最右是指元素往左或往右移动直到碰到另一个浮动元素或父元素内容区的边界(不包括padding). 二.float