按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。因此当其高度超出包含容器时,一般父容器不会自动伸长以闭合浮动元素。但是有时我们却需要这种自动闭合行为,具体如何处理呢?
有一种做法就是在父容器内再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器。这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签,所以我个人不大喜欢。
后来又有了一种新的方式,使用 :after 伪类动态的嵌入一个用于清除浮动的元素,这种方法和上一种原理一样,不同的只是把这个额外的内容用
CSS 生成,但考虑到 IE 不支持 :after 不得不做了不少的 hack。这种方法兼容性一般,但经过各种 hack
也可以应付不同浏览器了,时又可以保证 html 比较干净,所以用得还是比较多的。
再后来又有人发现将父容器的
overflow 设为除 visible 之外的值就可以在标准兼容浏览器中闭合浮动元素,IE自然又是不支持的,所以这种方法和上一种方法一样都对
IE 做了不同处理(具体就是触发layout),不同的就是overflow 没有 :after 伪类那么麻烦了,缺点也有,
overflow 可能会产生一些小冲突。
在使用 overflow 之前还有过一种使用 float
的方法,就是让父容器也浮动,这利用到了浮动元素的一个特性——浮动元素会闭合浮动元素。这种方式在 IE/Win
和标准兼容浏览器中都有较好的效果,但缺点也很明显——父容器未必想浮动就浮动的了,毕竟浮动是一种比较特殊的行为,有时布局不允许其浮动也很正常。使用
float 虽然在 IE 和标准兼容浏览器中都能闭合浮动元素,但原理却是不同的,IE/Win 中
float 触发了 layout
因而闭合了浮动,而在标准兼容浏览器中,float 其实和上一种方法中的 overflow 原理一样,产生了一个“块级格式化范围”——这是CSS
规范中提到的一种现象,它往往具有某种独立性,特性之一就是会自动闭合内部的浮动元素。
按照规范,以下类型的元素会产生一个块级格式化范围:
● 浮动元素,left 或者 right 皆可。
● 绝对定位的元素。
● inline-block 元素,不过这个 gecko目前不支持。
● table-cell 类型元素,其实 table, table-head-group, table-row 什么的也都可以,还有inline-table(gecko不支持)也同样,因
为他们都会间接产生一个匿名的 table-cell。
● overflow 取值非 visible 的元素。
所以,原来在标准兼容浏览器中我们也可以有这么多的方法闭合一个浮动元素,而且只需要 CSS,无需其他。顺带说一下以上除了
overflow,其余都有一个附加效果就是自动收缩父容器宽度。
而对于 IE/Win,它有一套自己的体系,就是 layout,具有 layout 的元素会自动闭合浮动元素,再来看看触发 layout 的 CSS 属性,
发现和上面的块级格式化范围有很多类似之处:
● 浮动元素
● 绝对定位元素
● display:inline-block
● zoom
● width/height
● overflow/overflow-x/overflow-y [IE7 新增]
● max/min-width/height [IE7 新增] 网页教学网
以上来看 IE 中闭合浮动元素的方法也不少,自然也都有其局限性,要么有附带效果,要么使用的是非标准属性(无法通过验证)。
还要提一点的是 display:inline-block,这个属性对 IE 而言本身没什么用,实际效果只是给一个元素暗地添加了 layout,但是标准兼
容浏览器是认得这个属性的,所以要不影响这些浏览器,需要将 display 设回默认。这里 IE 有一个 bug,如果先定义了 display:inline-
block,然后再将 display 设回 block(这两个 display 要先后放在两个 CSS 声明中才有效果),那么 layout 不会消失,同时也不会影响
其他浏览器,所以目前来说,这也算一个不错的触发 layout 的方法:
.gainlayout{display:inline-block;}
.gainlayout{display:block;}
所以要跨浏览器闭合浮动元素,可以选择的方式还是很多的,如何搭配使用这些 CSS 属性就要具体情况具体分析了,灵活应用条件注释也
很有必要,要是实在不行我们回过头来还有 clear 可以用嘛。
分享到:
相关推荐
**1.5 如何处理受CC BY-SA 3.0保护的代码** 尽管CC BY-SA 3.0不是一个理想的软件许可证选择,但是可以通过一些合法手段来重新授权这些代码。根据Creative Commons官网的说明,任何基于CC BY-SA 3.0的作品都可以自动...
**缓冲溢出攻击详解** 缓冲溢出攻击是网络安全领域中一种常见的攻击手段,它利用了程序处理内存时的错误,尤其是当程序没有正确检查输入数据的长度时,攻击者可以通过输入过长的数据来覆盖内存中的其他区域,从而...
在CSS中,`text-overflow`属性是用来处理文本溢出情况的一个重要工具,尤其是当文本在有限的容器内无法完全显示时。这个属性通常与`overflow`和`white-space`属性一起使用,来实现文本的截断和省略。本文将深入探讨`...
总结来说,`zoom`和`overflow:auto`是处理浮动元素布局问题的重要工具。在编写兼容性良好的CSS代码时,为了确保在各种浏览器中都能正确清除浮动,通常需要结合使用这两个属性。了解并掌握这些技巧对于前端开发者来说...
3. 社区交流:参与嵌入式论坛、Stack Overflow等社区,获取最新资讯和解决问题。 以上就是ARM微处理器开发的全面解析,涵盖从基础理论到实践应用的各个环节。通过深入学习和实践,开发者可以掌握ARM系统的设计与...
本压缩包中的"FCM算法详解"很可能包含详细的代码实现、案例分析和实验结果,建议读者结合这些资料深入学习,理解FCM算法的精髓并尝试将其应用到实际项目中。同时,也可以参考相关的学术文献和技术论坛,如《Pattern ...
### 堆溢出攻击教程(Heap Overflow Attack) #### 一、引言 堆溢出是一种常见的安全漏洞,被广泛利用于多种类型的攻击之中。本文档详细解释了一种特定的堆溢出攻击——“Off-by-One”攻击,并通过具体案例进行...
**Android中的ActionBar详解** 在Android应用开发中,ActionBar是一个至关重要的组件,它是应用程序顶部的工具栏,用于展示应用的品牌、提供导航以及展示操作选项。它为用户提供了一种标准且一致的交互模式,使得...
本教程将深入探讨如何在Android项目中有效地使用Toolbar,包括它的基本设置、右键菜单(Overflow Menu)的实现、弹出菜单(PopupMenu)的添加,以及自定义标题栏的细节。 首先,我们需要在项目的布局XML文件中引入...
### 6502 MCU指令详解 #### 前言 6500系列微处理器是计算机历史上的一个重要里程碑,而6502作为该系列的一员,在早期家用计算机、游戏机以及嵌入式系统中扮演了重要角色。本文档旨在为用户提供关于6502微控制器...
除了本书"ASP函数详解与应用指南"外,还可以查阅MSDN文档、Stack Overflow问答、专业论坛等获取更多ASP编程知识和实践经验。 通过掌握这些ASP函数的使用,开发者能够更有效地构建动态Web应用,提供个性化的用户体验...
#### 知识点详解 **一、Windows XP SP2的栈保护机制** Windows XP SP2引入了一些重要的安全改进,尤其是针对栈溢出攻击的防护。其中一个关键的安全机制是栈保护机制,具体来说,就是通过在栈上添加“哨兵值”或...
1. 盒模型:包括`border-radius`(圆角)、`box-shadow`(阴影)和`overflow`(溢出处理)等,丰富了元素的外观设计。 2. 背景与边框:`linear-gradient`、`radial-gradient`创建渐变背景,`border-image`用图片作为...
CSS浮动属性Float详解 CSS浮动属性Float是CSS中的一种定位方式,它可以使元素在网页流中浮动,周围的元素可以围绕它排列。浮动元素仍然是网页流的一部分,这与使用绝对定位的页面元素不同。绝对定位的页面元素被从...
`overflow`设置为`hidden`会让超出部分不可见,而`text-overflow`则定义了如何处理这些被剪裁的文本。例如: ```css div.test { width: 200px; height: 14px; overflow: hidden; /* 隐藏超出的文本 */ text-...
为了进一步学习,你可以参考《Java并发编程实战》、《Java并发编程的艺术》等书籍,或者在线查找相关教程和博客,以及参与社区讨论,如Stack Overflow和GitHub上的开源项目。 综上所述,Java的多线程和同步是开发...
sizing-border-box属性入手,来了解盒模型 -用box-size border-box改变盒模型的结构.url`这两个链接则涉及到了与Box Sizing相关的其他CSS属性,如`text-overflow`,`white-space`和`overflow`,它们通常用于处理文本...
SpringMVC图片上传处理方式详解 SpringMVC图片上传处理方式详解是一种常见的Web开发技术,旨在帮助开发者快速实现图片上传功能。本文将详细介绍SpringMVC图片上传处理方式的实现步骤和相关技术要点。 依赖的jar包 ...
MSP430定时器A中文超级详解 本篇文章将对MSP430单片机的定时器A进行详细的讲解,涵盖了定时器A的工作模式、捕获模式、比较模式、应用场景等方面的内容。 定时器A工作模式 MSP430单片机的定时器A可以工作在两种...
**方法一:使用`overflow`、`text-overflow`和`white-space`** 这种方法适用于需要在固定宽度内展示任意HTML元素的情况,包括超链接和图片。下面的代码示例展示了如何实现: ```html ; overflow:hidden; text-...