css浮动和清除浮动

浮动存在的原因


在word排版中,文本可以环绕图片。在css中,想要实现文字环绕的效果,只能借助于float,没有其他的替代方式。在实际中,文档的布局经常会使用浮动。

float属性

float属性,默认为none,也就是标准流通常的情况。如果将float的属性的值设置为left或right,元素就会向其父元素的左侧或右侧紧靠。

inherit表示从父元素继承float属性的值。

clear属性

clear 属性定义了元素的哪边上不允许出现浮动元素。在 CSS1 和 CSS2 中,这是通过自动为清除元素(即设置了 clear
属性的元素)增加上外边距实现的。
在 CSS2.1
中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的
上外边框边界刚好在该边上浮动元素的下外边距边界之下。
clear的默认值为none,允许浮动元素出现在两侧。left表示在左侧不允许浮动元素。right表示在右侧不允许浮动元素。both表示在左右两侧均不允许出现浮动
元素。inherit表示从父元素继承clear属性的值。

浮动带来的影响

1)宽度不会自动伸展,而是以内容为准。
2)脱离标准流,而独立存在。
3)对后边标准流的文字产生影响,而使文字环绕它排列。
4)容器中的子div都是浮动的,容器无法获取子div高度,不会自动伸展。如果想自动伸展,可以设置一个标准流的div,并且这个div清除浮动。

清除浮动的方法

所谓的清除浮动,准确的说法是清除浮动带来的影响。主要针对上面的第3点和第4点。
如果你很明确的知道接下来的元素会是什么,可以使用
clear:both; 来清除浮动。这个方法很不错,它不需要
hack,不添加额外的元素也使得它
有良好的语义性。
当然事情并不是都可以这样解决的,工具箱中还是需要另外几个清除浮动的工具。

1)空div方法

从字面来看,是一个空的 div。
。有时可能会用或者一些其他元素,但是 div 是最常用的,因为它没有浏览器默认样式;没有特殊功能,而且一般不会被
css
样式化。这个方
法因为只是为了表现,对页面没有上下文涵义而被纯语义论者嘲笑。诚然,从严格的角度来说他们是对的,但是这个方法有效而且没有任何伤害。

.clearfix {clear:both;}

2)overflow 方法

在父元素上设置 overflow 这个 css 属性。如果父元素的这个属性设置为 auto 或者
hidden,父元素就会扩展以包含浮动。这个方法有着较好的语义性,
因为他不需要额外元素。但是,如果需要增加一个新的 div 来使用这个方法,其实就和空
div 方法一样没有语义了。而且要记住,overflow
属性不是为
了清除浮动而定义的。要小心不要覆盖住内容或者触发了不需要的滚动条。
.fix{overflow:hidden; zoom:1;}

3)after伪类+content 方法

简单清除方法使用了一个聪明的 css 伪选择符(:after)来清除浮动。比起在父元素上设置
overflow,只需要给它增加一个额外的类似于”clearfix”的类。
这个类使用如下
css:
.clearfix{zoom:1;}
.clearfix:after{display:block; content:‘clear‘;
clear:both; line-height:0; visibility:hidden;}

清除浮动的原理

Block Formatting Context可以很好地解释清除浮动的原理。

1)BFC的通俗理解:
  Block Formatting Context(块级格式化上下文)是W3C CSS
2.1
规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。
  简单来讲,我们可以把它理解为,我们在进行盒模型布局的时候,如果一个元素符合了成为BFC的条件,该元素成为一个隔离了的独立容器,元素内部元素会垂直
的沿着其父元素的边框排列,和外部元素互不影响
。比如浮动元素会触发BFC,浮动元素内部的子元素主要受到该浮动元素的影响,而两个浮动元素之间是互不影响的。

  在CSS3 中,BFC 叫做Flow Root。在早期的ie中也有类似的概念haslayout
IE6、7的很多布局产生的bug(如3px间隙、绝对定位的继承宽度)都可以通过触发hasLayout
修复,比较推荐的方法为zoom:1与height:1%,不会破坏已有的样式,相信大家对它并不陌生。

  同样的以往集中在float、绝对定位、margin collaspe中的很多困惑,在理解了bfc后,都能够被我们一一解除 。

2)BFC规范中的定义:
w3c规范对BFC的解释:
  浮动元素和绝对定位元素,不是块级盒子的块容器
(如 inline-blocks, table-cells, 和 table-captions),以及设置了overflow属性(除了visible)的块级盒子

都会为他们的内容创建新的BFC(块级格式上下文)。
  在BFC中,盒子从顶端开始垂直地
一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin
值所决定的。在一个BFC中,两个相邻的块级盒子的垂直外边距
会产生折叠。
  在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)。

3)触发BFC的方法:
float
元素
position(absolute,fixed)
display
(table-cell,table-caption,inline-block)
overflow 除了visible
以外的值(hidden,auto,scroll )
fieldset元素
【注】CSS3中,将Block-formatting-contexts
叫做 flow root。对于触发方式也做了修改:The value of ‘position’ is neither ‘static’ nor
‘relative’;
那么在IE/win中,就依靠那个“hasLayout”了,

4)触发“hasLayout”的方法:
a.浮动元素
b.绝对定位元素
c.display:inline-block
d.zoom:比如常见的设置zoom:1;
e.width/height,比如设置height:1%的方法;
f.overflow/overflow-x/overflow-y
[IE7 新增];
g.max/min-width/height [IE7 新增];

5)BFC的特性

边缘不和浮动元素重叠
不存在collapsing
margins问题
  第一个特性特别有用,因为元素触发了BFC的话,就不会被float元素覆盖,当子元素全部浮动的时候也能够正确地包含了
  第二个margin不会叠加的特性,可以理解为两个处于普通流的盒子,会有margin叠加的问题,是因为他们属于相同的BFC,当他自身创建了一个新的BFC时,这个问题就不存在了

参考文章

http://kayosite.com/remove-floating-style-in-detail.html
http://www.qianduan.net/about-float.html
http://www.cnblogs.com/zorroLiu/archive/2011/04/12/2013901.html
http://www.cnblogs.com/v10258/p/3530290.html
http://www.w3school.com.cn/cssref/pr_class_float.asp
http://www.w3school.com.cn/cssref/pr_class_clear.asp

css浮动和清除浮动,布布扣,bubuko.com

时间: 2024-08-08 22:08:52

css浮动和清除浮动的相关文章

css用clearfix清除浮动

什么是.clearfix .clearfix:after { content: "."; /*内容为"."就是一个英文的句号而已.也可以不写.*/ display: block; /*加入的这个元素转换为块级元素.*/ clear: both; /*清除左右两边浮动.*/ visibility: hidden; /*可见度设为隐藏.注意它和display:none;是有区别的.visibility:hidden;仍然占据空间,只是看不到而已:*/ line-heig

CSS浮动与清除浮动(overflow)例子

在css中浮动与清除浮动功能是我们开发中常用到的一个功能了,下面小编来为各位分析关于CSS浮动与清除浮动(overflow)例子吧. float脱离文本流,可是为什么文字却会有环绕的效果,这点实在是神奇,于是乎就去问了师匠: Normal flow is the way that elements are displayed in a web page in most circumstances. All elements in HTML are inside boxes which are e

CSS基础之清除浮动

CSS基础之清除浮动 本人前端菜鸟一枚,在学习 CSS 过程中发现网上流传的教程参差不齐,要么内容不够详细,要么方法就是错的.本文是在我参考了许多前辈经验的基础上编写的,如有错误的地方,请各位大牛不吝赐教.以下是我总结的三种行之有效而且比较简单实用的方法. 一.父级div定义伪类 :after 代码如下: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8&

CSS中的浮动和清除浮动,梳理一下!

CSS中的浮动和清除浮动,梳理一下! 第一篇就整理整理CSS中很常见的浮动以及清除浮动的一些方式吧. 浮动到底是什么? 浮动核心就一句话:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素.请默念3次! 浮动最初设计的目的并没那么多事儿,就只是用来实现文字环绕效果而已,如下所示: 文字环绕效果 但是早期的前端开发者发现:浮动的元素可以设置宽高并且可以内联排列,是介于inline和block之间的一个神奇的存在,在inline-block出来之前,浮动大行其道.直到inline

【转】CSS中的浮动和清除浮动

以下转自<CSS中的浮动和清除浮动,梳理一下!> 浮动到底是什么? 浮动核心就一句话:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素.请默念3次! 浮动最初设计的目的并没那么多事儿,就只是用来实现文字环绕效果而已,如下所示: 文字环绕效果 但是早期的前端开发者发现:浮动的元素可以设置宽高并且可以内联排列,是介于inline和block之间的一个神奇的存在,在inline-block出来之前,浮动大行其道.直到inline-block出来后,浮动也有它自己独特的使用场景.

关于浮动与清除浮动,你应该知道的

我在做页面布局的时候,多多少少总会受到来自浮动的困扰,因此专门通过实践来总结一下浮动与清除浮动. 首先总结几个基础的概念: 浮动:设置浮动的元素会脱离文档流,不会影响块元素的布局,但是会影响内联元素的排列[通常是文本]: 文档流:在文档流中,块元素会单个元素独占一行 接下来我们通过实际演示来看看关于浮动的那些事儿. 下面是5个div块元素在文档流中一次排列 我们知道浮动元素有几个规律 如果浮动元素的上一个元素也是浮动,那么该元素会与上一个元素排列在同一行,如果行宽不够,后面的元素会被挤到下一行

css中元素的浮动和清除浮动的影响

用float属性可以使元素浮动到包含框内的左右边使文本围绕它,这里创建一个包含框内有段落和一个小的div并被包围: <html> <head> <title><title> <style type="text/css"> div{ border:1px solid red; width:200px; height:200px; } .div1{ background-color:yellow; float:right; wid

Css学习之清除浮动的方法详解

本文和大家分享的主要是css中浮动清除相关内容,一起来看看吧,希望对大家学习css http://www.maiziedu.com/course/web/有所帮助. 当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动. #div { background-color: blu

ife任务刷题总结(一)-css reset与清除浮动

本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初学者也可以按照他们的任务列表,进行刷题.虽然ife名义上是针对初学者,但是我看了一下任务列表,那些任务还并不是那么简单.所以很适合初学者把任务刷一遍,我觉的,把这些任务都刷完,那么前端算是入门了. 对于代码学习来讲,除了实际的去敲,还有其他更好的学习方法吗?因此我计划按照ife的任务都刷一遍,代码提