zoukankan      html  css  js  c++  java
  • 【转】CSS浏览器兼容性与解析问题终极归纳

    1.怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。

    2.IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。例如:

    HTML:

    <div class="myDiv"></div>

    CSS:

    复制代码
    .myDiv{     100px;     height:100px;     border:1px solid #000;     float:left;     margin-left:30px; }
    复制代码

    Firefox预览结果:

    IE6预览结果:

    很明显的,在IE6中,margin-left:30px的边距翻倍成60px了。

    解决问题:

    设置display:inline:

    复制代码
    .myDiv{     100px;     height:100px;     border:1px solid #000;     float:left;     display:inline;     margin-left:30px; }
    复制代码

    IE6预览结果:


    3.上下margin重合:margin是个有点特殊的样式,相邻的margin-left和margin-right是不会重合的,但相邻的margin-top和margin-bottom会产生重合。不管IE还是Firefox都存在这问题。例如:

    HTML:

    <div class="topDiv"></div> <div class="bottomDiv"></div>

    CSS:

    复制代码
    .topDiv{     100px;     height:100px;     border:1px solid #000;     margin-bottom:25px; } .bottomDiv{     100px;     height:100px;     border:1px solid #000;     margin-top:50px; }
    复制代码

    我们对上面的div设置了25px的下边距,对下方的div设置了50px的上边距。为了便于观察,这里将div的高度都设为100px。

    浏览器预览结果:

    可见,结果不是预期的上下div拉开75px的距离,而是拉开了半个div高度(50px)的距离。

    解决问题:

    统一使用margin-top或者margin-bottom,不要混合使用。这并不是技术上的必需,但却是个良好的习惯。


    4.超链接访问后hover样式不出现:有时候我们同时设置了a:visited和a:hover样式,但一旦超链接访问后,hover的样式就不再出现,这是怎么回事呢?是因为将样式顺序放错了,调整为先a:visited再a:hover。关于a标签的四种状态的排序问题,有个简单好记的原则,叫做love hate原则,即i(link)ov(visited)e h(hover)a(active)e。


    5.IE6、IE7的hasLayout问题:很多时候,CSS在IE下的解析十分奇怪,明明在Firefox中显示得非常正确,但到了IE下却出现了问题,有的时候,这些问题甚至表现得非常诡异。

    例如一个比较经典的Bug就是设置border的时候,有时候border会断开,刷新页面或者拖下滚动条的时候,断掉的部分又会连接起来。

    再比如在IE6&IE7中对元素设置浮动后,其后的元素并未占据这部分空间,造成了IE6&IE7中浮动元素未脱离文档流的假象。也就是说,实际上IE6&IE7浮动元素也脱离了文档流,只是由于其后元素的hasLayout被自动触发而导致的。这里说的hasLayout被触发,即指元素的hasLayout属性为true。

    下列元素默认hasLayout="true":

    • <html>, <body>
    • <table>, <tr>, <th>, <td>
    • <img>
    • <hr>
    • <input>, <button>, <select>, <textarea>, <fieldset>, <legend>
    • <iframe>, <embed>, <object>, <applet>
    • <marquee>

    下列 CSS 属性和取值将会自动让一个元素的hasLayout="true":

      • position: absolute 绝对定位元素的包含区块(containing block)就会经常在这一方面出问题。
      • float: left|right 由于 layout 元素的特性,浮动模型会有很多怪异的表现。
      • display: inline-block 当一个内联级别的元素需要 layout 的时候往往就要用到它,这也可能也是这个 CSS 属性的唯一效果–让某个元素拥有 layout。"inline-block行为"在IE中是可以实现的,但是需要注意的是: IE/Win: inline-block and hasLayout
      • 除 “auto" 外的任意值 很多人遇到 layout 相关问题发生时,一般都会先尝试用这个来修复。
      • height: 除 “auto" 外的任意值 height: 1% 就在 Holly Hack 中用到。
      • zoom: 除 “normal" 外的任意值 IE专有属性。不过 zoom: 1 可以临时用做调试。
      • writing-mode: tb-rl MS专有属性。
      • overflow: hidden|scroll|auto 在 IE7 中,overflow 也变成了一个 layout 触发器,这个属性在之前版本 IE 中没有触发 layout 的功能。
      • overflow-x|-y: hidden|scroll|auto overflow-x 和 overflow-y 是 CSS3 盒模型中的属性,尚未得到浏览器的广泛支持。他们在之前版本IE中没有触发 layout 的功能。
      • 另外 IE7 的荧幕上又新添了几个 haslayout 的演员,如果只从 hasLayout 这个方面考虑,min/max 和 width/height 的表现类似,position 的 fixed 和 absolute 也是一模一样。
      • position: fixed
      • min- 任意值 就算设为0也可以让该元素获得 layout。
      • max- 除 “none" 之外的任意值
      • min-height: 任意值。即使设为0也可以让该元素的 haslayout=true
      • max-height: 除 “none" 之外的任意值

    如果BUG是由于hasLayout未触发所引起的,则可采用手动触发hasLayout来解决:办法是使用一个生僻的CSS属性zoom来触发,引用样式.zoom{zoom:1}。

    如果BUG是hasLayout被自动触发而引起的,则要看触发是什么引起的,若这元素本身就会自动触发hasLayout,可以考虑换一个元素。若是对于这元素设置的某个CSS属性引起的,则可以考虑删除这属性,倘若这属性又是必要的,则就需要自己根据具体情况去编写CSS Hack,因为hasLayout是只读的,一旦hasLayout="true"后,便不可逆转。


    6.行内元素上下margin及padding不拉开元素间距的问题:行内元素的margin和padding属性很奇怪,水平方向的padding-left、padding-right、margin-left、margin-right都产生边距效果,但竖直方向的padding-top、padding-bottom、margin-top、margin-bottom却不会产生边距效果。例如:

    HTML:

    <div>块级元素</div> <span>行内元素</span>

    CSS:

    div{background:gray;padding:20px;} span{background:green;padding:20px;margin:20px;}

    各浏览器预览结果:

    可见竖直方向的padding、margin虽然增大了行内元素的面积,但并没有和相邻元素拉开距离,导致了元素重叠。

    解决问题:

    将行内元素display设置为block即可解决

    修改后CSS:

    span{background:green;padding:20px;margin:20px;display:block;}

    各浏览器预览结果:

    但由于块级元素与行内元素的默认样式不同,可能会因此书写额外的样式代码。比如width样式,因为块级元素默认占据整行。


    7.IE6下select元素显示问题:浏览器解析页面时,会先判断元素的类型,如果是窗口类型的,会优先于非窗口类型的元素,显示在页面最顶端,如果同属于非窗口类型的,才会去判断z-index的大小。select元素在IE6下是以窗口形式显示的,这是IE6的一个Bug。导致的情况是往往想要弹出一个层,结果select元素出现在层上方。例如:

    HTML:

    <select><option>=请选择=</option></select> <div></div>

    CSS:

    复制代码
    div{     position:absolute;     background:#CCDCEE;     top:0px;     left:0px;     300px;     height:300px;     border:1px solid #000;     margin:5px; }
    复制代码

    IE6预览结果:

    解决问题: 

    我们可以用一个和弹出层同样大小的iframe放在层下面,select上面,用iframe遮住select。比如设置弹出层的样式z-index:2,iframe的样式z-index:1,使iframe位于层下方。

    修改后HTML:

    <select><option>=请选择=</option></select> <div></div> <iframe src="xx.htm"></iframe>

    修改后CSS:

    复制代码
    div{     position:absolute;     background:#CCDCEE;     top:0px;     left:0px;     300px;     height:300px;     border:1px solid #000;     margin:5px;     z-index:2; } iframe{     position:absolute;     top:0px;     left:0px;     300px;     height:300px;     margin:5px;     z-index:1; }
    复制代码

    我们让iframe位于div下方,大小以及与浏览器的距离调整成与div一致。

    IE6预览结果:


    8.IE6对png的透明度支持问题:png格式因为其优秀的压缩算法和对透明度的完美支持,成为Web中最流行的图片格式之一。但它存在一个众所周知的头疼问题---IE6下对png的透明度支持并不好。本该是透明的地方,在IE6下会显示为浅蓝色。可以使用IE下私有的滤镜功能来解决问题,格式如下:filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='png图片路径',sizingMethod='crop')。


    9.ul的不同表现:ul列表也是在IE与Firefox中容易发生问题的对象,主要源自浏览器对ul对象的默认值设置。在IE与Firefox中,一部分对象有默认的属性(比如h1~h6),他们本身就带有大字号、加粗样式以及一些边距效果。ul也是如此,默认情况下ul是有边距的。例如:

    HTML:

    复制代码
    <div id="layout">   <ul>     <li>菜单一</li>     <li>菜单二</li>     <li>菜单三</li>   </ul> </div>
    复制代码

    CSS:

    #layout{border:1px solid #333;} ul{list-style:none;}

    代码非常简单,仅去除了ul的列表圆点。看下在IE和Firefox的预览效果:

    IE预览结果:

    Firefox预览结果:

    显示都很正常,关键在于我们对ul接下来的设置:

    修改后的CSS:

    #layout{border:1px solid #333;} ul{     list-style:none;     margin-left:0px; }

    设置ul左外边距为0后。

    IE预览结果:

    Firefox预览结果:

    预览后发现问题出现了。IE中的ul已与div靠齐,而Firefox中的ul却丝毫不动。这是为什么?不妨把样式修改下再看看。

    修改后的CSS:

    #layout{border:1px solid #333;} ul{     list-style:none;     padding-left:0px; }

    这次我们把margin-left换成padding-left。再来看看预览结果。

    IE预览结果:

    Firefox预览结果:

    可见效果正好相反,Firefox中实现了靠齐,而IE中丝毫未动。

    通过以上例子我们发现:在IE中,ul的默认边距是margin,在Firefox中,ul的默认边距是padding。我们单独定义margin或padding时,自然不能在两个浏览器达到一致效果。这就是ul在不同浏览器下表现不同的问题所在。

    解决问题:

    可以用hack方法分别针对IE和Firefox单独写样式,但更好的做法是样式开头先统一ul边距,ul{padding:0px;margin:0px;}。


    10.IE3px问题:3px问题不是经常被人发现,因为它的影响只产生3px的位移。如果是精确到像素级的设计,3px的影响可谓不小。先来看下例子:

    HTML:

    <div id="left">左浮动div</div> <div id="mydiv">段落</div>

    CSS: 

    复制代码
    #left{     float:left;     border:1px solid #333;     100px;     height:100px; } #mydiv{     border:1px solid #f66;     margin-left:130px; }
    复制代码

    #left是引发Bug的一个浮动div,同时设置了边框便于观察。

    IE预览结果:

    Firefox预览结果:

    从理论上讲,我们还没有设置#mydiv的padding,它们理所当然是紧贴边框的。但在IE中,“段落”文字并未紧紧贴住#left。在实际中可能会因此导致内部元素宽度超出外部div固定宽度而引发布局问题。

    解决问题:

    是把#mydiv设置为display:inline-block。

    修改后CSS:

    复制代码
    #left{     float:left;     border:1px solid #333;     100px;     height:100px; } #mydiv{     border:1px solid #f66;     margin-left:130px;     +display:inline-block; }
    复制代码

    用hack方法为IE单独设置display:inline-block后。

    IE各版本预览结果:

    结果与Firefox一致。


    11.高度不适应问题:高度不适应指的是,当内层对象的高度发生变化时,外层对象的高度不能自动扩展,特别是当内层对象使用padding或margin之后。高度不适应问题不是IE的专利,Firefox也出现这种问题。先来看看例子:

    HTML:

    <div id="box">   <p>p对象中的内容</p> </div>

    CSS:

    复制代码
    #box{     background-color:#eee; } #box p{     margin-top:20px;     margin-bottom:20px;     text-align:center; }
    复制代码

    看看代码做了什么,除了背景之外,#box仅是一个没有任何样式的div,而p加了2个关键属性margin-top:20px,margin-bottom:20px;,即上下外边距都是20px,p对象的高度应当是20+20+文字高度,即应当在40px以上。理论上#box这个div的高度会被挤开,至少达到40px以上。我们看看预览效果。

    浏览器预览结果:

    似乎并非预想的结果,看上去带背景的#box还是和文字一样高,并没有超过40px,这是为什么呢?为了验证一些事情,我们在html前后加上一个带背景的div。

    修改后的HTML:

    <div class="box2">up</div> <div id="box">   <p>p对象中的内容</p> </div> <div class="box2">down</div>

    修改后的CSS:

    复制代码
    #box{     background-color:#eee; } #box p{     margin-top:20px;     margin-bottom:20px;     text-align:center; } .box2{     background-color:#aaa; }
    复制代码

    再来看下预览结果:

    浏览器预览结果:

    可以看到上下两个div并没有紧贴#box对象,而是有一定的间距。测量下会发现,这个间距刚好是p对象的margin上下各20px。这个测验证明了一个问题,就是#box对象并没有因其中的p对象的margin变化而改变自身的高度。而p对象的margin高度的确在整个页面中占据了一定的空间。相当于#box不动,而p把自己撑到了#box外面去了。

    无论是IE还是Firefox,测试中都会发现这个问题。

    解决问题:

    经过一些测试,我们发现对#box定义padding或者border,就会迫使#box重新计算自己的高度,从而使自身能够适应内容的高度变化。但如果强制给对象设置了边距又会带来位移。我们需要找到一个新方法,不再从对象本身的属性入手,而是在对象的内部进行修复。我们可以在对象上下增加2个高度为0的空div,并强制内容不显示。

    修改后的HTML:

    复制代码
    <div class="box2">up</div> <div id="box">   <div style="height:0px;overflow:hidden"></div>   <p>p对象中的内容</p>   <div style="height:0px;overflow:hidden"></div> </div> <div class="box2">down</div>
    复制代码

    这2个div只充当了占位符的角色,而不发生实际的占位。而对它的外层对象而言,由于其中多了一些逻辑占位对象使得它会重新计算高度,从而实现高度的自适应。

    预览效果:


    12.IE6断头台问题:断头台问题是国外的CSS设计者给这个问题起的一个非常形象的名字,与之相反的,被切断的不是对象的头部,而是对象的底部。先来看下例子:

    HTML:

    复制代码
    <div id="layout">   <div id="left">     <p>W3School提供的内容仅用于培训。我们不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。版权所有,保留一切权利。未经书面许可,不得转载。W3School 简体中文版的所有内容仅供测试,对任何法律问题及风险不承担任何责任    </p>   </div>   <a href="#">链接1</a><br/>   <a href="#">链接2</a><br/>   <a href="#">链接3</a><br/>   <a href="#">链接4</a> </div>
    复制代码

    XHTML代码有三部分组成,一个是主对象#layout,主框架中有#left为左浮动对象,右侧为普通的4个链接,类似于左右分栏的布局。

    CSS:

    复制代码
    #layout{     border:5px solid #35BB0C;     400px;     background-color:#F2F2F2; } #left{     border:5px solid #D4CA25;     200px;     float:left;     background-color:#fff; } a:hover{     background-color:#fff; }
    复制代码

    在CSS代码部分,主要设置了链接的背景色,#left的左浮动,以便于我们观察的粗边框效果。先通过浏览器看看问题是如何发生的,见下图:

    IE6预览效果:

    这里列出了IE6网页效果的2个状态,当网页被打开时,页面正常显示,与CSS编码指定样式一致。当鼠标右侧的“链接4”时,问题出现了,主对象#layout下面被切掉了,而剩下的高度正好是4个链接的高度。而当鼠标移到“链接1”或“链接2”时,#layout对象的高度又恢复正常。这便是IE6断头台问题。

    这个问题的主要原因在于链接上,去除链接的a:hover{">值得注意的是,在#layout中,#left是个浮动对象,而右测是若干链接对象。对于未指定高度的对象而言,IE6会根据其中的内容(不管浮动与否)来计算高度的大小,而当例子中的链接对象是个非浮动对象,并具有hover改变border,background及padding属性时,IE6会认为这些属性同时会改变#layout的高度,因此它重新计算对象高度。而令人失望的是,IE6的这种自以为是的行为并没有达到预期目的,它会把非浮动对象的总高度作为高度给了#layout,从而切断了#left的内容。基于这类问题的产生原因,解决方案可以有多种。

    解决问题:

    根据问题产生的原因,我们可以做出多套解决方案。我们知道因为非浮动对象与浮动对象都在#layout中,所以我们可以从浮动方式入手,把非浮动对象改为浮动对象,这样便可以解决问题。例如对XHTML修改如下:

    复制代码
    <div id="layout">   <div id="left">     <p>W3School提供的内容仅用于培训。我们不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。当使用本站时,代表您已接受了本站的使用条款和隐私条款。版权所有,保留一切权利。未经书面许可,不得转载。W3School 简体中文版的所有内容仅供测试,对任何法律问题及风险不承担任何责任    </p>   </div>   <div id="right">     <a href="#">链接1</a><br/>     <a href="#">链接2</a><br/>     <a href="#">链接3</a><br/>     <a href="#">链接4</a>   </div> </div>
    复制代码

    对链接加上个div,并设置浮动#right{float:left}。这样使得两个对象都成为浮动对象,不会引发问题。

    也可以在#layout底部增加一个div来强制IE浏览器重新计算高度<div style="clear:both;"></div>,这个清除浮动内容的div会帮助浏览器重新找到合适的高度,从而解决断头台问题。


    13.容器不扩展问题:容器不扩展问题是我们经常遇到的。比如我们创建了一个div嵌套结构:

    HTML:

    <div id="divGroup">   <div id="a">子容器a</div>   <div id="b">子容器b</div> </div>

    CSS:

    复制代码
    #divGroup{     border:2px solid #333; } #a,#b{     border:2px solid #333;     float:left;     margin:5px; }
    复制代码

    IE预览结果:

    Firefox预览结果:

    可见外层的高度并没有随着子容器的高度自动扩展,却是形成了一条线。这是因为当子容器成为浮动元素后,并脱离了文档流。因此父容器认为自己内容为空,从而造成了这样的结果。

    解决问题:

    解决方案是在容器的末尾加入个清理浮动的div。

    修改后的HTML:

    <div id="divGroup">   <div id="a">子容器a</div>   <div id="b">子容器b</div>   <div style="clear:both;"></div> </div>

    如果还想防止这个元素占据父元素的高度,可以进一步优化成<div style="clear:both;display:block;font:0px/0px sans-serif;">&nbsp;</div>,这样这个清除浮动的容器被认为是个不占任何高度的空格字符。在网页中的任何地方,当遇到容器不扩展时,只需加入此段便能修复问题。


    14.IE8和FireFox父子元素上下margin叠加问题:

    先看下效果:

    <div class="gray">         <div class="blue"></div>
      <div class="black"></div>
    </div>
    复制代码
    .gray{
        background:gray;
        200px;
        margin:20px;
    }
    .blue{
        background:blue;
        100px;
        height:100px;
        margin:20px;
    }
    .black{
        background:black;
        100px;
        height:100px;
        margin:20px;
    }
    复制代码

     

    上图中,蓝色div和黑色div是灰色div的子元素,三个div的margin都是20,但是我们看到蓝色div与其父元素的上边界并没有20px的间隙,黑色div与其父元素的下边界也没有20px的间隙,也就是说蓝色div的上外边距与其父元素的上外边距叠加在了一起,就好像是蓝色div的上外边距跑出去了一样。黑色div也是同理。这就是父元素与子元素的边距叠加效果,叠加后的取值取的是两者中较大的那个。经测试,只要父元素有border或padding,就不会触发这个问题。然而刻意给父元素设置border或padding又会带来位移。可采用如下方法来根本解决问题:

    解决问题:给父元素设置overflow:hidden;即可解决。

    再来预览下:

    IE8:

    解决了。

    FireFox:

    也解决了。


    15.IE6高度不固定问题:

    典型BUG1:IE6下,即使给父元素设了固定高度,子元素还是会将其撑开。

    典型BUG2:如果一个元素没有子元素,而这个元素设置的length又小于div默认高度,则这个元素在IE6里显示的高度仍然是div的默认高度。

    引发以上2个BUG的原因在于length属性在IE6里被当作min-length(最小高度)解析了,(换句话说,你压根在IE6中就没设置过固定高度,因为你设置的是最小高度)

    解决办法是再给父元素设置overflow:hidden; 


    16.IE6设置了最小高度并撑满父元素高度:

    默认情况下如果对IE6设置了最小高度200px,那么如果实际内容有250px,则只会显示250px的高度。也就是高度会跟随着内容显示。如果此时希望无论里面内容有多少,都让其填充满父元素高度,则要这么设置:

    height:auto!important;  height:200px;  min-height:200px;

    17.IE6、IE7下浮动元素未脱离文档流假象的问题:

    对元素设置浮动后,在IE6&IE7下预览,会产生元素未脱离文档流的假象的现象。其实元素脱离文档流了,这问题其实是其后的元素引起的。由于其后的元素因某些原因造成hasLayout被触发而导致的它未去占据浮动元素的空间(这问题说起来话长,你就这么理解好了:这个大概追朔到表格布局的年代,由于单元格都是有hasLayout的,而后面单元格里的元素肯定不会跑前面的单元格里去的)。关于hasLayout,在第5条里有详细说明,这里单独提出来作为一条来说明,仅因为这个浮动未脱离文档流假象的问题比较典型。


    18.全屏遮罩后居中显示一个对话层:

    下面是遮罩层:绝对定位,宽高都100%,并且半透明

    复制代码
    .over{
        position:absolute;
        100%;
        height:100%;
        top:0px;
        left:0px;
        background-color:#7E9898;
        filter:alpha(opacity=50);
        -moz-opacity:0.5;
        -khtml-opacity:0.5;
        opacity:0.5;
    }
    复制代码

    下面是对话层:也是绝对定位:

    复制代码
    .confirm{
        position:absolute;
        400px; 
        height:300px;  
        background:#FFFFFF;
        top:300px;
        left:0px;
    }
    复制代码

    这里的提示层不要嵌套在遮罩层里面,否则也会受影响,变成半透明的了。要让提示层跟遮罩层并列。

    这里还有2个问题:

    1.单单对遮罩层使用height:100%,只有IE6会达到效果,而其他浏览器一旦只会是当前可见区域遮上了,如果拖动纵向滚动条,发现下方还有没遮盖上。

    2.用户电脑分辨率不同,而绝对定位的提示层使用margin:300px auto也无效。

    为了达到各浏览器网页可见区域全部遮盖的效果,这里用了下jquery脚本,解决以上2个问题: 

    $(document).ready(function(){
         $("div[class='cover']").height($(document).height());//将可见区域都遮罩起来
          $("div[class='confirm']").css("left",($(document).width()-($("div[class='confirm']").width()))/2+"px");//提示层居中
    });

    最佳实践:

    1.写DTD声明:

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

    2.引入base.css重置各浏览器默认属性值:

    复制代码
    html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0px;padding:0px;}
    table{border-collapse:collapse;border-spacing:0px;}
    fieldset,img,abbr,acronym{border:0px;}
    address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
    ol,ul{list-style:none;}
    caption,th{text-align:left;}
    h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
    q:before,q:after{content:'';}
    复制代码

    3.同时为一个元素写float和margin-left(margin-right)的时候,习惯性地想到IE6会双倍边距,用display:inline解决。

    4.为子元素写margin-top或margin-bottom的时候,习惯性的去思考父元素是否有padding或border属性,从而断定是否会在IE6&IE7上产生上下外边距重合问题。如果有问题用overflow:hidden;解决。

    5.给元素设了固定高度后,习惯性地再设个overflow:hidden;从而避免IE6上高度继续扩展的问题。

    6.必要时候要clear,<div style="clear:both;"></div>。

    7.对于文本,在使用margin-left、padding-left、margin-top、padding-top之前优先考虑是否可用text-indent和line-height代替。因为计算尺寸的代价相对来说要大些。

    如能做到以上几点,就已经避免了90%的浏览器兼容性问题。 

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/gates/p/4220413.html
Copyright © 2011-2022 走看看