DIV+CSS 闭合问题

html-css07

DIV+CSS 闭合问题,第1张

这是IE6的一个Bug

问题出在IE6的Box model解释上

IE6认为<a>标签是inLine(行内)的元素,不具备hasLayout(拥有布局)的条件,即使你设定了display:block

解决的唯一方法是让<a>拥有布局能力,在IE6下最简单的hasLayout方法就是为元素设定一个高度,所以,当你加入了height:1%的时候,阳光明媚了。。。

在IE下做前端开发有一个工具是很有用的,IE Developer,这是很有帮助的,用用你就知道了,虽然它比起火狐的FireBug连根葱上的须须都不如,但是,谁让这个世界上还有60%的人在用万恶的IE呢?

最后,让我们深切的鄙视微软,鄙视IE,谢谢。。。

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

先解决一下你的_height:1%的问题

这个是针对ie6的hack,用来触发hasLayout

什么是hasLayout,你可以去搜索下

然后再说清除浮动的办法

你用的还真是偏门

css里面有清除浮动的属性啊

clear:left 清除左浮动

clear:right 清除右浮动

clear:both 清除所有浮动

举个例子

<div style="float:left"></div>

<div style="float:right"></div>

<div style="clear:both"></div>

最后一个div就是用来清除上面的浮动的

还有一种更简单的方法,就是用一个通用的clearfix类,这个类用在浮动元素的父元素上即可

例子:

定义clearfix类

.clearfix:after{content: "."display:blockheight:0clear:bothvisibility:hidden}

* html .clearfix{display:inline-blockwidth:100%}

* html .clearfix {height: 1%}

*+html .clearfix{min-height:1%}

上面的都要,针对不同浏览器的

<div class="clearfix">

<div style="float:left"></div>

<div style="float:right"></div>

</div>

打了这么多字,兄弟你懂了就给分吧