关于浮动的前世今生(5)

作者:糖伴西红柿 来源:前端观察 时间:2009-08-19 18:51:00 

清除浮动的技术

如果你很明确的知道接下来的元素会是什么,可以使用 clear:both; 来清除浮动。这个方法很不错,它不需要 hack,不添加额外的元素也使得它有良好的语义性。当然事情并不是都可以这样解决的,工具箱中还是需要另外几个清除浮动的工具。

  • 空div方法从字面来看,是一个空的 div。
    。有时可能会用
    或者一些其他元素,但是 div 是最常用的,因为它没有浏览器默认样式;没有特殊功能,而且一般不会被 css 样式化。这个方法因为只是为了表现,对页面没有上下文涵义而被纯语义论者嘲笑。诚然,从严格的角度来说他们是对的,但是这个方法有效而且没有任何伤害。

  • overflow 方法在父元素上设置 overflow 这个 css 属性。如果父元素的这个属性设置为 auto 或者 hidden,父元素就会扩展以包含浮动。这个方法有着较好的语义性,因为他不需要额外元素。但是,如果需要增加一个新的 div 来使用这个方法,其实就和空 div 方法一样没有语义了。而且要记住,overflow 属性不是为了清除浮动而定义的。要小心不要覆盖住内容或者触发了不需要的滚动条。

  • 简单清除方法使用了一个聪明的 css 伪选择符(:after)来清除浮动。比起在父元素上设置 overflow,只需要给它增加一个额外的类似于”clearfix”的类。这个类使用如下 css:

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

    这会在清除浮动的父元素之后应用一点看不见的内容。这不是全部内容,还需要一些额外的代码来适应那些老旧的浏览器。

不同的情况需要不同的浮动清除方法。以一个具有不同样式块的网格为例。

为了从视觉上较好的把相似的块联系起来,需要在必要的地方开启新行,这里是颜色改变的地方。如果每个颜色组都有一个父元素的话,我们可以使用 overflow 或者 简单清除方法。或者,在每组之间用一个空div方法。额外的 div 之前并不存在,可以自己试试来看看哪个方法好。

浮动的问题

浮动因脆弱而饱受诟病。大多数的脆弱性来自于 IE6 及其一系列的浮动相关 bug。因为越来越多的设计师不再支持 IE6 了,你也可以不关注它了。不过对于那些要关注的人来说,这里有些大概。

  • 推倒是浮动元素内的元素(大多是图片)比浮动元素本身宽造成的现象。大多数的浏览器会在浮动之外渲染图片,但是不会有伸出来的部分影响其他布局。IE 会扩展浮动来包含图片,精彩大幅度地影响布局。一个普遍的例子是突破伸出主内容之外把侧栏推到下面。



    快速修正:确保不是图片造成这种情况,使用 overflow:hidden 来切除多余的部分。

  • 双倍边距bug处理 IE6 时,另一个需要记住的事情是,如果在和浮动方向相同的方向上设置外边距(margin),会引发双倍边距。快速修正:给浮动设置 display:inline; 而且不用担心,它依然是块级元素。

  • 3像素间距是指挨着浮动元素的文本会神奇的被踢出去3像素,好像浮动元素的周围有一个奇怪的力场一样。快速修正:在受影响的文本上设置宽度或高度。

  • IE7 中,底边距 bug是当浮动父元素有浮动子元素时,这些子元素的底边距会被父元素忽略掉。快速修正:用父元素的底内补白(padding)代替。

替代品

如果需要文本环绕图片,除了 float 之外还真没多少替代品。说到这,可以看看这个使文本围绕不规则形状的聪明技术。对于页面布局,肯定有很多选择。Eric Sol 在 A List Apart 上有一篇文章人造绝对定位,介绍了一个很有意思的技术,它在很多方面把浮动的扩展性和绝对定位的实力结合起来。CSS3 有 Template Layout Module ,当它被广泛支持时,将会是一个页面布局技术的选择。

视频

作者还贴心地做了一个视频来解释相应的概念。

原文all about floats

标签:浮动,float,css
0
投稿

猜你喜欢

  • Python Pandas学习之基本数据操作详解

    2021-11-07 17:46:56
  • pygame游戏之旅 载入小车图片、更新窗口

    2022-08-06 18:12:39
  • Python使用百度翻译开发平台实现英文翻译为中文功能示例

    2021-10-22 14:56:27
  • selenium鼠标操作实战案例详解

    2023-09-18 04:08:40
  • MySQL系列教程小白数据库基础

    2024-01-13 08:23:19
  • 下拉列表两级连动的新方法(二)

    2009-06-04 18:22:00
  • 详解python 拆包可迭代数据如tuple, list

    2022-01-08 19:28:43
  • 下载golang.org/x包的操作方法

    2023-07-11 16:54:04
  • python安装cx_Oracle模块常见问题与解决方法

    2021-04-24 13:00:27
  • 架构师说比起404我们更怕200错误

    2022-11-02 20:40:43
  • 基于keras中的回调函数用法说明

    2023-06-01 14:27:48
  • Servermanager启动连接数据库错误如何解决

    2024-01-13 23:46:55
  • 纯Javascript实现Windows 8 Metro风格实现

    2024-04-19 10:41:31
  • javascript替换已有元素replaceChild()使用介绍

    2024-04-10 13:55:08
  • python对输出的奇数偶数排序实例代码

    2023-02-17 17:55:16
  • JavaScript给数组添加元素的6个方法

    2024-04-30 08:46:47
  • Python的加密模块之hashlib 与 base64详解及常用加密方法

    2023-11-28 09:30:18
  • 快速解决jupyter notebook启动需要密码的问题

    2023-09-27 23:56:49
  • AMP Tensor Cores节省内存PyTorch模型详解

    2021-07-08 01:30:32
  • 教你使用Python根据模板批量生成docx文档

    2021-12-27 00:35:13
  • asp之家 网络编程 m.aspxhome.com