关于浮动与清除浮动.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于浮动与清除浮动   在css2里,浮动(float)这个属性是个经典又诡异的一个属性,历来对它的争议就不断。   从语义上讲:   float这个属性顾名思义,既然叫浮动,咱们不妨把它与船体在水中的浮动联系起来。即可以这样假设,document为一个水 箱,document的文档流就是水箱里的一层水,这层水的厚度无限接近于零,而所有在文档流中的元素都是在这层水中进行排列的,他们都有各自的占位空 间,所以不允许有任何的交叠。   而,float浮动,就恰好使原本在文档流这层水中的元素浮于水的表面(即脱离的文档流),说法不一定准确,因为浮动是否是真正的脱离的文档流 还有待考究。一旦脱离的文档流后,该元素的占位空间自然也就没有了,但是这里会有一个诡异的地方,所谓的没有占位空间,那么就应该是元素可以自由的交叠。 比如像position:absolute的那种。但是对于浮动的元素而言,会稍微有些区别。   浮动的元素,高度会塌陷,这可以理解为占位空间消失造成的,同时高度塌陷也是我们布局中需要清除浮动的最重要的原因之一。但是浮动的元素宽度却处在一个“半塌陷”的状态,为什么说是“半塌陷”呢?请看下面图例: 这是在没有浮动的情况下,上面代码表现。 如果灰色的区域左浮动的话,会是下面的表现: 且慢,如果说宽度的占位还在的话,那么我们不妨对p标签设置个margin-left或者padding-left看看如下: 其实运行结果和没有设置padding值一样的。除非padding-left或者margin-left的值大于浮动块宽度(200px)时,我们再看看:如下: 这下可以看出来了,这就是我说“半塌陷”的原因,说是没塌陷吧,那么p元素就应该距浮动灰块250px才对,说是塌陷了吧,那 么p在没有padding-left和margin-left值的时候都应该和浮动块重叠才对。这是float的诡异处之一。   按本人的理解,其实可以这样解释这个现象,这里要引入一个自创的词:“占位空间层级”。是的,引入占位空间层级这个概念之后,针对float这 个元素,我们不妨可以这样假定:没有浮动的元素(即在文档流中的)的占位空间层级为0,有浮动的元素(指float:left或right;不包括 none)的占位空间层级为1。这样就可以解释刚才我们的p的padding和margin值都是在层级为0的占位空间中解析的,而所有 的浮动元素由于都在同一个层级的占位空间中,所以浮动元素之间的margin和padding值的解析是和我们正常理解是一致的。至于为什 么p不和浮动块重叠,那是因为占位空间层级的分界线和文档流基线不是同一个!以下为一个简易的示意图:   清除浮动:   说了这么多浮动的东西,其实我们平时接触最多的问题,还是清除浮动的问题。当初css的发明者之所以会创造clear这个属性,就是因为 float太过诡异,与文档流的层级标准都不统一,导致很难包容float所导致的负面影响,所以只能再造一个clear属性,强制清除float带来的 后遗症。   说到这里,我很同意一为同仁说的,我们平时说的“清除浮动”准确的说应该是“清除浮动造成的影响”,真正的清除浮动应该是float:none;?   说到清除浮动造成的影响,又不得不说一下Dom元素的“包裹性”,因为在我们的实际编码中,用clear来清除浮动已经很少见了。我记得很早 前,那时候清除浮动就是在需要清除浮动的元素下面加个空元素,然后样式设置为clear:left或者right或both,但在如今越来越讲究web标 准以及代码结构和语义化的时代,用空标签这种既破坏结构有没语义的方法已经显得很傻很天真了。因为经过人们不懈的实践,发现用包裹性来清除浮动造成的影响 是更好的一种方式。   其他的先不多说,先看看除了空标签清除浮动外的其他几种方式吧。 view sourceprint? 01 /* 通过overflow的方式 */ 02 .overflow-clear{ 03 ????overflow:auto;/*或者 hidden,scroll,不包括visible */ 04 ????_height:1%; /*设置高度是为了ie6获取haslayout */ 05 } 06 /* display 的方式*/ 07 .display-clear{ 08 ????display:inline-block; 09 } 10 /* position的方式 */ 11 .position-clear{ 12 ????position:absolute; 13 } 14 /* 浮动方式 */ 15 .float-clear{ 16 ????????float:left; /*

您可能关注的文档

文档评论(0)

qbjzmxj5904 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档