原作者:Steven Bradley

发表时间:2009年10月15日

原文链接:http://www.vanseodesign.com/css/understanding-css-floats/

翻译:子毅 --------- 将JavaScript进行到底

有效地使用CSS浮动非常容易使人迷惑,并且这可能也是绊倒许多新手的事情之一。然而,一旦你学会了控制浮动元素,它将为你的设计开辟一个全新的世界,使得开发布局更简单。

只要你理解了几个关键点,浮动真的没有想象的那样难。

什么是浮动

浮动是一个盒子移位到当前行的左边或右边。一个浮动(a float)(或者‘被浮动'或者‘正在浮动’的盒子)最有趣的特点是,内容可能会流动到其边沿(或者在有'clear'属性时,被禁止这样做)--- w3.org

浮动属性有三个值:none ,这是个默认值,leftright。正如你可能希望的,它没有center值。在css中,水平居中通过margins来实现。

在直接包含div中,浮动元素会尽可能地向左或向右移动。取决于被声明浮动元素所在的可用宽度,其他元素可能坐落在被浮动元素的下一行,或者流动到其周围

Floats和Positioning的区别

在css中,这里有三种类型的定位方案。来自w3.org
1.正常流 - 在CSS 2.1中,正常流包括块级格式化块盒,行内格式化行内盒,相对定位的块盒或行内盒,还包括在盒子内定位的盒子。
2.浮动 - 在浮动模型中,一个盒子首先按照正常流放置,然后从正常流中取出,并尽可能地向右或向左移位。内容可能会流动到一个浮动元素的边沿。
3.绝对定位 - 在绝对定位模型中,一个盒子完全从正常流中清除(它对后面的兄弟元素没有了影响),并分配一个相对于包含块的位置。
相对定位移动元素到相对于它在整流文档流中的位置。其他元素并不会受影响,它们放置在没有定位时的位置。这导致页面上相对定位的元素可能会覆盖围绕在其周围的元素。
注意,浮动元素虽然已经从正常流中取出,但是它们还会影响围绕在其周围的元素。

怎样有效地使用Floats

这里有两种主要的使用方式
文本流动到一张图片周围
图片是最常见的,但是你可以替换一个不同的元素。这个主意是文本将会包围一些元素
这是最原始的浮动元素的意图。你可以向左或向右浮动一个元素,并允许其他元素,通常是文本流动或围绕到其周围。当以这种方式使用浮动,你需要把浮动元素和图片放在一个包含元素中。
<p>
<img class="alignleft" src="" alt="" width="" height="" />
Lots of text here. Enough to wrap around the image.
</p>
img.alignleft {float: left; margin: 0 10px 10px 0}

在上面的代码中,浮动元素和围绕文本均被包含在一个段落中。

注意在css中我添加了右和底边距。这是一个很好的实践,当浮动一张图片,然后在图片和围绕文本之间添加一些空白。向左浮动的图片添加一些右外边距,向右浮动的元素添加一些左外边距。两者还都添加了一些底外边距。10px是任意的,你也可以选择使用添加内边距。

多栏布局

因为浮动允许两个块级元素(比如div)并列起来(sit up against each other译者拿捏不准),因为很容易用他们来创建多栏。
<div id="wrapper"><div id="left-column"></div><div id="right-column"></div>
</div>
#left-column {float: left}
#right-column {float: left}

将上面的两个div元素均向左浮动,你就可以得到两栏。当然,你还需要保障两个div的宽度可以适应包含div的宽度。另一种选择是,你可以将右边的栏向右浮动,但是我通常倾向于向相同的方向浮动。

在两栏上面添加一个头部div,在下面添加一个底部(需要应用一个clear属性),你就可以得到一个很好并且简单的两栏布局
关于浮动元素的最后一点,始终为浮动元素设置一个宽度。没有设置可能会得到意想不到的结果

清除浮动

通常,你想保证一个元素在一个或多个浮动元素下面。解决方案是使用css clear属性。
clear属性有这些值: left, right, both, none(默认值)和inherit。在实践中,你将会只会使用前三个值,并且多数时候你会使用clear:both
或许,最常用的是清除footer div,使得它坐落在两栏或三栏浮动元素下面

包含浮动(Containing Floats)

首先要考虑的事是当包含浮动时,要保证包含元素足够宽使得浮动元素可以并排在一起。假如你向左浮动了两个元素来创建两栏布局,而两个浮动元素的宽度之和超过了包含元素,其中一个浮动元素将会掉到下一行去。
上面我提到,浮动元素将会从正常文档流中清除。这会导致一个有趣而又令人迷惑的问题,当包含元素中的所有元素都被浮动时。
一种常见的问题是,当你有一个header div ,其中有唯一的一个logo图片元素,并且你使它向左浮动。 你可能会对header应用一张图片背景,但是它并不会出现。
这个问题是,header div只包含一张被浮动的图片,因为这张图片不再属于正常文档流,所以header div 包含空元素,它的高度变成了0,包含自身基本上已经折叠。这里有几个方法来解决这种问题。
你可以显式得为包含div设置一个高度。在上面的header例子中它将会工作得很好,但是它可能不会在所有折叠(collapased)的包含元素中可行。这时你可以在浮动元素下添加一个空div来清除浮动。
<div class="clear"></div>

这将会工作得很好,假如在浮动元素下允许添加一些额外的空间。一些浏览器可能会为这个空div添加一些默认的height, margin, padding等

最后一个方法是在包含元素上使用overflow属性。通常你会使用overflow:hidden,但是取决于你的情况,你可能会倾向于使用overflow:auto,或者使用overflow-y而不是在两个方向上都使用。Overflow会阻止包含元素折叠。

Floats的问题

除了包含元素折叠,这里还有几个浮动问题需要注意
老版本IE浏览器有双边距的bug。假如你向一个方向浮动一个元素,并在同一个方向上为这个元素添加一个margin(left/left,或者right/right),IE将会使用双倍的margin。
一个简单的解决方法是为浮动元素设置display: inline。同时,你也可以使用额外的注释在为IE设置一个不同的margin或者为一个特别的IE版本
另一个常见的问题是,在一个浮动元素内部添加一个元素,添加的这个元素的跨度大于浮动元素的宽度。举个例子,在一个浮动div元素内部,添加一张图片,而这张图片的宽度大于这个div的宽度
取决于浏览器,这可能会导致你的浮动元素大于你想要的宽度,或者这将导致内容与图片重叠。保证浮动元素内部的元素宽度不大于浮动元素宽度。
最后一个需要注意的问题是,底外边距消失。一个浮动元素在另一个浮动元素内部,内部浮动元素的底外边距将会被忽略。这种情况发生时,简单的解决方案是使用padding来替代margin。

总结

当人们开始学习css时,他们倾向于使用绝对和相对定位来进行布局,表面上两者看起来更简单些。通常用浮动来布局是更好的实践,假如你记得几个你应该理解的几个关键点,并能在你的布局中控制好浮动元素。
  • 浮动首先在正常文档流中放置,然后在包含元素内尽可能地移到左边或右边,并从正常文档流中清除。
  • 只要水平方向上有足够的空间,未浮动元素可以在浮动元素周围围绕。而如果没有足够的空间,它们将会在浮动元素下面放置
  • 浮动和定位元素是不同的,它们的表现方式也不同。你可以应用两者到同一个元素
  • 当你想使文档在浮动元素周围围绕,或者想创建多栏布局,你可以使用浮动
  • 当你想使得一个元素在浮动元素下面,或者阻止包含元素折叠,记得清除浮动
  • 为IE找到合适的方法来解决几个常见的问题
我希望这能够为你在使用css时澄清一些疑惑。假如你还有问题,你可以提问,我将尽我最大的努力来回答。下面还有一些其他关于浮动的好文章,你可能会从中找到有帮助的东西。
  • CSS浮动理论:你需要知道的东西
  • 关于浮动的一切
  • Floatorial
译注: 放上另一篇关于浮动,清除的好文章,强烈推荐
杨元:CSS浮动(float,clear)通俗讲解

理解CSS Floats相关推荐

  1. 深入理解CSS margin折叠

    什么是margin折叠? W3C对于外边距叠加的定义: In CSS, the adjoining margins of two or more boxes (which might or might ...

  2. 一个人做饭简单食谱_如何通过两个简单的寿司布局食谱来理解CSS浮动

    一个人做饭简单食谱 by Anabella Spinelli 通过安娜贝拉·斯皮内利(Anabella Spinelli) 如何通过两个简单的寿司布局食谱来理解CSS浮动 (How to unders ...

  3. 理解 CSS 布局和块级格式上下文

    本文的目的是介绍一些概念来帮你增强 CSS 码力.如标题所示这篇文章主要是讲块级格式上下文BFCBlock Formatting Context.你可能没听过这个术语但只要你曾经使用 过CSS 布局你 ...

  4. [转]深入理解CSS中的层叠上下文和层叠顺序

    http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/ 零.世间的道理都是 ...

  5. 深入理解CSS盒模型 - 程序猿的程 - 博客园

    深入理解CSS盒模型 本文是学习中传思客在慕课网开的课程<前端跳槽面试必备技巧>的学习笔记.课程地址:https://coding.imooc.com/class/evaluation/1 ...

  6. 转HTML+CSS总结/深入理解CSS盒子模型

    原文地址:http://www.chinaz.com/design/2010/1229/151993.shtml 前言:前阵子在做一个项目时,在页面布局方面遇到了一点小问题,于是上stackoverf ...

  7. 谁动了我的选择器?深入理解CSS选择器优先级

    深入理解CSS选择器优先级

  8. 一个div 上下两行_web前端工程师如何理解 CSS 布局和块级格式化上下文

    CSS是web前端中的重要内容,很多初学者在学习CSS时都会遇到各种各样的问题,今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文.也许你从未听说过这个术语,但是如果你曾经用 CSS ...

  9. 进一步理解CSS浮动与清除浮动

    本文主要探讨两个问题: 为什么CSS设置浮动会引起父元素塌陷 为什么设置clear:both能清除浮动,并撑开父元素. 起因 CSS的浮动,算是我在写网页时用的最多的属性之一.但要说我对浮动的了解程度 ...

最新文章

  1. 为什么选择图形数据库,为什么选择Neo4j?
  2. Access中字段类型及修改字段类型的SQL语句
  3. vue v-for指令
  4. 多除了1次100的FM BAPI_CURRENCY_CONV_TO_INTERN_9
  5. 鸿蒙WLAN模组联网+解决在Visual Studio Code不能更改Linux文件的问题
  6. php评论倒序 zblog_zblogPHP评论链接加密并美化跳转的完美方法
  7. igs无法分配驱动器映射表_左神算法基础:哈希函数和哈希表
  8. Spring Boot + Thymeleaf + Activiti 快速开发平台项目,附源码!
  9. 页面可用性之浏览器默认字体与CSS 中文字体
  10. 【优化预测】基于matlab天牛须算法优化BP神经网络预测【含Matlab源码 1316期】
  11. GNS3环境搭建与测验实战图文详解
  12. 计算机毕业论文性能测试怎么写,计算机毕业论文撰写技巧
  13. 【Python项目】贪吃蛇小游戏
  14. C# 脚本化实现方式探究
  15. 网站入侵工具之wscan使用详解
  16. 魔力宝贝服务器ip修改,魔力宝贝修改代码一览表
  17. 关于物联网远程控制技术,你了解的有多少?
  18. 30V N通道 MOS管SOT23-6封装 安森德ASDM6802ZC替代AOS万代AO6802方案
  19. C# HttpWebRequest 必须使用适当的属性或方法修改“Host”标头;必须使用适当的属性或方法修改“Date”标头。
  20. 校园超市,百货超市小程序,手把手带你开发一款微信商城小程序,云开发+cms+数据库+js+css+微信小程序

热门文章

  1. 制作Win10系统U盘,安装纯净版Win10系统教程
  2. 剖析nsq消息队列(一) 简介及去中心化实现原理
  3. curl 增加header_curl增加多个头的方法
  4. EXCELt添加单引号
  5. 云服务器上传文件怎么这么慢,百度云上传速度太慢怎么回事_百度云网盘上传速度太慢怎么解决-win7之家...
  6. pygame.USEREVENT创建多个用户事件
  7. 一文教你快速学习搭建属于自己的数据指标体系
  8. 西安电子科大计算机考研调剂,西安电子科技大学电子工程学院2020考研调剂信息...
  9. 开源H5选择器UI组件——Picker.js
  10. CppCheck静态代码检查配置(命令行方式或在VS中使用)