闭合CSS浮动元素的实用方法

按照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
规范中提到的一种现象,它往往具有某种独立性,特性之一就是会自动闭合内部的浮动元素。

按照规范,以下类型的元素会产生一个块级格式化范围:

1)浮动元素,left 或者 right 皆可。

2)绝对定位的元素。

3)inline-block 元素,不过这个 gecko目前不支持。

4)table-cell 类型元素,其实 table, table-head-group, table-row 什么的也都可以,还有inline-table(gecko不支持)也同样,因为他们都会间接产生一个匿名的 5)table-cell。

6)overflow 取值非 visible 的元素。

所以,原来在标准兼容浏览器中我们也可以有这么多的方法闭合一个浮动元素,而且只需要 CSS,无需其他。顺带说一下以上除了overflow,其余都有一个附加效果就是自动收缩父容器宽度。

而对于 IE/Win,它有一套自己的体系,就是 layout,具有 layout 的元素会自动闭合浮动元素,再来看看触发 layout 的 CSS 属性,会发现和上面的块级格式化范围有很多类似之处:

1)浮动元素
2)绝对定位元素
3)display:inline-block
4)zoom
5)width/height
6)overflow/overflow-x/overflow-y [IE7 新增]
7)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 属性就要具体情况具体分析了,灵活应用条件注释也很有必要。想了解更多网页布局教程知识请登录e良师益友网。

时间: 2024-10-11 12:38:00

闭合CSS浮动元素的实用方法的相关文章

css浮动元素的水平居中

对于定宽的非浮动元素我们可以用 margin:0 auto; 进行水平居中,对于不定宽的浮动元素我们也有一个常用的技巧解决它的水平居中问题.分解如下: 1.HTML 部分: <div class="box">     <p>我是浮动的</p> <p>我也是居中的</p> </div> 2.CSS 部分: .box{     float:left;     position:relative;     left:50

HTML。CSS浮动元素详解

浮动定位是指 1.1将元素排除在普通流之外,即元素将脱离标准文档流 1.2元素将不在页面占用空间 1.3将浮动元素放置在包含框的左边或者右边 1.4浮动元素依旧位于包含框之内 2. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止经常使用它来实现特殊的定位效果 3.包含框中有三个元素框,如果把框 1 向右浮动,则它脱离文档流并且向右移动,直到它的右边缘碰到包含框的右边缘 4.当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘 5.因为框

css浮动元素居中,右边宽固定而左边宽自适应

1.浮动元素居中 固定宽高的情况下: width:200px;height: 200px;position: absolute;left:50%;top:50%;margin-left: -100px;margin-top: -100px; 未知宽高的情况下: width:200px;height: 200px;position: absolute;left:50%;top:50%;transform:translate(-50%,-50%); 2.右边宽固定,左边宽自适应html: <div

CSS 教程 - 闭合浮动元素

按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列. 因此当其高度超出包含容器时,一般父容器不会自动伸长以闭合浮动元素. 但是有时我们却需要这种自动闭合行为,具体如何处理呢? 有一种做法就是在父容器内再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器.这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签,所以我个人不大喜欢. 后来又有了一种新的方式,使用 :after 伪类动态的嵌入一个

如何垂直居中元素(浮动元素&amp;居中一个&lt;img&gt;)?

1.如何居中一个浮动元素? 方法一:已知元素的高度 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> /* 方法一:已知元素的高宽*/ #div1{ background-color:#6699FF; width:200px; height:20

css浮动布局,浮动原理,清除(闭合)浮动方法

css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相当于浮动起来一样,浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘 3.浮动的生成:使用css属性float:left/right/none 左浮动/右浮动/不浮动(默认) 4.浮动的影响: 不会影响未浮动的块级元素布局,但是会影响内联元素的布局 浮动后的元素可以设置宽度和高度,

CSS围住浮动元素的三种方法

浮动元素脱离了文档流,其父元素看不到它了,因而不会包围它.浮动会“扩散”到下一个清除浮动的元素处.这会引起不想要的页面布局效果. 清除浮动的方法有三种: 1.父元素overflow:hidden 2.同时浮动父元素 3.添加清除浮动元素. 1.父元素overflow:hidden overflow:hidden的真正作用是防止元素被超大内容撑大.使用hidden后,元素保持其设定的高宽,超大的内容会被“剪切”掉,变为页面不可见部分.同时,overflow:hidden也能强迫父元素包围浮动子元素

CSS清除浮动的三种方法,很实用

CSS清除浮动的方法有哪些呢?经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,清除浮动是必须要做的,而且随时性地对父级元素清除浮动的做法也被认为是书写CSS的良好习惯之一. 下面看今天的教程,此为未清除浮动源代码,运行代码无法查看到父级元素浅黄色背景. <style type=”text/css”> <!–     *{margin:0;padding:0;}     body{font:36px bold; color:#F00; text-align:center;}

CSS清除浮动的三种方法,很实用。

CSS清除浮动的方法有哪些呢?经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,清除浮动是必须要做的,而且随时性地对父级元素清除浮动的做法也被认为是书写CSS的良好习惯之一.下面看今天的教程,此为未清除浮动源代码,运行代码无法查看到父级元素浅黄色背景. <style type=”text/css”><!–    *{margin:0;padding:0;}    body{font:36px bold; color:#F00; text-align:center;}