`
edison87915
  • 浏览: 199408 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

CSS的Float之二(转)

    博客分类:
  • CSS3
 
阅读更多

 

CSS的Float之二原文

 

说起浮动大家并不陌生,因为有 Word 中看到太多的浮动围绕现象。我们可以看一下印刷设计来了解它的起源和作用。印刷布局中,文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”

 

大家都了解到, CSS 网页布局的原理,就是按照(X)HTML 代码中对象声明的顺序,以流布局的方式 来显示它,而流布局就不得不说到 float 浮动技术,在(X)HTML 中的所有对 象,默认分为两种:块元 素(block element)、内联元素(inline element),虽然也存在着可变元素,但只是随上下文关系确定该元 素是块元素或者内联元素。其实 CSS 的 float 属性,作用就是改变块元素(block element)对象的默认显 示方式。在网页设计中,应用了 CSS 的 float 属性的页面元素就像在印刷布局里面的被文字包围的图 片一样。浮动的元素仍然是网页流的一部分。这与使用绝对定位的页面元素相比是一个明显的不同。 绝对定位的页面元素被从网页流里面移除了,就像印刷布局里面的文本框被设置为无视页面环绕一样。 绝对定位的元素不会影响其它元素,其它元素也不会影响它,无论它是否和其它元素挨着。

下面我们从不同的方面来了解这个float:

浮动的本质

浮 动就是个带有方位的 display:inline-block 属性。display:inline-block 某种意义上的作用就是包裹 (wrap),而浮动也有类似的效果。然而,float 无法等同于 display:inline-block,其中原因之一就是浮动 的方向 性,display:inline-block 仅仅一个水平排列方向,就是从左往右,而 float 可以从右往左排列, 这就是两者的差异。

浮动的属性参数:

浮动拥有三个参数:none:对象不浮动,left:对象浮动到左边,right:对象浮动到右边。下面我们举例来说明这几种情况:

      <div id="floatA">浮动块A</div>
      <div id="floatB">浮动块B</div>

 

      div {
        width: 200px;
        height: 50px;
        color: #fff;
        padding: 5px;
        margin: 5px;
      }
      #floatA {
        border: 1px solid red;
        background: orange;
      }
      #floatB {
        border: 1px dotted blue;
        background: teal;
      }

 在还没有应用浮动之前的效果:

 



 下面我们来看第一种情况,就是我们给#floatA 应用浮动 float:left;其结果是什么样:

      #floatA {
        float:left;
        border: 1px solid red;
        background: orange;
      }

 

 

 

在IE6~IE7 浏览器中,对#floatA 块进行左浮动后,“浮动块A”已经向左浮动,而且“浮动块B” 紧随其后,但是在IE8 和FF等现代浏览器中,“浮动块B”在水平方向不见了,被“浮动块A”遮盖住了, 造成这种问题是因为没有进行浮动清除。至于清除浮动相关问题大家可以参阅《Clear Float》。

接下来我们在来看第二种清况,浮块A和浮块B都进行左浮动:

      #floatA {
        float:left;
        border: 1px solid red;
        background: orange;
      }
      #floatB {
        float:left;
        border: 1px dotted blue;
        background: teal;
      }

 我们来看看效果:

 从效果图中可以看出,现在各浏览器下的效果基本上达到一致。现在我们反过来设置,在#floatA 不设 置浮动,而在#floatB 设置左浮动,在各浏览器中又会有什么样的变化:

 

      #floatA {
        border: 1px solid red;
        background: orange;
      }
      #floatB {
        float:left;
        border: 1px dotted blue;
        background: teal;
      }

 我们来看各浏览器下的效果:

 

 

效果中明显告诉我们,没有任何变化。上面我们所的是左浮动的几种情形,那么我们还有右浮动,还有一个左浮一个右浮,其实这些性质都差不多,大家可以创建几个div,然后对他们进行不同的浮动测试。这样你就会一下子明白浮动方向的作用。

浮动的破坏性

浮 动可以说是所有 CSS 属性中的“破坏之王”。要理解浮动的破坏性,我们要从浮动最原始的意义 入手。浮动的最初意义就是文本围绕图片。文本为什么会围绕含有 float 属性的图片,那是因为浮动 破坏了正常的 line boxes 。因此这里就涉及到 line boxes 的概念,那么我们就顺便讲一下 line boxes 概 念,如下面一段 HTML 标记:

     <p>我是一行普通的文本,我这里面含有一个<span>SPAN</span></p>

 

 

这里面涉及到 4 种 boxes:

a)、首先 p 标签所在的 content Boxes 中,其包含了其它的 boxes,我们这里这在 body 标签中;

b)、inline boxes 如下图所示:



 inline boxes 不会让内容显示成块,而是排成一行,如果外部含 inline 属性的标签(span,a,strong 等), 则属于 inline boxes,如果是个光秃秃的文字,则属于匿名 inline boxes。

 

c)、line boxes:

      <p>我是一行普通的文本,我这里面含有一个SPAN</p>

 

 

在 content boxes 里,一个一个的 inline boxes 组成了 line boxes。这是浮动影响布局的关键 box 类 型

d) content area, 它是一种围绕文字看不见的 box,其大小与 font-size 大小相关。

接下来我们在来看一种图文混排:

      <p>
        我是一行普通的文本,我里面含有一个<img src="front.png" alt=""/>图片
        <br />
        我是第二行文本
        <br />
        我是第三行文本
      </p>

 

 

 

默认情况下,图片与文字混排应该是这个样子:图片与文字基线对齐,图 片与文字在同一行上, 如上图所示,图片为一个 inline boxes,两边的文字也是 inline boxes。由于 line boxes 的高度是由其内 部最高的 inline boxes 的高度决定的,所以这里 line boxes 的高度就是图片的高度。此时图片与文字是 同一 box 类型的元素(都是 inline boxes),是在同一行上的,所以,默认状态下,一张图片只能与一 行文字对齐。而要想让一张图片要与多行文字对齐,您唯一能做的就是破坏正常的 line boxes 模型。

上面是一个不带有浮动的图片渲染方式,下面我们来看一下浮动图片的渲染效果

我们在这里看看,把 img 设置一个float:left看看其效果,左图是 IE7 及其以下版本,右图是 IE8 和FF等现代浏览器下效果效果:



 

刚才说过,正常情况下,图片自身就是个 inline boxes,与两侧的文字 inline boxes 共同组成了 line boxes,但是,一旦图片加入了浮动,情况就完全变了。那是浮动彻底破坏了 img 图片的 inline boxes 特性,至少有一点可以肯定,图片的 inline boxes 不存在了,它被浮动破坏了。一旦图片失去了 inline boxes 特性就无法与 inline boxes 的文字排在一行了,其会从 line boxes 上脱离出来,跟随自身的方位 属性,靠边排列。浮动破坏了图片的 inline box,产生了两个结果:一是图片无法与文字同行显示, 脱离了其原来所在的 line box 链;二是没有了高度(无 inline box -> 无 line box -> 无高度)。而这些结 果恰恰是文字环绕图片显示所必须的。

浮动的塌陷

浮动的破坏性给浮动带来一个塌陷,如:

      <div id="wrap">
        <div id="floatA">浮动块A</div>
        <div id="floatB">浮动块B</div>
        <div id="floatC">浮动块C</div>
      </div>

 

      #wrap {
        border: 1px solid red;
      }
      #wrap div {
        width: 100px;
        height: 50px;
      }
      #floatA{
        background: blue;
        border: 1px dotted lime;
      }
      #floatB {
        background: orange;
        border: 1px dotted blue;
      }
      #floatC {
        background: lime;
        border: 1px dotted orange;
      }

 我们先来看看初步效果:

 使用浮动(float)的一个比较疑惑的事情是他们怎么影响包含他们的父元素的。如果父元素只包含 浮动元素,且父元素未设置高度和宽度的时候。那 么它的高度就会塌缩为零。如果父元素不包含任 何的可见背景,这个问题会很难被注意到,但是这是一个很重要的问题。在这里我们可以称为“塌陷”。 现在我们先每个浮动块加上一个浮动:float:left;后面会有一个什么样的现象呢?

      #floatA{
        background: blue;
        border: 1px dotted lime;
        float:left;
      }
      #floatB {
        background: orange;
        border: 1px dotted blue;
        float:left;
      }
      #floatC {
        background: lime;
        border: 1px dotted orange;
        float:left;
      }



 

针对这样的问题,如何解决,就不用我说了,你懂的。不过也可以看看这里是如何解决的。

浮动的好处:

浮动除了能让文本围绕图片之外,还能应用于网页的布局,如:



 浮动对小型的布局同样有用。例如页面中的这个小区域。如果我们在我们的小头像图片上使用浮 动,当调整图片大小的时候,盒子里面的文字也将自动调整位置:

 同样的布局可以通过在外容器使用相对定位,然后在头像上使用绝对定位来实现。这种方式中, 文本不会受头像图片大小的影响,不会随头像图片的大小而有相应变化。

 

浮动的坏处:

宇宙万物都是相生相克的,浮动能给我们在设计中带来好处,同时它也存在不少坏处,特别是在 IE 中造成不少 Bug,比如我们前面碰到的 IE 中会产生一个 margin 双倍距离 Bug,当然还会给我带来 其它的 Bug:IE 文本产生 3PX 的 Bug; IE6 IE7 底边 Bug;还有就是浮动的Bug。

上面分几个部分写一下我自己对浮动的理解,希望大家喜欢。如果你对浮动有更好的理解不仿一起交流,可以直接在下面的评论中给我留言。

  • 大小: 20 KB
  • 大小: 15.1 KB
  • 大小: 43.9 KB
  • 大小: 20.5 KB
  • 大小: 15.1 KB
  • 大小: 82 KB
  • 大小: 98.9 KB
  • 大小: 35 KB
  • 大小: 29.9 KB
  • 大小: 22.5 KB
  • 大小: 21 KB
  • 大小: 48.6 KB
  • 大小: 65.5 KB
分享到:
评论

相关推荐

    CSS浮动属性Float详解 什么是CSS Float?

    CSS 浮动属性 Float 详解 CSS 浮动属性 Float 是一种重要的定位属性,允许页面元素浮动在其他元素旁边。Float 属性可以取四个值:Left、Right、None 和 Inherit。其中,Left 和 Right 分别浮动元素到左边和右边,...

    DIV+CSS布局:CSS浮动float属性详解[归纳].pdf

    CSS浮动float属性详解 在Web开发中,布局是非常重要的一方面,浮动float属性是CSS布局中非常关键的属性。通过对浮动float属性的理解和掌握,我们可以更好地实现网页的布局和排版。 Float浮动属性基本释义 float...

    css,float,clear

    我对css几个主要属性的理解,inline,block,float,clear

    div+css float 布局,适配手机

    在这个特定的案例中,“div+css float 布局,适配手机”指的是利用 CSS 的浮动属性 (`float`) 来创建响应式网页布局,以便在手机等移动设备上也能正常显示。 浮动布局(float layout)是 CSS 中一个经典但仍然广泛...

    css float浮动属性使用方法和实例讲解

    css float是一个经常需要使用的css属性,该属性用于设置css块级元素的浮动方向(左右浮动)。本文向码农介绍css float使用方法和实例应用。 Css的float浮动属性,用于设置标签对象(如:标签盒子、标签、标签、标签...

    css float文章收集

    在实际开发中,理解并熟练运用CSS的`float`属性是构建响应式和自适应网页设计的关键技能之一。同时,掌握如何正确管理和清除浮动对于保持页面布局的稳定性至关重要。通过阅读压缩包内的CHM文档,开发者可以深入学习`...

    css 的 float 与clear

    在CSS世界中,`float`和`clear`是两个非常重要的布局属性,它们在网页设计中扮演着不可或缺的角色。这两个属性对于理解盒模型以及创建复杂的网页布局至关重要。在这篇文章中,我们将深入探讨`float`和`clear`的概念...

    css float的负作用.zip

    css float的负作用.zip

    css float文字的显示问题(兼容性)

    4. 使用Grid Layout:同样,CSS Grid布局也可以替代`float`,并且提供了更强大的二维布局能力。 关于文字显示问题,当一个浮动元素与文字相邻时,文字会自动环绕该元素。但不同浏览器对这一行为的实现可能有所不同...

    CSS-float详解.pdf

    #### 二、CSS `float` 属性概述 ##### 2.1 基本概念 在HTML文档中,每个元素都有其默认的显示方式。根据这些元素的不同类型(如块级元素和内联元素),它们在页面上的布局也会有所不同。`float`属性的作用是允许...

    css float属性_动力节点Java学院整理

    浮动(Float)是CSS布局中的一个关键概念,它主要用于创建多列布局和控制元素的排列方式。`float`属性允许元素在文档流中浮动,从而影响周围元素的布局。本篇将详细介绍`float`属性及其在页面布局中的作用。 ### 1....

    css float left布局换行不正常问题的解决

    在讨论CSS中float布局换行问题之前,首先要了解CSS float属性的基本原理。float属性是一种非常有用的CSS布局方式,它允许元素向左或向右浮动,直到它的外边缘碰到包含框或另一个浮动元素的边框为止。使用float属性...

    table布局网页转换为div+CSS布局的转换软件

    而流定位(通常指浮动`float`和块级展示`display`)则遵循文档流,常用于创建多列布局。 转换过程可能涉及以下步骤: 1. **识别表格元素**:软件首先会识别HTML中的`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`等标签。 2. **创建div...

    通过float实现两个div不换行

    style type=”text/css”&gt; div#row1 { float: left; color: blue; } div#row2 { color: red } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; ”row1″&gt;第一个div&lt;/div&gt; ”row2″&gt;第二个div不换行&lt;/div&gt; &lt;/body&...

    DIVCSS布局:CSS浮动float属性详解.doc

    DIVCSS布局:CSS浮动float属性详解.doc

    javascript下操作css的float属性的特殊写法

    为了确保代码能够在各种浏览器中正常运行,建议使用`style.cssFloat`或`style.styleFloat`来设置`float`属性,并根据不同的浏览器环境选择合适的方法来获取`float`属性的值。这种方法可以有效地提高代码的兼容性和可...

Global site tag (gtag.js) - Google Analytics