`
PatrickZhong
  • 浏览: 12427 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

[译][部分][clear float]不通过添加额外标签来清除浮动

阅读更多
这些天看了些CSS方面的书,做了些笔记,做个记录并且share一下

前言:原文在这里 http://positioniseverything.net/easyclearing.html
看懂英文和译成汉语完全是两码事儿啊, 翻译的各种不专业, 并且只译了和标题有关的部分内容(米有精力能力通篇来啊), 但是我没翻译的内容也非常重要! 都是一些issue啊, 技巧神马的, 有时间最好看看.

正文:
---------------------
clear float的老办法

当一个带有可见边框/背景图的容器框内包含一个float元素的时, 就算float元素会因为过高以至超出了容器的下边框线, 那么float元素也不会自动向下调节容器的下边框来让其包围下自己. 而是无视外面容器, 像一面旗子一样挂下来(PS. 想像旗杆是横着的...).只熟悉IE的人就会说了"不是这样的!" IE能所谓'自动的'把float元素包含进它的容器内, 但是容器必须要带有只有IE才能识别的属性hasLayout.

IE的这个功能在鼠标悬停在容器内的link上时也可能暂时失效, 如果鼠标悬停改变了link的背景或其它CSS属性的话. 挺乱, 我们在后面的"Toggle Trouble"部分讨论它.

W3C建议在容器最后放一个定义了"cleared"的标签, 这样容器的高度就会改变来把 "cleared" box 上面的float元素给容纳进去.
引用
"..我们给一个标签clear属性,{ clear: both; }.这样就会增加它的上边距,使它往下移动直到移出上边float元素的底边框.换句话说, 浏览器会增加这个标签的margin-top值(不管它被定义成了多少)直到让这个cleared box位于float元素的下面."

所以这样的cleared box必须在float元素的下面.

外部容器包含内部的float标签的标准方法就是在其最后加一个定义了"cleared"的标签, 这样做的效果就像是把容器的下边框线拽到了 float 标签的下边. 这样, float标签看上去就像是被容器包围进去一样. cleared box代码通常如下:
<div> <!-- float container -->
  <div style="float:left; width:30%;"><p>Some content</p></div>
  <p>Text not inside the float</p>
<div style="clear:both;"></div>
</div>

这种方法带来的问题

第一并且最主要是,要求添加一个额外的标签到代码里,这办法一点也不直观. 且CSS的主要作用就是用来减少HTML代码的臃肿. 所以用增加HTML代码来实现把float包含进它们的容器中不是一个好主意.
并且,有些浏览器处理clear元素也可能出问题, Mozilla特别容易受影响.
一直以来都没有啥好的解决办法, 但是现在有了!感谢Tony Aslett, csscreator.com的主人, 在非IE浏览器里用高级CSS来清除float并且保持在IE里其自己的处理方法.我们可以选择不用那种烦人的让HTML代码里添加clear标签的办法啦!

"Clearing", 21世纪流行款式~(^.^)

新的方法中不用添加clear的标签. 并且它只针对非IE浏览器有效, 不会影响IE自己处理float元素的方法.

使用 :after

这个CSS 2属性允许你通过CSS在一个元素的末尾添加内容.相当于不用在HTML中加额外的标签. 添加的内容在CSS样式表里被指定, 显示在页面上时就像插入了一个正常的HTML标签一样. 由 :after 插入的内容不能指定某些CSS属性, 包括position, float, list 属性, 和 table 属性. 然而 clear 属性是允许的.

设想我们用:after插入一个简单的字符比如说一个'句号', 然后定义它{clear: both;}.就样就可以了, 不过没人想在最下面留一个空行来弄乱容器, 所以我们使用了{height: 0;}和{visibility: hidden;}来不显示我们加的'句号'.
.clearfix:after {
    content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}

注意{display: block;}也得有, 因为如果不加的话, 元素默认为是inline, inline元素是没有clear属性的.Tony的原始代码里也用了{overflow: hidden;}来隐藏'句号', 但悲剧的是最新的火狐浏览器还是会显示出'句号'.

IE怎么办?

由于IE7还不支持:after伪类, 只能依靠IE6的"自动清除float"功能, 但是要包含浮动元素的容器带有hasLayout属性. 简单定义{zoom: 1;}就可以了.并且要将其隐藏.
分享到:
评论

相关推荐

    HTML5 清除浮动

    2. 使用伪元素`:after`:这种方法利用CSS的伪元素`:after`,在每个浮动元素的父元素末尾添加一个看不见的内容,来清除浮动。例如: ```css .parent::after { content: ""; display: table; clear: both; } ``...

    css中3种清除浮动方法

    请注意,Flexbox并不完全等同于清除浮动,但它是解决此类问题的一个强大工具,尤其是在不需要支持老版本浏览器的情况下。 总结来说,CSS中的清除浮动有多种方法,包括传统的`clearfix`方法、使用`:clearfix`伪类和...

    Float浮动与清除浮动

    3. 额外标签法:在浮动元素后面添加一个无内容的元素,并设置`clear: both`,可以清除浮动,但增加了HTML的复杂性。 4. 使用CSS伪元素`:before`或`:after`:例如,`::after`配合`content: ""`和`clear: both`,可以...

    Float(浮动)导致的父容器背景不显示的解决方法

    #### 方法1:清除浮动(Clear Fix) 清除浮动是指阻止元素被浮动元素影响。有多种方式可以实现清除浮动: 1. **传统方法**:在父元素的末尾添加一个无内容的元素,并为其设置`clear:both`属性,例如: ```html ...

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

    此外,随着 CSS3 的普及,还可以使用 `::before` 和 `::after` 伪元素以及 `display: flow-root` 或 `overflow: auto` 属性来实现更现代的清除浮动效果,这些方法同样不需要额外的 HTML 元素。 总之,`.clear 万能...

    CSS浮动属性Float详解[收集].pdf

    清除浮动(clear)是浮动(float)的相关属性。一个设置了清除浮动的元素不会如浮动所设置的一样,向上移动到浮动元素的边界,而是会忽视浮动向下移动。清除浮动也有四个可能值:both、left、right和none。 伟大的...

    css别忘记清除浮动clear:both

    这种方法适用于非IE浏览器,通过在父元素后添加一个不可见的伪元素来清除浮动。 **示例代码**: ```html #layout:after { display: block; clear: both; content: ""; visibility: hidden; height: 0; } ...

    CSS布局详解浮动属性Float.pdf

    清除浮动的方法包括在元素样式中直接设置`clear: both`,或者使用所谓的“clearfix”类,这是一种无需添加额外HTML元素即可清除浮动的技巧。 浮动的一个常见问题被称为“浮动塌陷”(Floating Collapse)。当一个父...

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

    `clearfix` 类是最常用的清除浮动方法之一,它并不需要添加额外的HTML元素,而是利用CSS伪类来解决。这种方法适用于那些不支持CSS3的旧版浏览器。以下是`clearfix`类的源代码: ```css .clearfix:after { content:...

    浅谈CSS中的clear清除浮动

    在实际使用中,经常通过给元素添加额外的清除浮动的样式来解决高度塌陷的问题。例如,可以在父元素的内部末尾添加一个清除浮动的空div元素,并使用class来指定其clear属性值。具体来说,如果想让该元素清除左边的...

    CSS清除浮动float的三种方法小结

    为了解决这个问题,我们有三种主要的清除浮动(clear float)方法。 1. 添加新元素并应用`clear: both;` 这种方法是在浮动元素之后添加一个额外的空元素,比如`&lt;div class="clear"&gt;&lt;/div&gt;`,然后在CSS中设置`.clear...

    CSS 清除浮动Clear

    当我们提到“CSS 清除浮动Clear”时,我们实际上是在讨论如何解决由于浮动元素导致的布局问题。 在上述例子中,红色方块通过设置`float: left;`使其浮动到左侧,从而允许蓝色方块与其在同一行。这种布局方式在多列...

    css清除浮动

    这种方法利用CSS的`:after`伪元素来创建一个不可见的块级元素来清除浮动。此方法具有良好的浏览器兼容性,同时不需要在HTML结构中添加额外的元素。 **示例代码**: ```html &lt;p&gt;sometext ``` ```css .clearfix:...

    CSS——float属性及Clear:both备忘笔记

    2. 利用overflow属性:这是一种较为简洁的清除浮动方法,其原理是通过设置包含浮动元素的父容器的overflow属性值不为visible,来清除浮动。通常可以设置overflow为auto或hidden。这种方法的优点是不需要添加额外的...

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

    4. **使用伪元素清除浮动** - 另一种技术是在父元素中使用`:after`伪元素,并利用CSS的 `content` 属性来生成一个内容为空的元素,并设置其 `clear` 属性。然后,将这个伪元素的 `display` 属性设置为 `block` 或 `...

    标签增加CSS的overflow属性来清除浮动

    为了清除浮动,我们为`&lt;ul&gt;`元素添加一个额外的类,如`.overflow`,并应用`overflow:auto`和`zoom:1`属性: ```css .overflow { overflow: auto; zoom: 1; background-color: #43FF73; } ``` `overflow:auto`...

    清理浮动的几种方法

    1. 使用`clear`样式清除:在HTML中添加一个额外的元素,并应用`clear:both`样式。这将使新元素清除之前的所有浮动,从而使父容器的高度包含浮动元素。例如: ```css .clear-float { clear: both; } ``` 2. ...

    CSS clear属性给float带来哪些影响

    7. 在现代的CSS布局中,为了更优雅的解决清除浮动的问题,也有使用诸如clearfix hack的方法,它通过伪元素选择器来清除浮动而不必添加额外的DOM元素。 通过以上知识点,我们可以了解到CSS的clear属性在处理浮动元素...

    详解利用clear清除浮动的一些问题解决

    虽然这种模式有效,但它并没有真正清除浮动,而是通过添加额外的布局元素来解决问题。在实际开发中,我们需要根据浮动元素的特性,灵活选择适当的清除浮动策略。同时,为了提高代码的可维护性,我们应该尽量避免不必...

Global site tag (gtag.js) - Google Analytics