float的深入剖析

 

float是什么?

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

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

float造成的影响

  1. 对其父元素的影响

    对于其父元素来说,元素浮动之后,它所占的空间会消失在当前文档中,所以它也无法撑开其父元素,效果如下图所示。

      

     1 //CSS
    2 #wrapper {
    3 padding: 20px;
    4 border: 1px solid red;
    5 width: 350px;
    6 }
    7 .floatL {
    8 width: 100px;
    9 height: 100px;
    10 border: 1px solid #000;
    11 float: left;
    12 }
    13 .floatR {
    14 width: 100px;
    15 height: 100px;
    16 border: 1px solid #000;
    17 float: right;
    18 }
    19 .blue {background: #6AA;}
    20 .red {background: #A66;}
    1 //html
    2 <div id="wrapper"> <div class="floatL blue">AAAAAAAA</div> </div>

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

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

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

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

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

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

      1 <div id="wrapper">
      2 <div class="floatL blue">AAAAAAAA</div>
      3 文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
      4 </div>

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

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

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

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

      1 <div id="wrapper">
      2 <div class="floatL red">AAAAAAAA</div>
      3 <div class="floatL blue">BBBBBBBBBB</div>
      4 </div>

    • 反方向的浮动元素:

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

      1 <div id="wrapper">
      2 <div class="floatL red">AAAAAAAA</div>
      3 <div class="floatR blue">BBBBBBBBBB</div>
      4 </div>


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

      1 <div id="wrapper">
      2 <div class="floatL red">AAAAAAAA</div>
      3 <div class="floatL red">AAAAAAAA</div>
      4 <div class="floatR blue">BBBBBBBBBB</div>
      5 <div class="floatR blue">BBBBBBBBBB</div>
      6 </div>


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

      1 <div id="wrapper">
      2 <div class="floatL red">AAAAAAAA</div>
      3 <div class="floatL red">AAAAAAAA</div>
      4 <div class="floatL red">AAAAAAAA</div>
      5 <div class="floatR blue">BBBBBBBBBB</div>
      6 <div class="floatR blue">BBBBBBBBBB</div>
      7 </div>

  4. float对自身元素的影响

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

  5. float对子元素的影响

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

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

    1 <div class="container">
    2 <div id="wrapper" style="float:left;">
    3 <div class="floatL red">AAAAAAAA</div>
    4 <div class="floatL red">AAAAAAAA</div>
    5 </div>
    6 </div>

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

    1 .block {
    2 width: 150px;
    3 height: 150px;
    4 border: 1px solid #000;
    5 background: #CCC;
    6 }

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

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

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

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

    • 父元素之外的浮动元素

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

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

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

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

      1 <div class="container">
      2 <div id="wrapper">
      3 <div class="floatL red">AAAAAAAA</div>
      4 <div class="floatL red">AAAAAAAA</div>
      5 <div class="floatL red">AAAAAAAA</div>
      6 <div class="floatL red">AAAAAAAA</div>
      7 </div>
      8 <div class="outer" style="float:right;"></div>
      9 </div>

 
 
分类: CSS

float的深入剖析的更多相关文章

  1. float与double剖析

    今天研究下float与double的编码 float: 我们来看一下这组数是如何一步步从16进制转换到float的 float编码格式: 1.将16进制转换到2进制 整理后:0 1000 0010 1 ...

  2. js实现省市区联动

    先来看看效果图吧,嘻嘻~~~~~~~~~~~~~~~~~~~· 代码在下面: 示例一: html: <!DOCTYPE html> <html> <head> &l ...

  3. 【解惑】剖析float型的内存存储和精度丢失问题

    问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 现在我们就详细剖析一下浮点型运算为什么会造成精度丢失? 1.小数的二进制表示问题 首先我们要搞清楚下面两 ...

  4. 深入剖析——float之个人见解

    浮动的原本作用仅仅是为了实现文字的环绕效果. 以下分别是html与css代码,显示效果如下图.因为两个div使用了float浮动属性,所以脱离了标准文档流.让父元素撑开高度,我们需要清除浮动. < ...

  5. 计算机程序的思维逻辑 (30) - 剖析StringBuilder

    上节介绍了String,提到如果字符串修改操作比较频繁,应该采用StringBuilder和StringBuffer类,这两个类的方法基本是完全一样的,它们的实现代码也几乎一样,唯一的不同就在于,St ...

  6. MapReduce剖析笔记之二:Job提交的过程

    上一节以WordCount分析了MapReduce的基本执行流程,但并没有从框架上进行分析,这一部分工作在后续慢慢补充.这一节,先剖析一下作业提交过程. 在分析之前,我们先进行一下粗略的思考,如果要我 ...

  7. CSS3打造3D效果——perspective transform的深度剖析

    声明:此篇博文虽是自己手写,但大量资源取自 张鑫旭 的博文.想看更详细 更专业的剖析请看张鑫旭的博文. 昨天对css3的transform做了初步的分析和认识,突然看到perspective属性,调了 ...

  8. C/C++程序员应聘试题剖析(转载)

    转载自:http://www.cnitblog.com/zouzheng/articles/21856.html 1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面 ...

  9. [ZigBee] 9、ZigBee之AD剖析——AD采集CC2530温度串口显示

    1.ADC 简介 ADC 支持多达14 位的模拟数字转换,具有多达12 位有效数字位.它包括一个模拟多路转换器,具有多达8 个各自可配置的通道:以及一个参考电压发生器.转换结果通过DMA 写入存储器. ...

随机推荐

  1. 图解zookeeper FastLeader选举算法

    zookeeper当配置为群集模式,在启动或异常情况将被选举为的例子Leader.默认选择算法FastLeaderElection. 不知道zookeeper够考虑这样一个问题:某个服务能够配置为多个 ...

  2. oracle_恢复流程图

    网上看到一个很好的数据恢复检查图片,共享给大家

  3. 【C++基础】类的组合

    所谓类的组合是指:类中的成员数据是还有一个类的对象或者是还有一个类的指针或引用.通过类的组合能够在已有的抽象的基础上实现更复杂的抽象. 比如: 1.按值组合 #include<iostream. ...

  4. hdu 4932 Miaomiao&#39;s Geometry(暴力)

    题目链接:hdu 4932 Miaomiao's Geometry 题目大意:在x坐标上又若干个点,如今要用若干条相等长度的线段覆盖这些点,若一个点被一条线段覆盖,则必须在这条线的左端点或者是右端点, ...

  5. Windows环境搭建与第一个C# Sample

    Redis入门 - Windows环境搭建与第一个C# Sample   什么是Redis? Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,R ...

  6. 泛型委托及委托中所涉及到匿名方法、Lambda表达式

    泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...

  7. 前端构建利器Grunt—Bower

    runt + Bower—前端构建利器 目前比较流行的WEB开发的趋势是前后端分离.前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的Web ...

  8. Visual Studio 2010 单元测试--运行测试并查看代码覆盖率

    原文:Visual Studio 2010 单元测试--运行测试并查看代码覆盖率 运行测试并查看代码覆盖率对程序集中的代码运行测试时,可以通过收集代码覆盖率数据来查看正在测试的项目代码部分. 运行测试 ...

  9. 安装Windows操作系统的驱动程序(驱动精灵版) - 进阶者系列 - 学习者系列文章

    安装完操作系统之后,就需要安装对应的驱动程序了.下面就简要介绍下驱动程序的安装.以驱动精灵驱动安装软件为例. 1.  下载驱动精灵. 从http://www.drivergenius.com/网站下载 ...

  10. AjaxPro使用说明文档

    ajaxpro下载地址 AjaxPro使用说明     1 目录     2 修改历史纪录     3 1.什么是Ajax     4 2.为什么使用Ajax     4 3.Ajax应用场景     ...