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

清除浮动大全

 
阅读更多

1、overflow:hidden 缺点是如果这个元素里面的元素定义绝对定位的,只能在元素内显示,如果超出这个父元素就显示不出了

 

2、多添加一个div,定义clear:both

 

3、.clearfix:after{content:".";display:block;height:0;font-size:0;clear:both;visibility:hidden} .clearfix{zoom:1}

 

 

从清除浮动(clear float)谈拥有布局(has layout)与块级格式化范围(block formatting context)

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。知道这两点以后各种清除浮动的方法就很好懂了。

分享到:
评论

相关推荐

    CSS 清除浮动方法大全

    CSS 清除浮动是网页布局中至关重要的一个概念,主要是为了解决元素浮动后对其周围元素产生的影响,防止内容被浮动元素覆盖或布局混乱。浮动元素通常用于创建多列布局,但如果不进行适当的清除,可能会导致父元素高度...

    CSS清除浮动方法大全(小结)

    CSS清除浮动是前端开发中常见的一个问题处理方法,它主要针对的是当子元素使用了浮动(float)属性后,无法自动撑开父元素高度的问题。这是因为浮动元素脱离了标准文档流,父元素无法检测到其高度,从而导致布局问题...

    web前端开发基础作业考核试题大全.pdf

    1. clear:both 的含义是将内容清除浮动。 2. 在 CSS 中,关于 BOX 的 margin 属性正确的叙述是,margin 属性的参数有 margin-left、margin-right、margin-top、margin-bottom。 3. CSS 是利用 div 标签构建网页布局...

    css浏览器兼容问题大全

    8. **清除浮动**:为防止浮动元素影响非浮动元素,通常需要“清除浮动”。一种常见方法是使用`clear: both;`,或者创建一个清浮动的`div`,如`;"&gt;&lt;/div&gt;`。另外,使用`display: flex;`或`display: grid;`也可以实现...

    jQuery侧面浮动对联广告

    // 清除 top 值 } }); }); ``` 四、优化与兼容性 为了确保在不同浏览器和设备上的兼容性,我们可能需要使用 jQuery 的 `$.fn.scroll` 替换原生的 `window.onscroll` 事件,并考虑使用 `$.fn.offset()` 的替代...

    CSS兼容性大全.docx

    浮动元素可能导致后续非浮动元素浮动上去,为避免这种情况,可以使用`clear:both`或者创建一个空的`div`,并赋予`clear:both`属性来清除浮动。另一种方法是使用CSS的`::after`伪元素来清除浮动。 9. **自适应高度...

    DIVCSS各网页兼容技巧大全.pdf

    9. **浮动闭合和清除浮动**:为了防止浮动元素影响非浮动元素的位置,可以使用`clear:both`或创建一个“清除浮动”的`div`,如`;"&gt;&lt;/div&gt;`。另一种方法是使用伪元素`::after`来清除浮动,如`#parent::after {content...

    CSS兼容性大全.pdf

    `,或者创建一个清除浮动的伪元素,如`::after`,并设置`clear: both; content: ""; display: block;`。另一种方法是使用`overflow: auto;`,但这可能导致滚动条的意外出现。 理解这些兼容性问题和解决方案对于编写...

    css兼容性(IE 和 firefox)技巧大全.doc

    8. **清除浮动**:避免浮动元素影响非浮动元素的布局,可以使用clear属性或者创建一个“清除浮动”的元素。例如,可以添加一个空的div并设置`clear:both`,或者使用伪元素`::after`和`content:""`来清除浮动。 以上...

    css常用代码大全(html+css代码).pdf

    `float`用于实现元素的浮动,常用于创建多列布局,`clear`则清除浮动影响,避免内容被浮动元素覆盖。 边框相关属性包括`border-style`定义边框样式,如`none`、`dotted`、`dashed`、`solid`和`double`,`border-...

    IE与Firefox的CSS兼容大全

    综上所述,IE与Firefox之间的CSS兼容性问题涉及多个方面,包括DOCTYPE声明、自动边距处理、文本对齐、元素尺寸计算、垂直对齐、光标样式、显示与浮动结合、Box Model差异、清除浮动、边距折叠以及背景图片位置等。...

    前端校招面试题精编解析大全.pdf

    9. 清除浮动:介绍几种清除浮动的方法,以防止浮动带来的布局问题。 10. block、inline和inline-block:三种不同的CSS显示类型,对布局和元素排列有不同的影响。 11. 优雅降级和渐进增强:两种不同理念的前端开发...

    div和CSS布局大全

    但这种方法存在一些限制,如清除浮动问题,且不适用于复杂的响应式设计。 5. 定位布局:`position`属性(如static、relative、absolute、fixed)提供了更精确的布局控制。通过设置元素的相对或绝对定位,可以使其...

    css+div经典代码大全

    - `.menu ul li:hover ul li` 子级列表项的样式,包括背景色、文字颜色、宽度和清除浮动属性。 - `.menu ul li:hover ul li:hover a` 当鼠标悬停在子级列表项上时,改变链接的背景色和文字颜色。 - `.menu ul li:...

    DIV+CSS布局大全

    此外,浮动元素和清除浮动也是布局中的重要技巧,书中会有详尽的阐述,帮助读者解决常见的布局问题。 在响应式设计部分,书中会介绍媒体查询的使用,使页面能够根据设备的不同屏幕尺寸自动调整布局。这在移动互联网...

Global site tag (gtag.js) - Google Analytics