css div自适应高度(兼容ie,firefox,ie8)

先看一个例子:
html:

111cn.net代码如下:
<ul>
<li></li>
<li></li>
</ul>

css:

111cn.net代码如下:
ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
}
ul li {
width:100px;
height:100px;
float:left;
margin-right:10px;
background-color:#99cc00;
}

在各个浏览器中的效果一致:

可以看到,外面 ul 即蓝色的区域高度为0,如果没有设置 padding,这个 ul 是看不到的。当然要让它伸长也很简单,只需要在最后一个 li 后面加一个标签清楚下浮动就可以了。不过这样的话就改变了html结构,不好。现在这里要讨论的就是如何在不改变结构的情况下让 ul 自动伸长。

注意:自动伸长针对的是包含浮动元素的元素(这里是 ul)。而不是浮动元素自身(li)。

第一种方法:
ie 支持一个 css 属性 zoom, 这个元素接受一个数字或一个百分数,表示这个元素放大(缩小)的比例。例如:zoom:0.5或zoom:50% 表示缩小一半,而zoom:2或zoom:200%则表示放大一倍。
当定义了这个属性之后在 ie 浏览器里面就会自动适应高度了。当应用了这个属性之后,ie 就会自动伸长了。一般情况下我们不需要放大或缩小,所以定义 zoom:1 就行了。现在的 css:

111cn.net代码如下:
ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
zoom:1; /* ie */
}

而非 ie 浏览器不支持这个属性。所以第一种方法需把浏览器分为两个阵营:ie 和 非ie。
对于非 ie 浏览器需要用到一个伪类 :after (ie 浏览器不支持)。css 代码如下:

111cn.net代码如下:
ul:after {
content:".";
display:block;
clear:both;
height:0;
}

:after 伪类用于向元素后面插入一段内容,即 content 属性。然后在这个插入的内容里清除浮动,我们可以想象成在最后一个 <li> 后面插入了一个 <span>.</span>里面的内容是一个”.”,然后设置display:block; clear:both; height:0; 等属性 (这个比喻不一定准确)。
我们看下在 firefox 下面的效果:

可以看到 ul 已经自动伸长了,但下面有个小小的黑点。相信你已经猜到了,这个黑点对应的就是 content:”.” 。
这个黑点肯定是要去掉的啦,我们可以用 font-size:0;line-height:0; 将其去掉。
好了,现在在两个阵营的浏览器里都实现目标了。以下是 ul 所有的css代码:

111cn.net代码如下:
ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
zoom:1;/* ie */
}
ul:after {
content:".";
display:block;
clear:both;
height:0;
font-size:0;
line-height:0;
}

第二种方法
我刚说过不止一种方法可以解决,那现在就来说说第二种方法。第二种方法还要更简单一些。同样,需要将浏览器分成两个阵营。不过和上一个有所不同,这一次 ie7 站到了另外一个阵营。即 ie7, firefox, opera, safari 等(这里暂时称为a浏览器)。对于这些浏览器,只要定义一个 overflow:auto; 即可,但是对于 ie6 和 ie5 (称为b浏览器)却不起作用。不过要 ie6,ie5 听话也很简单。只要定义一个高度即可,哪怕是 0 ,也会自动伸长。知道这些还没用,我们还得区分这两个阵营的浏览器才行。怎么区分呢?
a 浏览器支持属性选择符,而b浏览器不支持。

所以以下代码只有a浏览器才会执行。

111cn.net代码如下:
[xmlns] ul { /* html[xmlns] ul 的简写 */
overflow:auto;
}

需要注意的是html 必须要有< !doctype >头部以及<html>有xmlns属性才会起作用。不过这个问题似乎不大,现在绝大部分网页都有这两个东东,包括 dreamweaver 默认新建的网页都会自动加上。

而对于b浏览器则可以通过以下方式:

111cn.net代码如下:
* html ul {
height:1%;
}

其实 height 完全可以写成 0,为什么要写1%呢?告诉你其实我也不知道,大家都这么写。

好了,第二种方法的 ul 全部样式代码如下:

111cn.net代码如下:
ul {
margin:0;
padding:10px;
list-style:none;
background-color:#006699;
}
[xmlns] ul { /*html[xmlns] ul 的简写*/
overflow:auto;
}
* html ul {
height:1%;
}

现在既然有两种方法,那么那一种更好呢?我个人比较喜欢第二种方法。原因很简单,代码更少,而且是符合标准的。只是在极少数情况下会出现滚动条,所以应该这两种方法配合使用。

 

时间: 2024-10-31 01:32:23

css div自适应高度(兼容ie,firefox,ie8)的相关文章

CSS+DIV自适应高度布局

css|自适应 要实现的是head foot固定,中间区域随内容高度自适应,拖动滚动条时foot永远居底. SolarDreamStudios的方案给了我一个很好的思路,但关键部分是原创的,一直以为会比SolarDreamStudios的方案好,结果仔细看他们的代码,才发现其实原理都差不多,不过他们似乎在兼容性上下了更多工夫,具体未测试. A. 宽度100%自适应 结构代码 <body> <div id="head">head</div><di

Iframe自适应高度兼容ie,firefox多浏览器_经验交流

复制代码 代码如下: <script type="text/javascript">  function SetCwinHeight(){   var bobo=document.getElementById("bobo"); //iframe id   if (document.getElementById){    if (bobo && !window.opera){     if (bobo.contentDocument &am

基于jQuery实现左右div自适应高度完全相同的代码_jquery

在线演示:http://demo.jb51.net/js/2012/jquery_demo/jquery_div_autoheihet.htm完整代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&quo

CSS Div 最小高度在IE 6 和IE 7中的兼容性问题_经验交流

浏览器兼容问题-CSS Div 最小高度在IE 6 和IE 7中的兼容性问题 用CSS 的定义一个DIV的高度时,在IE 7浏览器下可以正常显示.但是在IE 6 中,height 在10px以下就无法定义了.这点跟表格有点类似.解决的方法如下: 法一:定义overflow属性.比如想定义一个高度为2px 的线条. <div style="height:2px;overflow:hidden;background:#000000;width:778px;"></div&

jQuery实现左右div自适应高度完全相同

最近做前端设计时需要使左右两个DIV高度自适应. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta

CSS布局自适应高度解决方法

css|解决|自适应 这是一个比较典型的三行二列布局,每列高度(事先并不能确定哪列的高度)的相同,是每个设计师追求的目标,按一般的做法,大多采用背景图填充.加JS脚本的方法使列的高度相同,本文要介绍的是采用容器溢出部分隐藏和列的负底边界和正的内补丁相结合的方法来解决列高度相同的问题. 先看代码: #wrap{ overflow: hidden; } #sideleft, #sideright{ padding-bottom: 32767px; margin-bottom: -32767px; }

关于div自适应高度/左右高度自适应一致的js代码_javascript技巧

在使用DIV和CSS进行网页布局中,DIV的自适应高度和自适应宽度是一个很常见的问题. 为了保证页面的整体美观性,需要将两个或者多个层的高度/宽度保持一致. 左右自适应高度一致 Jquery 复制代码 代码如下: <div style="width:300px;"> <div id="Left" style="float:left;background-color:blue;">1<br/>3<br/&g

div 自适应高度

以前写css是在ie6下高度自适应这个问题我们都不用想了直接设置height:auto;或不设置就可以了,但是在fox和现在ie7,8下就会出现问题了,下面我们就来写一段div 高度自适应写法台, 在网上看到很多但觉得不适合,我看一个方法同时设置两个的浮动为both .pageRight ,.pageLeft{   clear:both;   } 这们会出现一个问题就是把左右浮动给清楚了,虽然在ie6下同有问题,但在其它浏览器下就会出现问题了,下面我们来看看我是怎么处理的吧. 先看看css布置代

css div自适应宽度实例

当内容超出父级元素宽度,在未设置white-space:nowrap时会自动换行,设置了white-space:nowrap样式又不能关联到滚动条延伸的部分,解决方案如下:       1.在父级元素添加white-space:nowrap属性:       2.计算(每一行)内容宽度:            a.将内容拆分,包括缩进.图片和文字.            b.利用<又谈换行情况处理>中在body末尾添加非换行dom元素计算文字宽度.            c.叠加拆分的小块宽度