css兼容问题与实践归纳总结

一、IE6/7 原生块元素与display:inline-block;

<div  style="display:inline-block;">some text</div>

在ie6/7下,这个div还是会独占一行,所以要是需要设置inline-block的元素来呈现按钮图标之类的要素,最好用 span em i 等这些默认为内联元素的标签。

想起以前设置按钮时,也是吧 a 设置为 display:inline-block; 就可以设置宽高,可以在同一行显示的。div怎么不行了?

原来也有办法在IE6/7, 让块元素实现display:inline-block

  • 先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象

    两个display要先后放在两个CSS声明中才有效果,这是IE的一个经典bug,如果先定义了display:inline-block,然后再将display设回inline或block,layout不会消失

      div {display:inline-block;...}
    div {display:inline;}
  • 直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1等)

      div {display:inline; zoom:1;...}

二、float后的元素与vertical-align

<div style="height:100px; background:pink; font-size:4em;">
<span style="float:left; width:30px; height:30px; background:green; vertical-align:middle;"></span>我是裸文字 测试垂直对齐
</div>

对于已经设置浮动的元素,若要在垂直方向上调整位置,vertical-align不起作用,应该用margin-top/margin-bottom;

个人理解 vertical-align主要是设置line-box中inline or inline-block元素垂直方向的对齐方式的, 浮动的元素自身高度塌陷 没有行高,所以不能由vertical-align来调整。

三、清除浮动影响较好的方法 zoom:1 :after{}

ul li{float:left;}
ul{zoom:1} 触发hasLayout for IE
ul:after{content:''; display:block; clear:both; font-size:0; height:0; line-height:0;} <ul>
<li>item</li><li>item</li>
</ul>

四、IE6 inline-block元素设置width:0; height:0; 但实际会被font-size 和 继承的line-height撑高

<span style="display:block; height:25px; line-height:25px;">
选择省份<i style="display:inline-block; width:0; height:0; border:5px solid transparent; border-top-color:blue;"></i>
</span>

比如上面这个设置为小三角的<i>标签, 在IE6下还需要设置 font-size:0; line-height:0;

IE6/7 float:right后换行的问题

比如有代码如下: <h1>标题 <span>更多</span> </h1> 想显示成左右靠边的布局: 如果给span {float:right;} 但是,在IE6/7下会出现BUG。浮动框移动到本行行框之下。

解决方法:

  1. 让span放到最前面。优点是:不用写代码。缺点:破坏语义。

  2. 绝对定位。优点:不破坏语义。缺点:代码量加大。

  3. 都添加浮动。优点:同上。缺点:会引起其他bug等。

  4. 添加hack。_margin-top:-XXXXpx;优点:同上。缺点:使用了hack。 你有更好的方法可以给我留言。相互学习探讨。

五、IE6不支持max-width , IE7+都支持

max-width 在实现自适应内容宽度,但不超过给定宽度的情况下比较有用,比如 弹出二级商品分类菜单的场景

**解决方法: ** 可以在外层套一个div 设置宽度=最大宽度 内部div的宽度自适应内容

.container{width:500px;}
.menu{display:inline-block; *display:inline; *zoom:1; background:#aaa; max-width:500px;}
.menu a{display:inline-block; margin:0 10px;} <div class="container">
<div class="menu">
<a href="#">三级菜单</a><a href="#">蓝牙耳机</a><a href="#">充电器</a><a href="#">数据线</a><a href="#">手机耳机</a><a href="#">贴膜</a><a href="#">存储卡</a><a href="#">保护套</a><a href="#">车载</a><a href="#">iPhone配件</a>
</div>
</div>

六、IE6不支持a以外的标签不支持 hover 伪类 , IE7+都支持

如题

七、IE6垂直列表 列表项之间的空隙 阶梯bug

li a{display:block; border-bottom:1px solid #eee;}

在ietester 里面用debugbar查看文档代码,每个ul li里面都有这个 text: empty text node 这个东西,像<li><a>sometext</a></li> IE6下 js检测显示最后一个子节点为空白文本节点,改成<div><a>sometext</a></div>这样内部就无空白文本节点,这应该是导致li内部有空白行的原因

只要将列表li的子元素(子元素是行内元素的情况下,比如a,span)设置成块元素就会在ie6出问题,

**解决办法: **

  1. 触发设置为display:block子元素的haslayout
  2. 设置 li {display:inline} 此时空白节点依然是存在的只是没有换行撑出空白而已
  3. 用js遍历删除那个空白的文本节点

如何触发ie的hasLayout

  • position: absolute

  • display: inline-block;

  • float: left / right;

  • width: 除“auto”以外的值

  • height: 除”auto”以外的值,如”height: 1%;”

  • zoom: 除“normal”以外的值

  • writing-mode-tb-rl;

      li a{display:block; line-height:40px; height:40px; border-bottom:1px solid #E8E8E8; font-size:14px; color:#444; text-indent:18px; background:#fff;} 
    
      <ul>
    <li id="ali"><a href="javascript:;">热销机型</a><i></i></li>
    <li id="ali2"><a href="javascript:;">操作系统</a></li>
    <li><a href="javascript:;">屏幕大小</a><i></i></li>
    <li><a href="javascript:;">网络制式</a><i></i></li>
    <li><a href="javascript:;">价格区间</a><i></i></li>
    <li><a href="javascript:;">推荐人群</a><i></i></li>
    <li><a href="javascript:;">特色功能</a><i></i></li>
    <li><a href="javascript:;">运营商</a><i></i></li>
    <li><a href="javascript:;">手机配件</a><i></i></li>
    </ul>

像这样的html结构,触发display:block a元素的hasLayout也不行,解决方法只能是 li{display:inline;} 或者 js删除空文本节点

七、IE6 float元素内部有块级子元素的话,float内联特性会被破坏,即float的父元素的宽度被撑到100%

li{float:left;} a{display:block;} li的宽度被撑开 类似恢复block特性

<li><a>sometext</a></li>

八、IE6 不支持选择器 .class1.class2{}

.al{color:green;}
.ar{color:blue;}
.al.hover{border:1px solid green;} /*~~IE6中 .al.hover {}等价于 .hover{}, .hover.al{} = .al{} 只识别最后一个class */ <div class="al hover">若支持class选择器 .aclass.bclass 则显示绿色字体 绿色边框</div>
<div class="ar hover">若支持class选择器 .aclass.bclass 则显示蓝色字体 蓝色边框, 结果同样显示绿色边框</div>

九、IE6/7 ul下只能包含li,若包含其他子元素则会被解析到就近的li里

<ul>
<li>home</li>
<li>contact</li>
<b class="hlbg"></b>
</ul>

最后一个会被解析到最后一个li里面

十、让空白单元格显示边框?

 table{ border-collapse:collapse;  empty-cell:show; }  //~~~给table设置这2个样式

css兼容问题与实践归纳总结的更多相关文章

  1. CSS 网页字体最佳实践

    一般在网页的字体设置中,可以将字体分类三类: 系统字体:使用系统自带的字体 兜底字体:当系统字体无法正常使用,而兜底的字体 Emoji 字体:显示网页中的表情字体 为了满足不同平台,以及 Emoji ...

  2. CSS兼容各浏览器的hack

    CSS兼容各浏览器的hack:建议:尽可能的手写代码,可以有效的提高学习效率和深度.浏览器的种类多,麻烦自然也多,主要是各种浏览器对某些属性的渲染效果并不相同,所以有时候需要专门针对特定浏览器或者特定 ...

  3. 主流浏览器css兼容问题的总结

    最近又搞了一波网站的兼容,由于要求ie浏览器还是要兼容到ie8,所以调起来还是各种蛋疼. 现在就post一些做兼容的总结,可能不够全面,但是可以告诉大家如何避过一些坑.主要测试了chrome,fire ...

  4. CSS兼容问题实用建议

    CSS兼容问题,是美工最头痛的问题.做测试时,用谷哥和360浏览器(最新)都没有什么问题,用 IE6/IE8测试,问题就冒出来了.微软现在出IE10,我电脑上已经无法用IE6准确测试,IE-TESTE ...

  5. css兼容问题集合

    css兼容问题 兼容问题 1.文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白 ...

  6. css兼容各个浏览器的三角形图标

    css兼容各个浏览器的三角形图标 在当前流行的的网站上,我们经常会看到一些小三角形的下拉提示(微博顶部的下拉菜单),简单的方式可以使用一张图片代替,但是随着前端技术的发展,以及开发者对于前端性能的“吹 ...

  7. CSS兼容常用技巧

    请尽量用xhtml格式写代码,而且DOCTYPE影响 CSS 处理,作为W3C标准,一定要加DOCTYPE声明. 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和 ...

  8. ie6 7 8 9 firefox的css兼容问题

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 浏览器 CSS 兼容写法的测试总结

    做前端最讨厌的就是 IE6,7,8,虽然被淘汰的浏览器,但是在中国用户仍然很多,不可能像国外网站一样直接就不管它了,这样会流失很多流量啊. 现在有了IE9,IE10还好些,几乎和 Chrome,Fir ...

随机推荐

  1. “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)

    解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...

  2. [重写库函数]atoi

    算法分析 1. 若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0. 2. 若第一个非空格字符是符号+/-,则标记isPositive的真假,这道题还有个局限性,那就是在c++ ...

  3. tr删除替换详解

    tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法:tr  [–c/d/s/t] [SET1] [SET2]    #SET1: 字符集1: SET2:字符集2 -c: ...

  4. 关于scp 不需要密码

    运行 ssh-keygen -t rsa 会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub   //      cat id_rsa.pub >~/.ssh/autho ...

  5. J2SE知识点摘记(十九)

    Collection 1.2.1         常用方法 Collection 接口用于表示任何对象或元素组.想要尽可能以常规方式处理一组元素时,就使用这一接口.Collection 在前面的大图也 ...

  6. delphi 基础书籍推荐

    本文所推荐的书,我均仔细读过,受益良多. 1. Pascal 精要.下载Pascal精要 本书讲Pascal 语言基本知识. 2. Object Pascal 参考(中英文对照版).下载Object ...

  7. stack的应用

    STL除了给我们提供了一些容器(container)以外,还给我们提供了几个容器适配器(container adapters),stack便是其中之一 看过STL源码的人都知道,stack其实是内部封 ...

  8. 指定html内容下载为word文档

    解决思路是:获取html内容并传到后台,后台把html内容转换为输入流再传给浏览器,浏览器直接下载 1.获取html内容并传到后台 $("#zxjdck .ad-xzzy-anniu&quo ...

  9. android基础5——使用资源

    Android会基于当前的硬件.设备和语言配置来为某个资源标识符选择最合适的值. 1.在代码中使用资源 使用静态类R来访问资源.R类是基于外部资源而生的类,并且是在项目编译的时候创建的.R的每一个子类 ...

  10. 初探swift语言的学习笔记(闭包-匿名函数或block块代码)

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...