zoukankan      html  css  js  c++  java
  • 常见的兼容问题

    hack书写规范
    因为不同浏览器对W3C标准的支持不一样,各个浏览器对于页面的解释呈视也不尽相同,比如IE在很多情况下就与FF 存在3px的差距,对于这些差异性,就需要利用css 的hack来进行调整,当然在没有必要的情况下,最好不要写hack来进行 调整,避免因为hack而导致页面出现问题。


    IE6、IE7、Firefox之间的兼容写法:
    写法一:
    IE都能识别*;标准浏览器(如FF)不能识别*;
    IE6能识别*,但不能识别 !important, I
    E7能识别*,也能识别!important; FF不能识别*,但能识别!important;
    根据上述表达,同一类/ID下的CSS
    hack可写为:
    .searchInput {
    background-color:#333;/*三者皆可*/
    *background-color:#666 !important; /*仅IE7*/
    *background-color:#999; /*仅IE6及IE6以下*/
    }
    一般三者的书写顺序为:FF、IE7、IE6.
    写法二:
    IE6可识别“_”,而IE7及FF皆不能识别,所以当只针对IE6与IE7及FF之间的区别时,
    可这样书写:
    .searchInput {
    background-color:#333;/*通用*/
    _background-color:#666;/*仅IE6可识别*/ }
    写法三:
    *+html 与 *html 是IE特有的标签, Firefox 暂不支持。
    .searchInput {background-color:#333;}
    *html .searchInput {background-color:#666;}/*仅IE6*/
    *+html .searchInput {background-color:#555;}/*仅IE7*/
    屏蔽IE浏览器: select是选择符,根据情况更换。
    第二句是MAC上safari浏览器独有的。
    *:lang(zh) select {font:12px !important;} /*FF的专用*/
    select:empty {font:12px !important;} /*safari可见*/
    IE6可识别: 这里主要是通过CSS注释分开一个属性与值,注释在冒号前。
    select { display /*IE6不识别*/:none;}


    IE的if条件hack写法:
    所有的IE可识别:
    <!–[if IE]> Only IE <![end if]–> 只有IE5.0可以识别: <!–[if IE 5.0]> Only IE 5.0 <![end if]–>
    IE5.0包换IE5.5都可以识别: <!–[if gt IE 5.0]> Only IE 5.0+ <![end if]–>
    仅IE6可识别: <!–[if lt IE 6]> Only IE 6- <![end if]–>
    IE6以及IE6以下的IE5.x都可识别: <!–[if gte IE 6]> Only IE 6/+ <![end if]–>
    仅IE7可识别: <!–[if lte IE 7]> Only IE 7/- <![end if]–>

    清除浮动
    在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级 做一次定义,那么就可以解决这个问题。
    select:after {
    content:”.”;
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
    }

    利用border属性确定出错元素的布局特性
    使用float属性布局一不小心就会出错。
    这时为元素添加border属性确定元素边界,错误原因即水落石出。

    float:
    float元素的父元素不能指定clear属性
    MacIE下如果对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。
    这是MacIE的著名的bug,倘若不知道就会走弯路。
    float元素务必指定width属性
    很多浏览器在显示未指定width的float元素时会有bug。
    所以不管float元素的内容如何,一定要为其指定width属性。
    另外指定元素时尽量使用em而不是px做单位。
    float元素不能指定margin和padding等属性
    IE在显示指定了margin和padding的float元素时有bug。
    因此不要对float元素指定margin和padding属性(可以在float元素内部嵌套一个div来设置margin和padding)。
    也可以使用hack方法为IE指定特别的值。
    float元素的宽度之和要小于100%
    如果float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。因此请保证宽度之和小于99%。

    float的div一定要闭合
    例如:(其中floatA、floatB的属性已经设置为float:left;)
    程序代码
    <#div id="floatA" ></#div>
    <#div id="floatB" ></#div>
    <#div id="NOTfloatC" ></#div>
    这里的NOTfloatC并不希望继续平移,而是希望往下排。
    这段代码在IE中毫无问题,问题出在FF。
    原因是NOTfloatC并非float标签,必须将float标签闭合。
    在程序代码
    <#div class="floatB"></#div>
    <#div class="NOTfloatC"></#div>
    之间加上 程序代码
    <#div class="clear"></#div>
    这个div一定要注意声明位置,一定要放在最恰当的地方,
    而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
    并且将clear这种样式定义为为如下即可:
    程序代码 .clear{ clear:both; }
    此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
    当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
    例如某一个wrapper如下定义: 程序代码 .colwrapper{ overflow:hidden; zoom:1; margin:5px auto; }


    margin加倍的问题
    设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
    解决方案是在这个div里面加上display:inline;
    例如:
    <#div id="imfloat"></#div>
    相应的css为 程序代码
    #IamFloat{ float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/ }

    常见兼容问题:
    (1)DOCTYPE 影响 CSS 处理
    (2)FF:div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行
    (3)FF:body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中
    (4)FF:设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width
    (5)FF:支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式
    (6)div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行
    (7)cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以
    (8)FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一 个空格。
    (9)、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;}
    注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。
    所以在IE下其实解释成这样: div{maring:30px;margin:28px} 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;
    (10)IE5 和IE6的BOX解释不一
    IE5下 程序代码 div{300px;margin:0 10px 0 10px;}
    div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,
    而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。
    这时我们可以做如下修改 div{300px!important;width /**/:340px;margin:0 10px 0 10px}
    关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)
    (11)ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 程序代码ul{margin:0;padding:0;}
    一定要注意缩进,对齐。要有良好的编程习惯。

    想要别人给你鼓掌,先学会给别人鼓掌
  • 相关阅读:
    elasticsearch插件开发
    elasticsearch启动流程
    HBase结构
    Scala统计一个文件所有单词出现的次数
    es基础知识
    Linux中Swap与Memory内存简单介绍
    linux 常用命令
    巅峰对决之Swarm、Kubernetes、Mesos
    【JS】JS知识小结
    【HTTP】HTTP状态码详解
  • 原文地址:https://www.cnblogs.com/fjqq/p/4671121.html
Copyright © 2011-2022 走看看