IE6/7中li浮动外边距无法撑开ul的解决方法

昨天群里有人提出了这样的问题:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>测试</title>

<style type="text/css">

*{padding:0; margin:0; list-style:none;}

.wrap{ width:960px;margin:0 auto;}

.wrap ul{overflow:hidden;}

.wrap li{

width:50px;

height:50px;

float:left;

margin:0 10px 20px 0;

border:1px solid #c00;

}

</style>

</head>

<body>

    <div class="wrap">

      <ul class="q">

        <li></li>

        <li></li>

        <li></li>

        <li></li>

        <li></li>

        <li></li>

      </ul>

    </div>

</body>

</html>

为什么在现代浏览器(谷歌、火狐、IE8/9)中显示是这样的:
而在IE6/7中却是这样:
遇上这种盒装模型撑不开的情况,我第一时间想到的是给父容器加overflow:hidden。但是,他上面已经加了。那是什么原因呢?原因可能出在浮动上面,因为IE6/7对浮动的解析不同导致无法将容器撑开。于是我的建议是去掉li的浮动,用display:inline-block;来实现并排排列。CSS部分代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

*{padding:0; margin:0; list-style:none;}

.wrap{background-color:#9C9; width:960px}

.wrap ul{overflow:hidden;}

.wrap li{

width:50px;

height:50px;

margin:0 10px 20px 0;

border:1px solid #c00;

display:inline-block;

*display:inline;

zoom:1;

}

嗯,IE6/7问题解决了,
可是新的问题又出现了!这是谷歌、火狐、IE8/9中的表现:
li之间竟然出现了多余的边距。这不是双边距,是由于浏览器对li的解析不同,谷歌、火狐、IE8/9的li之间是有默认间距的,且无法通过padding:0; margin:0解决(这个间距其实是代码中的换行符的字符间距)。
去掉li中的margin:0 10px 20px 0可以看出来。
谷歌、火狐、IE8/9中的效果:
IE6/7中的效果:

那怎么办?用浮动IE6/7出问题,用display:inline-block谷歌、火狐、IE8/9又不行!
我想出了两种解决方式:

  1. 在原先代码的基础上,给父元素加*padding-bottom:20px;来解决。代码如下:


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    *{padding:0; margin:0; list-style:none;}

    .wrap{background-color:#9C9; width:960px;}

    .wrap ul{overflow:hidden;*margin-bottom:20px;}

    .wrap li{

    width:50px;

    height:50px;

    float:left;

    margin:0 10px 20px 0;

    border:1px solid #c00;

    }

  2. 给改用display:inline-block的li里再加上浮动。代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    *{padding:0; margin:0; list-style:none;}

    .wrap{background-color:#9C9; width:960px;}

    .wrap ul{overflow:hidden;}

    .wrap li{

    width:50px;

    height:50px;

    float:left;

    *float:none;

    margin:0 10px 20px 0;

    border:1px solid #c00;

    display:inline-block;

    *display:inline;

    zoom:1;

    }

不理解display:inline-block;*display:inline;zoom:1;的意思的,可以看下这篇文章:IE6/7下不同的inline-block

Demo下载:http://pan.baidu.com/share/link?shareid=120078&uk=3221702211

IE6/7中li浮动外边距无法撑开ul的解决方法

时间: 2024-08-27 20:44:03

IE6/7中li浮动外边距无法撑开ul的解决方法的相关文章

讨论IE6/IE7中li底部4px的Bug

当li的子元素中有浮动(float)时,IE6/IE7中<li>元素的下面会产生4px空隙的bug. XHTML <ul class="list"> <li><div>vapour</div></li> <li><div>百度</div></li> <li><div>淘宝</div></li> <li><

IE6/IE7中li底部4px空隙的Bug

当li的子元素中有浮动(float)时,IE6/IE7中<li>元素的下面会产生4px空隙的bug. 代码如下: <ul class="list"> <li><div>vapour</div></li> <li><div>百度</div></li> <li><div>淘宝</div></li> <li><

Eclipse中输入变量会自动补全上屏的解决方法

我自己在启动Eclipse代码补全后输入感觉确实爽多了,但是每次输入变量后一按下空格,编译器会自己帮你写一个很蛋疼的名字,比如你输入了:String mStr后按下空格,它就变成了mString,十分讨厌.下面是正规的解决办法,但是经过我反复折腾,我实在没办法把插件的源码显示到工程中.于是偷个懒去网上下载了已经修改好的jar包,成功搞定. 我自己复制jar包的目录是:D:\Work Appliactions\adt-bundle-windows-x86-20140702\eclipse\plug

VMware ESXi中不能显示CPU及内存使用情况的解决方法

今天一个网友问我,他管理的机房有4台ESXi 5.1的服务器,其中三台ESXi Server不能显示各个虚拟机占用的CPU.内存情况了,如图1-1所示. 图1-1在"虚拟机"选项卡中不能显示每个启动虚拟机的资源占用情况 另外,在VMware ESXi的"摘要"中,CPU与内存的使用情况也统计出错,如图1-2所示. 图1-2 摘要统计出错 在出现这个问题时,各个ESXi Server上的虚拟机可以正常启动.关闭,并且各虚拟机运行的系统及应用不受影响. 从上面两个图我看

pentaho中Invalid byte 3 of 3-byte UTF-8 sequence的解决方法

今天在创建数据源的时候报了这么一个错 Invalid byte 3 of 3-byte UTF-8 sequence. 上网一查,说是有中文,字体不相符,可是我没有写中文,为了能继续往后进行,修改了如下文件 在start-pentaho.bat中添加了一句代码 修改前 IF "%BITS%" == "64" ( set CATALINA_OPTS=-Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Dsun.rmi.dgc.clien

VS2010在64位系统中连接64位Oracle出现的问题和解决方法

C#使用System.Data.OracleClient连接Oracle数据库.我的是window7/64位系统,装了一个64位的oralce 11G r2 客户端是64位的 用VS10调试错误信息如下: 尝试加载Oracle客户端库时引发BadImageFomatException.如果在安装64位Oracle客户端组件的情况下以32位模式运行,将出现此问题. 错误原因是VS调试工具是32位,连接的程序所用的OracleClient也是64位的,从而导致兼容问题.当然,如果在64位操作系统上按

C++中的字符数组逐个赋值时报错的解决方法

C++中的字符数组逐个赋值时报错的解决方法 C++中定义一个字符数组的时候,如果初始化,则cout的时候不会出错,但是在逐个字符赋值的时候,很容易出错. #include<iostream> #include<string> using namespace std; int main() { //char s[100] = "china"; char s[100]; s[0]='c'; s[1]='n'; s[2]='\0'; cout<<s<

linux下php中找不到php配置文件php.ini的解决方法

自己编译安装的php经常会遇上这种问题,找不到php.ini.可以按照如下方法解决: 首先需要说明的是,如果你的php是编译安装的,那么默认是没有php.ini的,你必须自行去源码包里边拷贝.运行phpinfo()命令可以看到php指定的配置文件路径,把配置文件放到这个路径中即可. linux下php中找不到php配置文件php.ini的解决方法

Eclipse中出现JS文件前有红叉的解决方法

Eclipse中出现JS文件前有红叉的解决方法,亲测有效: Right click your project  (右单击工程属性) Select Properties -> JavaScript -> Include(选择JavaScript下的include菜单) Select Source tab (It looks similar to the Java Build Path Source tab)(选择SOURCE标签) Expand source folder(展开菜单) Highl