`
dingchao.lonton
  • 浏览: 49363 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

清除浮动

阅读更多

 

float是网页布局中都要使用的css属性,他为我们灵活布局提供了方便,但同时浮动太多会带来很多麻烦,所以我通常的做法是使用float完后,马上清除他。float的本质是脱离的正常的html文档流,就是由于他脱离的文档流才出现了很多麻烦。

清除浮动(我更喜欢叫闭合浮动元素)的最简单的方法就用<div style=”clear:both;”></div>加入空的标签,但是这种不够语义化,也显得不是很灵活,每次都要加额外的 html。于是有人就想到css里面有一个:after的,这样就不需要加入额外的html了,完全由css完成,于是就有了下面这段比较经典的css代 码:

.clear:after{
content:" ";
display:block;
height:0;
clear:both;
visibility:hidden;}
 

简单的解释一下吧,用after产生的内容是个空格,先display:block,然后高度为0,不让他影响布局,clear:both就是清除 浮动啦,隐藏和height:0差不多就是不要影响布局。但是这么做只对支持:after的浏览器(比较多了ie8、ie9、firefox3.X、 opera、chrom、safari)有作用,要是不支持怎么办呢?

不支持after的浏览器也不是很多了,最常用的可能就只有ie6、ie7了,对于ie6、和ie7的解决就是加一个height:1%;就ok了。好了,貌似所有主流的浏览器的问题都解决了。赶快进入正题。

为什么ie6、7加了个height:1%就ok了?是为了让其has layout。那么has layout是什么呢?

其实haslayout 是Windows Internet Explorer7以下渲染引擎的一个内部组成部分。在InternetExplorer7以下中,一个元素要么自己对自身的内容进行计算大小和组织,要 么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout)。当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算 和定位。简单来说,而不是依赖于祖先元素来完成这些工作。通过 IE Developer Toolbar 可以查看 IE 下 HTML元素是否拥有haslayout,拥有 haslayout的元素,通常显示为“haslayout = -1”。

这里的has layout就是对自己和可能的子孙元素进行尺寸计算和定位来决定父元素的高度,也就是父元素适应了里面内容的高度,这回大家就明白为什么加入一个 height:1%的原因了,当然也可以加入其它的属性使其has layout,如width等。当然加float也可以(float也可以触发layout),但不推荐,不要用floa来清除浮动,这样float又会 产生一个浮动,那样你的页面会很乱,初学者很容易犯得一个错误。

其实清除浮动的本质就是产生一个块级格式化范围,它会自动清除内部的浮动,首先强调一下块级格式化范围不 是ie6、7所独有的,而是属于css的一种现象。关于边距重叠大家应该都比较清楚,两个普通的div边距,如果是两个正数,那么他们实际的边距是取他们 中最大的,如果有一个是负数就把两个值加起来,这些就是由于没有产生块级格式化的原因。如果产生了块级格式化他们就将不会共享边距,他们的会有各自的边 距,他们的实际边距就会相加。

那么当一个元素产生了块级格式化一个没有会是什么情况呢?

除了ie6、7认为只要有一个产生了块级格式化就不应该和其他共享边距,其他的浏览器(ie8 ie9 Firefox chrom Safari opera)都是认为可以边距共享的。我不知道这是不是又和ie的haslayou有关。

由于float会产生块级格式化范围,所以很多刚开始学css的人就会用float来产生块级格式化范围来清除浮动和避免边距重叠。但float很恶心啊!

关于has layout和block formatting context我这里先不多说了,以后会对他们单独解释。最后回归清除浮动,对于任何浏览器只要产生块级格式化范围就可以了,对于has layout浏览器要让浮动的父级元素has layout。知道这两点以后各种清除浮动的方法就很好懂了。

分享到:
评论

相关推荐

    HTML5 清除浮动

    清除浮动是一个解决CSS布局问题的关键技术,特别是当我们在处理浮动元素时。 在CSS中,浮动(float)属性主要用于创建多列布局或让文本环绕图像。当一个元素被设置为浮动,它会脱离正常的文档流,向左或向右移动,...

    css中3种清除浮动方法

    为了解决这个问题,CSS提供了多种清除浮动的方法。本文将详细讲解三种清除浮动的方法。 1. **传统方式:添加额外的 clearing div** 在浮动元素之后,可以添加一个额外的`&lt;div&gt;`并为其设置样式`clear: both;`。这...

    清除浮动和解决margin的塌陷的方法

    浮动的原理 ,介绍清除浮动几种方法。以及margin塌陷的产生和解决margin的塌陷的方法

    清除浮动动态演示.html

    浮动的属性虽然方便使用,但是在使用这种属性时,也存在着一种弊端,那就是当子元素设置了float属性之后,且父元素的宽度没有设置...所以这里我们说的清除浮动,指的是清除子盒子添加浮动效果后造成的父盒子高度塌陷。

    导航条字体加粗 清除浮动 minyout 4.390v

    COME-IN FROM 导航条字体加粗 清除浮动 minyout 4.390v.

    清除浮动示例_xiongxiong.html

    浮动的属性虽然方便使用,但是在使用这种属性时,也存在着一种弊端,那就是当子元素设置了float属性之后,且父元素的宽度没有设置...所以这里我们说的清除浮动,指的是清除子盒子添加浮动效果后造成的父盒子高度塌陷。

    清除浮动.pdf

    解决这个问题,通常需要采用一些技术来“清除浮动”。 1. **清除浮动(Clearing Floats)**: - 最传统的方法是在父容器内部添加一个额外的标签,如`&lt;div class="clear"&gt;&lt;/div&gt;`,并设置`clear: both;`。这种方法...

    清除浮动的几种方法PPT学习教案.pptx

    清除浮动的几种方法 清除浮动是指在CSS中,浮动元素脱离文档流,导致父级元素无法自动获取到高度的问题。清除浮动是每一个web前台设计师必须掌握的机能。下面将介绍几种清除浮动的方法: 1. 对父级设置适合的CSS...

    css清除浮动的方法有哪些?.docx

    CSS清除浮动是为了应对浮动元素对周围元素布局的影响,特别是防止父元素因子元素浮动而高度塌陷的问题。在Web开发中,有多种方法可以清除浮动,以下将详细介绍四种常见的清除浮动的方法。 一、使用带有`clear`属性...

    xhtml+css清除浮动的3种方法

    ### XHTML + CSS清除浮动的三种方法 在XHTML与CSS页面重构过程中,处理浮动元素是一项关键技术。当元素被设定为浮动后,它们会脱离正常的文档流,并向左或向右移动,直到碰到容器边缘或其他浮动元素。这为布局带来...

    CSS技术:清除浮动的最优方法.pdf

    因此,需要使用清除浮动的技术来解决这一问题。本文档将探讨清除浮动的多种方法,并分析其优缺点,以找出所谓的“最优方法”。 首先,浮动(float)属性是CSS中用于布局的主要属性之一。当元素设置为浮动状态时,它...

    清除浮动.docx

    为了解决这个问题,有多种清除浮动的方法。 1. **传统方法:额外元素清除** 这是最原始的方法,即在父容器内添加一个额外的元素,通常使用`&lt;div class="clear"&gt;&lt;/div&gt;`,并为其设置样式`clear:both`。这样,这个...

    CSS清除浮动_2种方法源代码.zip

    本文将详细讲解两种常见的CSS清除浮动的方法,并通过提供的源代码进行实例解析。 ### 方法一:clearfix类 `clearfix` 类是最常用的清除浮动方法之一,它并不需要添加额外的HTML元素,而是利用CSS伪类来解决。这种...

    H5 溢出隐藏和缩略图和清除浮动

    在本话题中,我们将探讨“H5溢出隐藏”、“缩略图”和“清除浮动”这三大关键概念,以及它们在实际网页布局中的应用。 一、H5溢出隐藏 在H5中,“溢出隐藏”是通过CSS来实现的一种布局技巧,用于处理内容超出容器...

    div+css清除浮动

    div+css清除浮动

    清除浮动的几种方法.md

    清除浮动的几种方法.md

    浮动从何而来 我们为何要清除浮动 清除浮动的原理是什么

    我们为何要清除浮动?清除浮动的原理是什么?本文将一步一步地深入剖析其中的奥秘,让浮动使用起来更加得心应手。 一、清除浮动 还是 闭合浮动 (Enclosing float or Clearing float)? 很多人都已经习惯称之为清除...

    CSS的clear属性清除浮动的基本用法示例

    清除浮动是指通过CSS样式来防止浮动元素对周围元素的影响,确保非浮动元素或后续元素能够正确地在页面上定位,避免内容溢出容器。这通常是为了恢复父容器的正常高度计算,使其能完全包裹住内部的浮动元素。 **使用`...

    css 完美清除浮动的两种解决方案

    为了解决这个问题,我们通常需要“清除浮动”。本文将介绍两种常见的清除浮动的方法:使用`clear:both`和使用伪元素。 1. **使用`clear:both`** 在HTML中,我们可以创建一个空的`div`元素,并为其添加`clear:both`...

Global site tag (gtag.js) - Google Analytics