Hibop / Hibop.github.io

Hibop 个人博客
https://hibop.github.io/
23 stars 1 forks source link

关于浏览器兼容问题 #36

Open Hibop opened 6 years ago

Hibop commented 6 years ago

在做web前端开发时, 浏览器兼容性的问题没有少碰到过: 对IE浏览器来说,IE7是个跨度,因为之前的版本更新甚慢,bug甚多。从IE8开始,IE浏览器渐渐遵循标准,到IE9后由于大家都一致认为标准很重要,可以说在兼容性上比较好了,但是在中国来说,由于xp的占有率问题,使用IE7以下的用户仍然很多,所以我们不得不考虑低版本浏览器的兼容。

常用hack

  1. 使用meta标签来调节浏览器的渲染方式,告诉浏览器用哪种内核渲染,360双核浏览器就是在ie和chrome之间来回切换,现在使用meta标签来强制使用最新的内核渲染页面:

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  2. CSS3前缀

    -webkit- webkit渲染引擎  chrome/safari
    -moz gecko引擎    firefox
    -ms- trident渲染引擎 IE
    -o-    opeck渲染引擎 opera
  3. 不支持IE8的属性

    • rgba不支持IE8 =====> 用opacity
    • 过渡不兼容IE8 ======> 可以用JS动画实现
    • background-size不支持IE8 =====> 可以用img
  4. 用css hack

    IE6: _
    IE7/7: *
    IE7/Firefox: !important
    IE7: *+
    IE6/7/8: \9
    IE8: \0
  5. 使用PIE.htc让IE6/7/8支持CSS3部分属性,像CSS3的border-radius,box-shadow,css backgrounds(-pie-background),Gradients,RGBA属性

    .border-radius {
    border-radius: 10px;
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    background: #abcdef;
    behavior: url(css/PIE.htc);
    }
  6. :IE浮动margin产生的双倍距离,通常使用float:left来实现,浏览器存在兼容性问题,导致图片与 后面的内容存在margin不一致的问题,解决方法就是给图片添加diaplay:inline即可.

  7. ie8不支持nth-child,但支持first-child和last-child,可以通过转化写法来处理问题,span:nth-child(2)可以转换为span:first-child+span,可以使ie8显示该内容,last-child可以自定义一个class类兼容ie8写法

  8. IE8下不支持HTML5属性placeholder,解决问题的js插件挺多的,常用的使用jquery.JPlaceholder.js插件处理问题

  9. 识别HTML5元素,IE中可能无法识别nav/footer,使用html5 div

  10. 火狐下表单阻止表单默认提交事件:在form中添加 action=”javascript:”,秒杀上述所有默认行为;

  11. 始终为按钮button添加type属性,IE下的默认类型是button,其他浏览器下的默认类型是submit;

  12. IE浏览器下由于参数过长导致通过GET请求下载文件方法报错,解决改为POST请求;

  13. IE浏览器下iframe弹窗中输入框光标丢失(无法输入)问题,解决清一下frame;

  14. IE下删除所有不必要的console语句,IE下当遇到console时不识别之后报错,代码不会执行,或者全局自定义一个window.console方法

  15. 兼容IE8 new Date()返回NaN问题,解决自定义方法

    function parseISO8601(dateStringInRange) {
    var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateStringInRange);
    
    if(parts) {
        month = +parts[2];
        date.setFullYear(parts[1], month - 1, parts[3]);
        if(month != date.getMonth() + 1) {
            date.setTime(NaN);
        }
    }
    return date;
    }

【兼容性方案外链】

【分享】浏览器兼容性问题综述 -- 正确的认识浏览器兼容性问题

【分享】你的元素居中对齐了吗? --- 关于 'text-align:center' 的问题

【分享】<a>标签的伪类书写顺序问题

【分享】IE6 中 A 标签 hover 伪类特殊性过高的问题

【分享】深入挖掘document.getElementsByTagName()方法的返回值

【分享】警惕你的 Date 对象

【分享】重新认识IE盒模型bug

【分享】你知道吗?--- 表格的盒子模型问题

【分享】CSS Hack的基本原理、常用CSS hack及使用原则

【分享】如何正确的获取scrollTop/scrollLeft的值


【分享】Firefox 中 TABLE 元素百分比宽度属性的问题

【分享】小心,IE中 width/height的设定值可能被其内容撑大

【分享】小心IE 下document.getElementById()的陷阱

【分享】Firefox中table元素的绝对定位子元素包含块判定错误的bug

【分享】小心 IE 中对 IMG 元素 alt 属性的误用

【分享】慎用 INPUT 元素的size属性控制其宽度

【分享】Firefox中神奇的JS引擎逻辑判断代码优化

【分享】警惕缺失单位的CSS长度值

【分享】你肯定没注意过,SPAN元素的宽度高度在IE下竟然有用!!

【分享】当 A 标签缺少 href 属性, :hover还有效么?

【分享】低版本IE对某些CSS选择器的支持缺陷

【分享】IE中,单元格的colspan属性可能影响TABLE元素的自动布局

【分享】奇怪的document.all,浏览器对document.all的支持差异

【分享】非IE浏览器对marquee的支持

【分享】深入挖掘 offsetParant 元素的判定

【分享】你必须知道--IE中的hasLayout

【分享+求救】disabled 能不能使链接失效

【分享】Firefox中 TEXTAREA 元素的 rows 属性很奇怪

【分享】window.onerror,屏蔽JS error的利器?

【分享】零高度的浮动元素是否不影响其他元素定位?

【分享】有关JS中数据类型判断的兼容性问题之:typeof

【分享】浮动元素上 clear 特性的兼容性问题

【分享】FONT 标签字体颜色对文本装饰('text-decoration')的影响

【分享】页面与页面中引入的外部 CSS 文件编码不一致引起的兼容性问题

【分享】IE 中触发 hasLayout 的空 DIV 高度竟然不是 0

【分享】行内元素后的浮动元素的定位在各浏览器中有差异

【分享】@charset使用注意事项

【分享】z-index 默认值引起的兼容性问题

【分享】文件选择控件 input[type=file]的外观可能会引起兼容性问题

【分享】被透明元素遮挡的元素还可以被点击到吗?

【分享】align 在各浏览器中的实现差异及引起的问题

【分享】Table元素的 align='center' 会受 margin 值的影响吗?

【分享】警惕带有中文字符的JS变量

【分享】IE 中一个对象的 native 方法是跟该对象绑定的

兼容性问题太多太让人费心,知道它们可以让我们有效的绕过这些陷阱,并让我们对标准的理解更加深入,有关注W3C CSS2.1标准的可以看这里:说说标准系列目录

不断更新中……