CSS浮动(float,clear)通俗讲解

   很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程。

  前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家。

  写在前面的话:

  由于CSS内容比较多,小菜没有精力从头到尾讲一遍,只能有针对性的讲解。

  如果读者理解CSS盒子模型,但对于浮动不理解,那么这篇文章可以帮助你。

  小菜水平有限,本文仅仅是入门教程,不当之处请谅解!

  本文以div元素布局为例。

  教程开始:

  首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流。如下图:


  可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为div元素是独占一行的。

  注意,以上这些理论,是指标准流中的div。

  小菜认为,无论多么复杂的布局,其基本出发点均是:“如何在一行显示多个div元素”。

  显然标准流已经无法满足需求,这就要用到浮动。

  浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。

  例如,假设上图中的div2浮动,那么它将脱离标准流,但div1、div3、div4仍然在标准流当中,所以div3会自动向上移动,占据div2的位置,重新组成一个流。如图:


  从图中可以看出,由于对div2设置浮动,因此它不再属于标准流,div3自动上移顶替div2的位置,div1、div3、div4依次排列,成为一个新的流。又因为浮动是漂浮在标准流之上的,因此div2挡住了一部分div3,div3看起来变“矮”了。

  这里div2用的是左浮动(float:left;),可以理解为漂浮起来后靠左排列,右浮动(float:right;)当然就是靠右排列。这里的靠左、靠右是说页面的左、右边缘。

  如果我们把div2采用右浮动,会是如下效果:


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

  目前为止我们只浮动了一个div元素,多个呢?

  下面我们把div2和div3都加上左浮动,效果如图:


  同理,由于div2、div3浮动,它们不再属于标准流,因此div4会自动上移,与div1组成一个“新”标准流,而浮动是漂浮在标准流之上,因此div2又挡住了div4。

  咳咳,到重点了,当同时对div2、div3设置浮动之后,div3会跟随在div2之后,不知道读者有没有发现,一直到现在,div2在每个例子中都是浮动的,但并没有跟随到div1之后。因此,我们可以得出一个重要结论:

  假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。

  div的顺序是HTML代码中div的顺序决定的。

  靠近页面边缘的一端是前,远离页面边缘的一端是后。


  为了帮助读者理解,再举几个例子。

  假如我们把div2、div3、div4都设置成左浮动,效果如下:


  根据上边的结论,跟着小菜理解一遍:先从div4开始分析,它发现上边的元素div3是浮动的,所以div4会跟随在div3之后;div3发现上边的元素div2也是浮动的,所以div3会跟随在div2之后;而div2发现上边的元素div1是标准流中的元素,因此div2的相对垂直位置不变,顶部仍然和div1元素的底部对齐。由于是左浮动,左边靠近页面边缘,所以左边是前,因此div2在最左边。

  假如把div2、div3、div4都设置成右浮动,效果如下:


  道理和左浮动基本一样,只不过需要注意一下前后对应关系。由于是右浮动,因此右边靠近页面边缘,所以右边是前,因此div2在最右边。

  假如我们把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 : 不允许有浮动对象

  定义非常容易理解,但是读者实际使用时可能会发现不是这么回事。

  定义没有错,只不过它描述的太模糊,让我们不知所措。

  根据上边的基础,假如页面中只有两个元素div1、div2,它们都是左浮动,场景如下:


  此时div1、div2都浮动,根据规则,div2会跟随在div1后边,但我们仍然希望div2能排列在div1下边,就像div1没有浮动,div2左浮动那样。

  这时候就要用到清除浮动(clear),如果单纯根据官方定义,读者可能会尝试这样写:在div1的CSS样式中添加clear:right;,理解为不允许div1的右边有浮动元素,由于div2是浮动元素,因此会自动下移一行来满足规则。

  其实这种理解是不正确的,这样做没有任何效果。看小菜定论:

  对于CSS的清除浮动(clear),一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。

  怎么理解呢?就拿上边的例子来说,我们是想让div2移动,但我们却是在div1元素的CSS样式中使用了清除浮动,试图通过清除div1右边的浮动元素(clear:right;)来强迫div2下移,这是不可行的,因为这个清除浮动是在div1中调用的,它只能影响div1,不能影响div2。

  根据小菜定论,要想让div2下移,就必须在div2的CSS样式中使用浮动。本例中div2的左边有浮动元素div1,因此只要在div2的CSS样式中使用clear:left;来指定div2元素左边不允许出现浮动元素,这样div2就被迫下移一行。


  那么假如页面中只有两个元素div1、div2,它们都是右浮动呢?读者此时应该已经能自己推测场景,如下:


  此时如果要让div2下移到div1下边,要如何做呢?

  同样根据小菜定论,我们希望移动的是div2,就必须在div2的CSS样式中调用浮动,因为浮动只能影响调用它的元素。

  可以看出div2的右边有一个浮动元素div1,那么我们可以在div2的CSS样式中使用clear:right;来指定div2的右边不允许出现浮动元素,这样div2就被迫下移一行,排到div1下边。


  至此,读者已经掌握了CSS+DIV浮动定位基本原理,足以应付常见的布局。

  其实,万变不离其宗,只要读者用心体会,再复杂的布局都可以通过小菜总结的规律搞定。

  写在后面的话:

  必须严正声明,CSS这块极其混乱,尤其是浏览器的兼容性问题,小菜水平有限,本文很可能有不当之处,望读者见谅。

  其实真不想写这么长的文章,可为了读者能够理解,总是不由自主的想多举些例子。

  为了减轻读者心理压力,本文没有任何CSS、HTML代码,因为现在很多教程上来就是一大堆CSS代码,看到就烦,别说细读了。

 

时间: 2024-08-04 12:07:17

CSS浮动(float,clear)通俗讲解的相关文章

彻底理解浮动float CSS浮动详解 清除浮动的方法

原文:彻底理解浮动float CSS浮动详解 清除浮动的方法  我们把网页的常用的布局格式分为以下三种:   1.标准流.  所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构       2. 浮动流  使我们学习的脱离标准流的第一种方式.会影响我们标准流的排列.所以,我们布局的时候,能用标准流做的,就不用浮动做.       3. 定位流   定位流也是脱离标准流的一种模式.它完全脱离标准流,不会对标

用CSS的float和clear创建三栏液态布局的方法

clear|css|创建 三栏布局是目前最常见的网页布局,主要页内容放在中间一栏,边上的两栏放置导航链接之类的内容.基本布局一般是标题之下放置三栏,三栏占据整个页面的宽度,最后在页的底端放置页脚,页脚也占据整个页面宽度.  绝大多数网页设计者都熟悉传统的网页设计技术,用这些技术可以生成带有表格.创建固定宽度布局或者"液态"(它可以根据用户浏览器窗口宽度自动伸缩)布局的网页. 现在,我们都开始抛弃基于表格的布局技术,许多网络设计者正在从XHTML标记和CSS格式这一新范例中寻找创建三栏布

CSS布局之-浮动(Float)与定位(Position)-让盒子飞!

一. 前言:浮动和定位的原理一定要深刻掌握!(其实每个原理都要深刻掌握!)如果你只是知道有float与position这些属性和他们的值,但是不清楚他们的值到底是怎么回事,那么你在写CSS的时候将会非常的苦恼,由刚开始的热血沸腾的想让盒子飞变成了让自己飞!因为盒子已经不知道飞到哪里去了,时间长了之后就可能会到九宵云外,盒子也找不回来了,您也可能崩溃了--二. 浮动(Float)问题:我们先来说说浮动问题,浮动是为了定位(这里的定位不是position).1. 浮动对邻居有何影响?我们先来做一下准

CSS浮动属性Float入门教程

CSS浮动属性Float入门教程 什么是CSS Float? float是css的定位属性.在传统的印刷布局中,文本可以按照需要围绕图片.一般把这种方式称为"文本环绕".在网页设计中,应用了css的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样.浮动的元素仍然是网页流的一部分.这与使用绝对定位的页面元素相比是一个明显的不同.绝对定位的页面元素被从网页流里面移除了,就像印刷布局里面的文本框被设置为无视页面环绕一样.绝对定位的元素不会 影响其它元素,其它元素也不会影响它,

合理应用 正确理解CSS的float浮动属性

css|浮动 首先我们了解到,CSS网页布局的原理,就是按照HTML代码中对象声明的顺序,以流布局的方式来显示它,而流布局就不得不说到float浮动技术,在HTML中的所有对象,默认分为两种:块元素(block element).内联元素(inline element),虽然也存在着可变元素,但只是随上下文关系确定该元素是块元素或者内联元素.关于块元素和内联元素可以参考这里. 其实CSS的float属性,作用就是改变块元素(block element)对象的默认显示方式.block对象设置了fl

CSS中 Float 的 clear:both 无效的解法

CSS 对於 Float 的 clear:both 每年都会有新的写法. XD 2008.2010 年的 clear:both 写法 不过, 在今年看到此篇: Best Cross-browser CSS Clearfix solution, 跟上述那篇比对起来, 参数多增加了几个, 到底有何差异, 就不细究了~ 直接用就对了. XD CSS 的 float 使用起来蛮方便的, 但是使用完后, 那块空间就等於是消失, 所以需在下面加 clear:left / clear:right / clea

CSS教程:闭合CSS浮动元素的几种方法

按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列.因此当其高度超出包含容器时,一般父容器不会自动伸长以闭合浮动元素.但是有时我们却需要这种自动闭合行为,具体如何处理呢? 网页教学网 有一种做法就是在父容器内再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器.这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签,所以我个人不大喜欢. 后来又有了一种新的方式,使用 :after 伪类动态的

理解CSS浮动元素建立更好网站

css|浮动 层叠式样表(CSS)正迅速成为网页布局与定位的实际标准.它们易于使用.不需要任何特殊的软件.并可在大多数主要的浏览器上应用.但是,正确使用它们需要全面了解一个特殊布局的功能性目的,保证生成的样式表在逻辑和功能上都能正确使用,并能够与各种浏览器和查看设备兼容. 通常,Web开发者往往无法理解式样表的这个特殊问题,导致要在代码中使用大量的"hack"才能获得预期的结果.为解决这个问题,很值得花一些时间来理解CSS的一些核心驱动程序和概念.开发者需要了解的一个最重要的概念是所谓

CSS中Float概念相关文章采撷

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