篇一:浮动后要注意清除浮动
让每一名学员高薪就业
www.itsource.cn
浮动的运用以及清除浮动带来的影响
浮动对于大多数初学者来说都是一个不容忽视的难点,有些初学者光知道浮动而不知道浮动的真正意义。下面我们看看到底是怎么回事。
1、浮动创建初衷
在浮动还没出现的时候,当时我们的网页排版还处于一个蛮荒的时代,整个网页中有一两张图片出现都很不错了,而且还是那种图片一行文字一行的排版,如下图:
如果你想布局成左边图片右边文字或者布局成我们平时做笔记的方式,这是候浮动就出现了。所以浮动创建的最初目的,就是为了解决文字环绕效果,听起来来有点抽象,那具体是什么呢。我们看看下面这张图:
让每一名学员高薪就业
www.itsource.cn
究竟浮动后是怎样造成这种现象的呢,我们看看下面这两张图就知道了,如图下:
让每一名学员高薪就业
www.itsource.cn
浮动最初创建的时候是为了解决文字环绕效果,而文字环绕效果会对父元素的高度造成破坏,从而塌陷。简而言之:浮动具有破坏性,导致父元素高度塌陷。而我们常常认为浮动造成父元素高度塌陷是一种bug,这里要告诉大家:这不是bug,而是标准。
2、浮动实际开发中的运用:
通常我们要么左浮动,要么右浮动
让每一名学员高薪就业
www.itsource.cn
3、清除浮动:
我们通常都在说清除浮动,其实应该是清除浮动所带来的影响。
常见的清除浮动的三种方式:
1)在紧接着浮动框的后面新建一个div然后引入样式clear:both代码:
让每一名学员高薪就业
www.itsource.cn
效果:
注意:在页面中增加冗余标签,违背了语义网的原则,对后期获取元素也增加了不必要的对象
2)在父级元素中引入overflow:hidden,
这种方式有前提条件:
必须所有的子元素都浮动
父元素不设置高度
代码:
让每一名学员高薪就业
www.itsource.cn
效果:
注意:一旦子元素的大小超过父容器的大小,就会出显示问题
3)在父元素中使用:after伪选择符,就可以在父容器的尾部自动创建一个子元素
代码:
"content:"020";"是在父容器的结尾处放一个空白字符,"height:0;"是让这个这个空白字符不显示出来,让每一名学员高薪就业
www.itsource.cn
"display:block;clear:both;"是确保这个空白字符是非浮动的独立区块。
效果:
具体用哪种方式清除浮动所带来的影响根据情况而定。
篇二:浮动后要注意清除浮动
清除浮动的方法
清除浮动(ClearingFloat)-解决布局问题的有效方法
清除浮动(ClearingFloat)是一种有效的解决布局问题的方法。在网页设计中,有时候会出现浮动元素,而这些元素却会影响网页的布局效果。这时,我们就需要使用清除浮动的方法来解决这些问题。
清除浮动的原理是,利用浮动元素的父元素来清除它的浮动,以达到让它重新按正常的布局流动的效果。要实现这一点,我们需要给浮动元素的父元素添加一个clear属性,可以是left,right,both,而不是给浮动元素添加clear属性,因为这样做的话,它会把自身的浮动清除掉,而不会影响到它的父元素。
清除浮动的方法有很多,可以使用css的clear属性,也可以使用伪元素清除浮动,或者使用clearfix类来实现清除浮动的效果。
使用CSS的clear属性来清除浮动,只需要在浮动元素的父元素中添加clear:both即可。而使用伪元素清除浮动,只需要在浮动元素的父元素中添加:after,然后设置
content:’‘,display:table就可以清除浮动了。最后,使用clearfix类来实现清除浮动,只需要在浮动元素的父元素中添加.clearfix并且添加以下样式就可以了:
.clearfix{
overflow:auto;
zoom:1;
总之,清除浮动是一种有效的解决布局问题的方法,可以用来解决一些浮动元素影响布局的问题。当然,清除浮动的方法也不是万能的,在一些特定的场景下,还是有可能会出现问题的。因此,为了避免出现问题,我们最好在使用清除浮动的时候先测试一下,谨慎使用。
篇三:浮动后要注意清除浮动
为什么要清除浮动,什么时候清除浮动,怎样清除浮动?为什么要清除浮动,什么时候该清除浮动:情况?:当容器的?度未定,且容器内有浮动的元素,在这种情况下,容器的?度不能?动伸长以适应内容的?度,使得内容溢出到容器外?影响布局。此时应该清除浮动。情况?:当浮动元素应占据的位置被未浮动元素占据,从?影响布局的情况下,应该清楚浮动元素的浮动,使其占据应有位置。情况三:元素浮动后,就不在整个?档流的管辖范围了,那么它之前所存在的?容器的空间就不存在了,?此时?元素就会认为????没有任何内容,于是,?容器则没有?度,从?影响页?布局。(同情况?)
如何清除浮动?别着急,现在企业??采?的清除浮动?法综合法,?名内墙法2.0.元素的类名:after{content:”.”;display:block;clear:both;height:0;overflow:hidden;visibility:hidden;}
给浮动塌陷的盒?添加?个:after伪类
这种?法在各个?型项?上都有出现过,可谓清除浮动的万?油呀!
篇四:浮动后要注意清除浮动
浮动从何?来我们为何要清除浮动清除浮动的原理是什么浮动(float),?个我们即爱?恨的属性。爱,因为通过浮动,我们能很?便地布局;
恨,浮动之后遗留下来太多的问题需要解决,特别是IE6-7(以下?特殊说明均指windows平台的IE浏览器)。也许很多?都有这样的疑问,浮动从何?来?我们为何要清除浮动?清除浮动的原理是什么?本?将?步?步地深?剖析其中的奥秘,让浮动使?起来更加得?应?。
?、清除浮动
还是
闭合浮动
(EnclosingfloatorClearingfloat)?
很多?都已经习惯称之为清除浮动,以前我也?直这么叫着,但是确切地来说是不准确的。我们应该?严谨的态度来对待代码,也能更好地帮助我们理解开头的三个问题。
1)清除浮动:清除对应的单词是clear,对应CSS中的属性是clear:left|right|both|none;
2)闭合浮动:更确切的含义是使浮动元素闭合,从?减少浮动带来的影响。
两者的区别
请看优雅的Demo通过以上实例发现,其实我们想要达到的效果更确切地说是闭合浮动,?不是单纯的清除浮动,在footer上设置clear:both清除浮动并不能解决warp?度塌陷的问题。
结论:?闭合浮动?清除浮动更加严谨,所以后?中统?称之为:闭合浮动。
?、为何要清除浮动?
要解答这个问题,我们得先说说CSS中的定位机制:普通流,浮动,绝对定位
(其中"position:fixed"是"position:absolute"的?个?类)。
1)普通流:很多?或者?章称之为?档流或者普通?档流,其实标准?根本就没有这个词。如果把?档流直译为英?就是documentflow,但标准?只有另?个词,叫做
普通流
(normalflow),或者称之为常规流。但似乎?家更习惯?档流的称呼,因为很多中?翻译的书就是这么来的。?如《CSSMastery》,英?原书中?始?终都只有普通流normalflow(普通流)
这?词,从来没出现过documentflow(?档流)
2)浮动:浮动的框可以左右移动,直?它的外边缘遇到包含框或者另?个浮动框的边缘。浮动框不属于?档中的普通流,当?个元素浮动之后,不会影响到
块级框的布局?只会影响内联框(通常是?本)的排列,?档中的普通流就会表现得和浮动框不存在?样,当浮动框?度超出包含框的时候,也就会出现包含框不会
?动伸?来闭合浮动元素(“?度塌陷”现象)。顾名思义,就是漂浮于普通流之上,像浮云?样,但是只能左右浮动。
正是因为浮动的这种特性,导致本属于普通流中的元素浮动之后,包含框内部由于不存在其他普通流元素了,也就表现出?度为0(?度塌陷)。在实际布局中,往往这并不是我们所希望的,所以需要闭合浮动元素,使其包含框表现出正常的?度。
绝对定位就不多说了,不在本?讨论范围之内,下回分解。
三、清除浮动的原理——了解hasLayout和Blockformattingcontexts先看?下清理浮动的各种?法:
1)添加额外标签
这是在学校?师就告诉我们的?种?法,通过在浮动元素末尾添加?个空的标签例如,其他标签br等亦可。
复制代码代码如下:
篇五:1)添加额外标签
in{float:left;}.side{float:right;}.footer/[code]优点:通俗易懂,容易掌握缺点:可以想象通过此?法,会添加多少?意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦,这是坚决不能忍受的,所以你看了这篇?章之后还是建议不要?了吧。
2)使?br标签和其??的html属性
这个?法有些?众,br有clear=“all|left|right|none”属性
[code]
篇六:2)使?br标签和其??的html属性
in{float:left;}.side{float:right;}缺点:同样有违结构与表现的分离,不推荐使?
3)?元素设置overflow:hidden通过设置?元素overflow值设置为hidden;在IE6中还需要触发hasLayout,例如zoom:1;
复制代码代码如下:
篇七:3)?元素设置overflow
in{float:left;}.side{float:right;}.footer优点:不存在结构和语义化问题,代码量极少缺点:内容增多时候容易造成不会?动换?导致内容被隐藏掉,?法显?需要溢出的元素;04年POPO就发现overflow:hidden会导致中键失效,这是我作为?个多标签浏览控所不能接受的。所以还是不要使?了
4)?元素设置overflow:auto属性
同样IE6需要触发hasLayout,演?和3差不多
优点:不存在结构和语义化问题,代码量极少
缺点:多个嵌套后,firefox某些情况会造成内容全选;IE中mouseover造成宽度改变时会出现最外层模块有滚动条等,firefox早期版本会?故产?focus等,请看
嗷嗷的Demo,不要使?
5)?元素也设置浮动
优点:不存在结构和语义化问题,代码量极少
缺点:使得与?元素相邻的元素的布局会受到影响,不可能?直浮动到body,不推荐使?
6)?元素设置display:table优雅的Demo优点:结构语义化完全正确,代码量极少
缺点:盒模型属性已经改变,由此造成的?系列问题,得不偿失,不推荐使?
7)使?:after伪元素
需要注意的是:after是伪元素(Pseudo-Element),不是伪类(某些CSS?册??称之为“伪对象”),很多清除浮动?全之类的?章都称之为伪类,不过csser要严谨?点,这是?种态度。
由于IE6-7不?持:after,使?zoom:1触发hasLayout。
该?法源?于:HowToClearFloatsWithoutStructuralMarkup原?全部代码如下:复制代码代码如下:
优点:结构和语义化完全正确,代码量居中
缺点:复??式不当会造成代码量增加
?结
通过对?,我们不难发现,其实以上列举的?法,??有两类:
其?,通过在浮动元素的末尾添加?个空元素,设置clear:both属性,after伪元素其实也是通过content在元素的后??成了内容为?个点的块级元素;
其?,通过设置?元素overflow或者display:table属性来闭合浮动,我们来探讨?下这??的原理。
在CSS2.1??有?个很重要的概念,但是国内的技术博客介绍到的?较少,那就是Blockformattingcontexts(块级格式化上下?),以下简称BFC。
CSS3??对这个规范做了改动,称之为:flowroot,并且对触发条件进?了进?步说明。
那么如何触发BFC呢?
float除了none以外的值
overflow除了visible以外的值(hidden,auto,scroll)
display(table-cell,table-caption,inline-block)position(absolute,fixed)
fieldset元素
需要注意的是,display:table本?并不会创建BFC,但是它会产?匿名框(anonymousboxes),?匿名框中的display:table-cell可以创建新的BFC,换句话说,触发块级格式化上下?的是匿名框,?不是display:table。所以通过display:table和display:table-cell创建的BFC效果是不?样的。
fieldset元素在www.w3.org??前没有任何有关这个触发?为的信息,直到HTML5标准?才出现。有些浏览器bugs(Webkit,Mozilla)提到过这个触发?为,但是没有任何官?声明。实际上,即使fieldset在?多数的浏览器上都能创建新的块级格式化上下?,开发者也不应该把这当做是理所当然的。CSS2.1没有定义哪种属性适?于表单控件,也没有定义如何使?CSS来给它们添加样式。?户代理可能会给这些属性应?CSS属性,建议开发者们把这种?持当做实验性质的,更?版本的CSS可能会进?步规范这个。
BFC的特性:
1)块级格式化上下?会阻?外边距叠加
当两个相邻的块框在同?个块级格式化上下?中时,它们之间垂直?向的外边距会发?叠加。换句话说,如果这两个相邻的块框不属于同?个块级格式化上下?,那么它们的外边距就不会叠加。
2)块级格式化上下?不会重叠浮动元素
根据规定,?个块级格式化上下?的边框不能和它??的元素的外边距重叠。这就意味着浏览器将会给块级格式化上下?创建隐式的外边距来阻?它和浮动元素的外边距叠加。由于这个原因,当给?个挨着浮动的块级格式化上下?添加负的外边距时将会不起作?(Webkit和IE6在这点上有?个问题——可以看这个测试?例)。
3)块级格式化上下?通常可以包含浮动
详见:W3CCSS2.1-10.6.7"Auto"heightsforblockformattingcontextroots通俗地来说:创建了BFC的元素就是?个独?的盒?,??的?元素不会在布局上影响外?的元素,反之亦然,同时BFC任然属于?档中的普通流。
?此,您或许明?了为什么overflow:hidden或者auto可以闭合浮动了,真是因为?元素创建了新的BFC。对于张鑫旭在对《overflow与zoom”清除浮动”的?些认识
》??中对于?包裹来解释闭合浮动的原理,我觉得是不够严谨的,?且没有依据。并且说道“Firefox等浏览器并没有haslayout的概念”,那么现代浏览器是有BFC的,从表现上来说,hasLayout可以等同于BFC。
IE6-7的显?引擎使?的是?个称为布局(layout)的内部概念,由于这个显?引擎??存在很多的缺陷,直接导致了IE6-7的很多显?bug。当我们说?个元素“得到layout”,或者说?个元素“拥有layout”的时候,我们的意思是指它的微软专有属性hasLayouthttp://msdn.microsoft.com/worksh...rties/haslayout.asp为此被设为了true。IE6-7使?布局的概念来控制元素的尺?和定位,那些拥有布局(havelayout)的元素负责本?及其?元素的尺?设置和定位。如果?个元素的hasLayout为false,那么它的尺?和位置由最近拥有布局的祖先元素控制。
触发hasLayout的条件:
position:absolutefloat:left|rightdisplay:inline-blockwidth:除“auto”外的任意值
height:除“auto”外的任意值
(例如很多?清除浮动会?到height:1%)
zoom:除“normal”外的任意值(MSDN)http://msdn.microsoft.com/worksh...properties/zoom.aspwriting-mode:tb-rl(MSDN)http://msdn.microsoft.com/worksh...ies/writingmode.asp在IE7中,overflow也变成了?个layout触发器:
overflow:hidden|scroll|auto(这个属性在IE之前版本中没有触发layout的功能。)
overflow-x|-y:hidden|scroll|auto(CSS3盒模型中的属性,尚未得到浏览器的?泛?持。他们在之前IE版本中同样没有触发layout的功能)
hasLayout更详细的解释请参见old9翻译的?名??的《Onhavinglayout》??(英?原?:http://www.satzansatz.de/cssd/onhavinglayout.htm),由于old9博客被墙,中?版地址:
IE8使?了全新的显?引擎,据称不使?hasLayout属性了,因此解决了很多深恶痛绝的bug。
综上所述:
在?持BFC的浏览器(IE8+,firefox,chrome,safari)通过创建新的BFC闭合浮动;
在不?持BFC的浏览器
(IE6-7),通过触发hasLayout闭合浮动。
四、闭合浮动?法——精益求精
上?已经列举了7种闭合浮动的?法,通过第三节分析的原理,我们发现其实更多的:display:table-cell,display:inline-block等只要触发了BFC的属性值都可以闭合浮动。从各个???较,after伪元素闭合浮动?疑是相对?较好的解决?案了,下?详细说说该?法。
复制代码代码如下:.clearfix:after{content:".";display:block;height:0;visibility:hidden;clear:both;}.clearfix{*zoom:1;}1)display:block使?成的元素以块级元素显?,占满剩余空间;2)height:0避免?成内容破坏原有布局的?度。
3)visibility:hidden使?成的内容不可见,并允许可能被?成内容盖住的内容可以进?点击和交互;4)通过content:"."?成内容作为最后?个元素,?于content??是点还是其他都是可以的,例如oocss??就有经典的content:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",有些版本可能content??内容为空,?丝冰凉是不推荐这样做的,firefox直到7.0content:”"仍然会产?额外的空隙;
5)zoom:1触发IEhasLayout。
通过分析发现,除了clear:both?来清除浮动的,其他代码??都是为了隐藏掉content?成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。
精益求精?案?:
相对于空标签闭合浮动的?法代码似乎还是有些冗余,通过查询发现Unicode字符?有?个“零宽度空格”,也就是U+200B,这个字符本?是不可见的,所以我们完全可以省略掉visibility:hidden了
复制代码代码如下:.clearfix:after{content:"\200B";display:block;height:0;clear:both;}.clearfix{*zoom:1;}.精益求精?案?:
由NicolasGallagher?湿提出来的,原?:Anewmicroclearfixhack,该?法也不存在firefox中空隙的问题。
复制代码代码如下:/*Formodernbrowsers*/.cf:before,.cf:after{content:"";display:table;}.cf:after{clear:both;}/*ForIE6/7(triggerhasLayout)*/.cf{zoom:1;}需要注意的是:
上?的?法?到了
:before伪元素,很多?对这个有些迷惑,到底我什么时候需要?before呢?为什么?案?没有呢?其实它是?来处理margin边距重叠的,由于内部元素float创建了BFC,导致内部元素的margin-top和
上?个盒?的margin-bottom发?叠加。如果这不是你所希望的,那么就可以加上before,如果只是单纯的闭合浮动,after就够了!并不是如同?漠《ClearFloat》??所说的:但只使?clearfix:after时在跨浏览器兼容问题会存在?个垂直边距叠加的bug,这不是bug,是BFC应该有的特性。
在实际开发中,改进?案?由于存在Unicode字符不适合内嵌CSS的GB2312编码的页?,使??案7完全可以解决我们的需求了,改进?案?等待?家的进?步实践。?案3、4通过overflow闭合浮动,实际上已经创建了新的块级格式化上下?,这将导致其布局和相对于浮动的?为等发??系列的变化,清除浮动只不过是?系列变化中的?个作??已。所以为了闭合浮动去改变全局特性,这是不明智的,带来的风险就是?系列的bug,?如firefox早期版本产?focus,截断绝对定位的层等等。始终要明?,如果单单只是需要闭合浮动,overflow就不要使?,?不是某些?章所说的“慎?”。
前前后后花了三天写完了这篇?章。如果觉得本?对您有帮助,您的留?就是对我最?的?持,同时由于精?有限,欢迎指出?中错误与不?,共勉之!
篇八:浮动后要注意清除浮动
CSS3中三种清除浮动(float)影响的?式float是HTML中布局的??关键,很多难题?旦?上float都能很愉快地解决。但是凡是好?的,也容易出错。?如当?元素都为float时,其?元素会受影响,或者偶尔会发现??某个div的?度变成了0等等。float的特性1.?字环绕?字环绕效果是很明显的,这?要注意?个地?:浮动的块虽然脱离的正常的?档流,但是还会占有正常?档流的?本空间,可以看到上?第?种图,p的区域其实是顶到了img的底下的,因为float让img脱离?档流,但是p上的?字却没有顶过去,也就是说p上的?部分?字空间仍然被img占据着,所以从这?也可以看出float的脱离?档流不是完全脱离。2.包裹性所谓的包裹性是指,使?float的元素会?动加上?个块级框,也就是可以像块级元素那样设置宽?float的破坏性主要是指它会使?容器的?度塌陷,也就是?元素在?度计算的时候会忽略浮动的元素。正是由于这个破坏性,为了布局能正常布局,经常需要清除浮动。清除浮动并不是清理??的浮动的效果,?是清理上?接触到的浮动元素的浮动,使浮动元素后?的元素不接受它们的浮动,按照正常的元素流进?布局。下?介绍清除浮动的三个?式:1.增加?个空的标签(div或br等都?),通过clear:both语句消除float对后?元素的影响。.main{float:left;}.side{float:right;}.footer缺点:需要加很多?意义的标签,对后期维护不利。如果是?程序,那没关系,但如果是??程,还是慎?。2.使?:after伪元素.clearIt{zoom:1;}.clearIt:before;
/*加上before可以防?浏览器顶部的空?崩溃(就是上?个div的margin-bottom和下边的margin-top会发?叠加)*/.clearIt:after{content:".";display:block;
height:0;visibility:hidden;
clear:both;}/*display:block使?成的元素以块级元素显?,占满剩余空间;height:0避免?成内容破坏原有布局的?度。visibility:hidden使?成的内容不可见,并允许可能被?成内容盖住的内容可以进?点击和交互;通过content:"."?成内容作为最后?个元素,?于content??是点还是其他都是可以的,例如oocss??就有经典的content:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",有些版本可能content??内容为空,?丝冰凉是不推荐这样做的,firefox直到7.0content:”"仍然会产?额外的空隙;zoom:1触发IEhasLayout。*/3.在?元素设置overflow:auto.main{float:left;}.side{float:right;}.footer