`
hl756799782
  • 浏览: 77480 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

clearfix:after 清除css浮动

CSS 
阅读更多

原文链接:http://blog.sina.com.cn/s/blog_7a2f65d90100v2vp.html

 

在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开。看下面的例子:
<div style="border:2px solid red;">
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">CSSBBS</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
</div>
运行这段代码,大家可以看到,作为外部容器的边框为红色的DIV,没有被撑开。这是因为内部的DIV因为float:left之后,就丢失了clear:both和display:block的样式,所以外部的DIV不会被撑开。
我们想让外部容器的DIV随着内部DIV增多而增加高度,要怎么解决呢?

以前我都是用这样的方法来解决:
<div style="border:2px solid red;">
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
<div style="clear:both;"></div>
</div>
我们看到,在容器DIV内要显示出来的float:left的所有的DIV之后,我们添加了这样的一个DIV:<div style="clear:both"></div> 。这样,其实就在最后增加了clear的动作。

但是,我总觉得,这么多加一个DIV有点不妥。一是多了一个没有意义的DIV,二是在用dojo做Drag & Drop的时候,由于这个DIV是容器DIV的一个字节点,如果这个节点被移动,则会造成排版上的Bug:如果要显示的蓝框的DIV被移到这个DIV之后,则因为clear:both,它会被强制换一行显示。所以,我一直在寻找更好的解决办法。

解决的办法:
首先设置这样的CSS:
CSS代码:

代码:

.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
然后,我们再修改原来的HTML代码,让外部的容器DIV来使用这个CSS:
HTML4STRICT代码:

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

* html .clearfix {height: 1%;}

在Firefox里测试一下,哈哈,这样做的确很有效,显示正常,而且dojo的 Drag & Drop 也不会有问题了。原来,这个clearfix的CSS使用了after这个伪对象,它将在应用clearfix的元素的结尾添加content中的内容。在这里添加了一个句号".",并且把它的display设置成block;高度设为0;clear设为both;visibility设为隐藏。这样就达到了撑开容器的目的啦。

但是,在文章中说,Windows IE并不支持这样做。所以要让IE也完美显示,则必须在clearfix这个CSS定义的后面加上一些专门为IE设定的HACK。CSS如下:
CSS代码:

代码:

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

* html .clearfix {height: 1%;}

因为转义字符"\",Mac IE浏览器会忽略掉这段Hack,但Windows IE不会,它会应用 * html .clearfix {height: 1%;} 来达到撑开DIV容器的目的(貌似Mac IE没有办法解决这个问题,不过幸好用户数量是在是太少了,Safari支持就可以了:p)。

分享到:
评论

相关推荐

    css清除浮动clearfix:after的用法详解(附完整代码)

    .clearfix:before, .clearfix:after { content:; display:table; } .clearfix:after{ clear:both; overflow:hidden; } .clearfix{ *zoom:1; }  如果外部有一个div容器,其内部div容器设置了...

    .clearfix:after(清除浮动)中各个属性及值详细解说

    `.clearfix:after` 是一种常见的 CSS 技巧,用于清除浮动元素的影响,以防止父元素因浮动元素而收缩。在 CSS 中,浮动元素(如 `float: left` 或 `float: right`)会脱离正常文档流,导致父元素无法正确包裹它们。`....

    用clearfix:after消除css浮动解决外部div不能撑开问题

    在本例中,我们将探讨如何使用`clearfix:after`来消除浮动并确保外部`div`能根据内部浮动元素自动调整高度。 浮动元素的特性是它们会脱离常规文档流,只在其内容区域内占用空间,而不影响其他非浮动元素的布局。当...

    clearfix:after清除浮动的用法及测试代码

    今天回顾一下css中的清除浮动 复制代码代码如下: .clearfix:after{content:”.”;display:block;height:0;clear:both;visibility:hidden} /*所有主流浏览器都支持 :after 伪元素。*/ .clearfix{*+height:1%;}/*不...

    .clear 万能清除浮动(clearfix:after)

    使用 `clearfix:after` 的优点在于,我们可以在不修改HTML结构的情况下,只需对CSS进行调整就能实现浮动元素的清除。这在维护代码和保证代码整洁性方面非常有用。为了应用这个方法,只需要将 `.clearfix` 类添加到...

    CSS清除浮动 clearfix:after 使用技巧及兼容Firefox等符合W3C标准的浏览器

    在CSS布局中,浮动元素(float)经常用于创建...只需将`.clearfix`类添加到父元素,并应用相应的CSS样式,即可在Firefox和其他符合W3C标准的浏览器中实现浮动清除。同时,为了兼容旧版IE,可以结合使用`*zoom:1`属性。

    overflow:hidden line-height clearfix:after使用方法介绍

    总的来说,`overflow:hidden`、`line-height` 和 `clearfix:after` 是CSS布局中非常实用的属性,它们分别用于隐藏溢出内容、调整文本行间距以及清除浮动影响。熟练掌握这些技巧,可以帮助开发者更有效地控制网页布局...

    css中3种清除浮动方法

    总结来说,CSS中的清除浮动有多种方法,包括传统的`clearfix`方法、使用`:clearfix`伪类和采用Flexbox布局。选择哪种方法取决于项目的需求,如兼容性、代码简洁性和布局复杂性等因素。理解这些方法的原理和应用场景...

    DIVCSS布局:CSS浮动float属性详解.doc

    这种差异通常需要通过清除浮动(clearing floats)来解决,比如使用`clear:both`或`clearfix`类。 清除浮动是为了防止元素因前面的浮动元素而发生意料之外的重叠或错位。当一个元素的父级元素内有浮动元素,而父级...

    CSS 浮动.pdf

    **CSS浮动详解** 浮动(Float)是CSS布局中一种古老但仍然重要的技术,它最初设计用于创建多列布局,如杂志或报纸的版面设计。浮动元素会从当前的正常文档流中移出,向左或向右移动,直到它们的边框接触到包含它们...

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

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

    CSS中使用clearfix清除浮动的方法

    它通过在不增加额外HTML标记的情况下,利用CSS伪元素和`clear:both`属性来实现浮动清除。随着浏览器技术的演进,clearfix方法也在不断简化,变得更加高效和易用。在实际项目中,开发者可以根据浏览器兼容性需求和...

    css hack之清除浮动(clearfix)

    但这样增加了页面的结构的源代码,造成代码的拥肿,其实也可以有更好的办法, 在浮动元素的外包clearfix样式 复制代码代码如下: ”clearfix”&gt; ”fl”&gt;&lt;/div&gt; ”fr”&gt;&lt;/div&gt; &lt;/div&gt; .clearfix:after{ visibility:...

    css兼容性.docx

    - 清除浮动主要是解决因浮动元素导致的父元素高度塌陷问题。一种常见方法是使用`clearfix`类,将其应用在包含浮动元素的容器上: ```css .clearfix:before, .clearfix:after { content: ""; display: table; ...

Global site tag (gtag.js) - Google Analytics