float是什么?浮动在CSS中的作用

文章简介:float深入剖析。

float是什么?

float即为浮动,在CSS中的作用是使元素脱离正常的文档流并使其移动到其父元素的“最左边”或“最右边”。下面解释下这个定义中的几个名词的概念:

  • 文档流:在html中文档流即为元素从上至下排列的顺序。
  • 脱离文档流:元素从正常的排列顺序被抽离。
  • 最左边/最右边:上述的移动到父元素最左和最右是指元素往左或往右移动直到碰到另一个浮动元素或父元素内容区的边界(不包括padding)。

float造成的影响

  1. 对其父元素的影响

    对于其父元素来说,元素浮动之后,它脱离当前正常的文档流,所以它也无法撑开其父元素,造成父元素的塌陷,效果如下图所示。

    #wrapper {     padding: 20px;     border: 1px solid red;     width: 350px; } .floatL {     width: 100px;     height: 100px;     border: 1px solid #000;     float: left; } .floatR {     width: 100px;     height: 100px;     border: 1px solid #000;     float: right; } .blue {background: #6AA;} .red {background: #A66;} //html <div
    					id="wrapper">
    				<div
    					class="floatL blue">AAAAAAAA</div>
    				</div>
    			

  2. 对其兄弟元素(非浮动)的影响

    • 如果兄弟元素为 块级元素

      在现代浏览器和IE8+下,该元素会忽视浮动元素的而占据它的位置,并且元素会处在浮动元素的下层(并且无法通过z-index属性改变他们的层叠位置),但它的内部文字和其他行内元素都会环绕浮动元素。

      需要注意的是,在IE 6、7下则分别都有不同的表现,IE 6、7中,该兄弟元素会紧跟在浮动元素的右侧,并且在IE6中两者之间留有3px的空隙。这就是著名的“IE 3px bug”

      //CSS,其他的样式按照上面给出的,此处就不再重复了 .block {     width: 200px;     height: 150px;     border: 1px solid #000;     background: #CCC; } <div
      							id="wrapper">
      						<div
      							class="floatL blue">AAAAAAAA</div>
      						<div
      							class="block">BBBBBBBBB</div>
      						</div>
      					

      IE 6:

      IE 7:

    • 如果如果兄弟元素为 内联元素

      则元素会环绕浮动元素排列。

      <div
      							id="wrapper">
      						<div
      							class="floatL blue">AAAAAAAA</div>     文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字 </div>
      					

      <div
      							id="wrapper">
      						<div
      							class="floatL blue">AAAAAAAA</div>
      						<img
      							src="XXX.png">
      						</div>
      					

  3. 对其兄弟元素(浮动)的影响

    • 同一个方向的浮动元素:

      当一个浮动元素在浮动过程中碰到同一个方向的浮动元素时,它会紧跟在它们后面,可以用这样一个形象的比喻来描述: 在一个购票中心里,某人从一条购票队列跑到旁边的一条购票队列中排队,那自然先跑过去的会先占据前面的位置。但这条购票队列还是位于当前的购票中心中 ,因此这条浮动的队列和正常的文档流队列也依旧在同一个父元素当中。

      <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL blue">BBBBBBBBBB</div>
      						</div>
      					

    • 反方向的浮动元素:

      正如上面的比喻所述,我们可以假设购票中心里左右两边的各有一个购票点(如图,这里我们把一个div看做一个购票者),左浮动的队列可看做左购票点的购票队列,反方向的浮动(即右浮动)则是右边购票点的购票队列,所以在购票中心足够宽的时候两条队列的人群是互不受影响的。因此他们在同一条水平线上

      <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatR blue">BBBBBBBBBB</div>
      						</div>
      					


      但当购票中心过窄或者左右两边的购票队列过长时,其中一条队列则会另起一行排列(此处为B队列,有人可能会问为什么不是A队列另起一行?从下面HTML结构上可知,这是因为在时间上,A队列比B队列更早地建立,根据先到先得的原则,B队列的购票者在位置不够的时候自然要另起了一行了)。

      <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatR blue">BBBBBBBBBB</div>
      						<div
      							class="floatR blue">BBBBBBBBBB</div>
      						</div>
      					


      当同一行中连一个购票者的位置都容不下时,两条队列则会错开两行

      <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatR blue">BBBBBBBBBB</div>
      						<div
      							class="floatR blue">BBBBBBBBBB</div>
      						</div>
      					

  4. float对自身元素的影响

    float对象将被视作块对象(block-level),即display属性等于block。

  5. float对子元素的影响

    我们知道当一个元素浮动时,在没有清楚浮动的情况下,它无法撑开其父元素,但它可以让自己的浮动子元素撑开它自身,并且在没有定义具体宽度情况下,使自身的宽度从100%变为自适应(浮动元素display:block)。其高度和宽度均为浮动元素高度和非浮动元素高度之间的最大值。

    //这里我们去掉#wrapper的固定宽度,并在其外部增加一个固定宽度的div,以便更好地展示 <div
    					class="container">
    				<div
    					id="wrapper">
    				<div
    					class="floatL red">AAAAAAAA</div>
    				<div
    					class="floatL red">AAAAAAAA</div>
    				</div>
    				</div>
    			

    <div
    					class="container">
    				<div
    					id="wrapper"
    					style="float:left;">
    				<div
    					class="floatL red">AAAAAAAA</div>
    				<div
    					class="floatL red">AAAAAAAA</div>
    				</div>
    				</div>
    			

    .block {     width: 250px;     height: 50px;     border: 1px solid #000;     background: #CCC; }  <div
    					class="container">
    				<div
    					id="wrapper"
    					style="float:left;">
    				<div
    					class="floatL red">AAAAAAAA</div>
    				<div
    					class="floatL red">AAAAAAAA</div>
    				<div
    					class="block"></div>
    				</div>
    				</div>
    			

    .block
    				{ width:
    							150px;
    					height:
    							150px;
    					border:
    							1px solid #000;
    					background:
    							#CCC;
    					}
    			

     

  6. float对父元素之外的元素的影响

    • 父元素之外的非浮动元素

      从上面可知,当一个元素浮动时,在没有清楚浮动的情况下,它无法撑开其父元素,也就是父元素的宽高都为0。并且其父元素之外的非浮动元素也会无视该浮动元素,浮动元素仿佛到了另外一个世界里。

      //CSS .outer {     height:150px;     width: 350px;     border:1px solid blue; } //HTML <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						</div>
      						<div
      							class="outer"></div>
      					

    • 父元素之外的浮动元素

      当浮动元素的父元素之外的元素为浮动元素时,他们仿佛去到了同一个世界里。
      两个元素的浮动方向相同时:

      <div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						</div>
      						<div
      							class="outer"
      							style="float:left;"></div>
      					

      两个元素的浮动方向相反时:

      //CSS,这里我们在他们外面增加一个固定宽高的div以便展示,否则右浮动的元素会浮动到body的右边界 .container {     width:650px;     height: 250px;     border: 1px solid #000; } <div
      							class="container">
      						<div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						</div>
      						<div
      							class="outer"
      							style="float:right;"></div>
      						</div>
      					

      <div
      							class="container">
      						<div
      							id="wrapper">
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						<div
      							class="floatL red">AAAAAAAA</div>
      						</div>
      						<div
      							class="outer"
      							style="float:right;"></div>
      						</div>
      					

总结

实际上关于float在页面中带来的影响还有许多,只是它们存在于各种特定的场景,无法一一列举,本文也并非想要穷举所有的情况,只是希望同学们能通过本文而来了解float是什么,以及它对文档所造成的破坏。只有深刻理解了它的含义才能以在各种不同的场景随机应变地使用float这个神奇的东西。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索float
, 队列
, 浮动
, 元素
, 文字
, 一个
, 浮动元素
左右浮动
float css 浮动、css不用float实现浮动、css float不起作用、cssfloat作用、css float作用,以便于您获取更多的相关知识。

时间: 2024-11-03 12:07:04

float是什么?浮动在CSS中的作用的相关文章

CSS中Float概念相关文章采撷

css|概念 Float(浮动)概念也许是CSS中最让人迷惑的一个概念吧.Float经常被错误理解,而且因为将上下文元素全部浮动导致的可读性.可用性问题备受责难.然而,这些问题的根源并不在于理论本身,而是开发人员以及浏览器对理论的解读造成的. 如果你认真的去读一下浮动概念,你会发现并不像所见的那样复杂.大多数问题都是由于老版本的IE带来的(我只是猜想).如果你知道这些bug,你就能避免这些问题. 让我们尝试去解决这些问题并澄清一些以前使用浮动的误解.我们参考了成打的相关文章,并选取了最为重要的一

css中关于float的问题,

问题描述 css中关于float的问题, 解决方案 是被li1或者li2或者两者覆盖了吧,因为li1和li2是float的,所以大概是飘在li3上了,你清除一下浮动看看: 如果回答对你有帮助,请采纳 解决方案二: li3加上clear: both; li3的背景色应该在li1的下面,被li1覆盖了 解决方案三: .li3{ width:90px; height:90px; border-width:1px; border-color:green; background-color:green;

css中float left与float right clear的原理使用说明图解

点评:CSS中很多时候会用到浮动来布局,也就是经常见到的float:left或者float:right,简单点来说,前者是左浮动(往左侧向前边的非浮动元素飘,全是飘得元素的话,就按照流式来浮动从左到右,放不下则换行),后者是右浮(往右飘)动.但仅仅是如此吗?-No! 要注意以下几点: 1. 浮动元素会被自动设置成块级元素,相当于给元素设置了display:block(块级元素能设置宽和高,而行内元素则不可以). 2. 浮动元素后边的非浮动元素显示问题. 3. 多个浮动方向一致的元素使用流式排列,

CSS中的滑动门技术

css 原文作者:Douglas Bowman 原文出自:A List Apart 中文翻译:54player.com nobita 版权说明:本文中文翻译版权归译者54player.com nobita所有.需要转载发表的,请先与作者联系 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标

CSS中BFC的概念及外层div包裹内层div处理方法

 对于div和css的用法,自己认为还是比较熟练的.但是对于一些概念性的东西,知之甚少,比如,今天看到有个BFC的概念,不知道CSS的BFC是啥意思.经过查阅资料,才知道这个概念.其实,虽然我们并不知道BFC是啥意思,因为在项目中,没有人会说什么BFC.但是我们在项目中经常用到BFC,每一个css布局基本上都会用到.为了消灭这一盲点,今天说一下什么是BFC吧.   BFC的概念   BFC全称Block Formatting Context ,直译"块级格式化上下文",也有译作&quo

CSS中的滑动门技术研究

css 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标签导航栏就是其中的一个例子.过去,我们频繁的使用这些标签,并已成为了一种非常流行的站点导航方式.现今,在CSS已被广泛支持的前景下,我们可以为我们站点制作出更高质量和更好外观的标签导航栏来.你也许知道CSS可以用来"驯服"无

CSS中的元素定位方法详解

  1.盒模型 盒模型,就是 浏览器为页面中的每个 HTML 元素生成的矩形盒子. 这些盒子们都要按照 可见版式模型(visual formatting model)在页面上排布.可见的页面版式主要由三个属性控制: position 属性. display 属性和 float 属性.其中,position 属性控制页面上元素间的位置关系, display 属性控制元素是堆叠.并排,还是根本不在页面上出现, float 属性提供控制的方式,以便把元素组成成多栏布局. 盒子属性分三组: 边框(bor

详解CSS中clear:left/right的用法

一.理解clear: left/clear: right 当想到clear: left的时候,自然会认为是"清除左浮动",clear: right是清除右浮动. 其实现在想想,这样的理解与表示是不严谨的欠考虑的. 一般,现在中文圈流传的表述是: clear语法: clear : none | left | right | both 取值: none : 默认值.允许两边都可以有浮动对象 left : 不允许左边有浮动对象 right : 不允许右边有浮动对象 both : 不允许有浮动

总结CSS中火狐浏览器与IE浏览器的兼容代码

总结CSS中火狐浏览器与IE浏览器的兼容代码,兼容你兼容主要是语法规范问题,你写CSS写规范了,就都兼容了,其他的就是一些浏览器的BUG了,发一些技巧给你看看,或许有用. CSS技巧 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行 2.margin加倍的问题 设置为float的div在ie下设置的margin会加倍.这是一个ie6都存在的bug.解决