zoukankan      html  css  js  c++  java
  • IE6 IE7 hasLayout bug之li间的3px垂直间距

    1、 li中仅包含a,span等内联(行内)元素2、触发条件: li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且a或span元素被设置了display: block. (即使a或span不设置dis

    症状

    两个li元素之间, 多出3px的垂直间距, 即使将li的margin设置为0, 也依然存在.

    二、受影响的浏览器
    IE6, 7

     

    三、出现条件(有两种)

    第一种情况:
    1、 li中仅包含a,span等内联(行内)元素
    2、触发条件: li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且a或span元素被设置了display: block.
     (即使a或span不设置display:block,即使不是a或span等内联元素而是用p块级元素,li也同样存在1px的垂直间距)

    运行以下代码,查看BUG:

    <!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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ipmtea.net下午茶</title>
    <style type="text/css">
    div{padding:50px;background:blue;}
    *{margin:0;padding:0;}
    /*以上CSS是为了方便观察*/
    ul {
    background:yellow;
    }
    ul li {
    background:orange;
    500px;/*hasLayout*/
    }
    a,span {
    display: block;
    }
    </style>
    </head>
    <body>
    <div>
    <ul>
    <li><span>ipmtea.net下午茶</span></li>
    <li><a>下午茶ipmtea.net</a></li>
    </ul>
    </div>
    </body>
    </html>
    

      


    3、解决办法:
    (1)
    去掉li中触发layout的样式;
    (2)
    触发a元素的layout, 具体做法有以下几种:
    * 显式的给a元素设置一个宽或高;
    * 将display: block改为display: inline-block;
    * 设置zoom: 1;

     
     
     
     
     

    第二种情况:
    1、 li中包含1个或多个子元素, 子元素类型不限(全为内联元素, 全为块元素或两者同时出现)
    2、 触发条件:  li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且子元素全部被设置为浮动.
    (在这里由于li的子元素浮动,存在清除浮动闭合浮动元素的问题,在IE下,只要容器hasLayou,则容器的范围会延伸至浮动元素所在宽高度从而闭合浮动元素,详情可阅读这篇文章《hasLayout详解》

    运行以下代码,查看BUG:

     
     
    <!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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ipmtea.net下午茶</title>
    <style type="text/css">
    div{padding:50px;background:blue;}
    *{margin:0;padding:0;}
    /*以上CSS是为了方便观察*/
    ul {
    background:yellow;
    }
    ul li {
    background:orange;
    500px;/*hasLayout*/
    }
    a,span {
    float:left;
    }
    </style>
    </head>
    <body>
    <div>
    <ul>
    <li><span>ipmtea.net下午茶</span></li>
    <li><a>下午茶ipmtea.net</a></li>
    </ul>
    </div>
    </body>
    </html>
    

      

    3、 解决办法: 
    将li设置为float.
  • 相关阅读:
    Linux_修改网卡名
    综合架构_ansible_剧本编写
    综合架构_ansible自动化管理服务
    Linux_综合架构_ssh基于密钥_远程连接
    NFS项目实践
    综合架构_实时同步服务 inotify
    综合架构_nfs常见错误
    linux_知识点集锦
    企业全网备份数据
    综合架构_存储服务nfs
  • 原文地址:https://www.cnblogs.com/zjx2011/p/4465175.html
Copyright © 2011-2022 走看看