浏览器兼容问题知识总结

一、什么是 CSS hack

如我们所见,浏览器种类是很多的,有 Chrome、FireFox、IE、国产浏览器等等,每个浏览器甚至同一浏览器的不同版本对页面渲染标准、样式识别都不一样,所以,开发者为了给不同的浏览器展示同一种页面效果或者完整效果,就需要对这些情况进行适配。主要是利用一些浏览器的 BUG 或者 样式前缀来达到效果。

参考: CSS 滤器 | WIKI

二、谈一谈浏览器兼容的思路

1. 要不要做

首要要明确用户受众群体,像政府、银行或者一些传统的行业,内部使用的电脑还是Window XP,所以此时就需要考虑低版本的 IE 浏览器的兼容问题,明确在低版本 IE(IE6、IE7)的 hack 写法,JS 的一些写法。然后是成本问题,解决兼容问题,需要用各种 hack 来处理,所以增加了开发成本,假如成本足够,而且又不想丢失低版本浏览器用户,那就可以做兼容处理。

2. 要做到什么程度

浏览器种类和对应的浏览器版本都非常多,如果不是硬性要求,那么在相对久远的浏览器版本就可以不必适配兼容性了,因为本身用户已经很少,并不值得投入过多精力。

3. 如何做

  • 兼容框架

可以使用一些别的公司封装好的框架,里面已经为我们封装好兼容性的解决方案,可直接使用,如:jQuery

  • 兼容工具

一般都是一些处理特定兼容性的工具,如: html5shiv.jsrespondCSS Resetnormalize.cssModernizr

  • JS 转换样式工具

postcss

  • 渐进增强

针对低版本开发,保证最基本功能,再逐渐提升,为高版本浏览器的用户提供更好的交互。

  • 优雅降级

一开始就构建了完整的功能,再根据浏览器做兼容。

参考: 渐进增强与优雅降级的区别 | Stack Overflow

三、列举5种以上浏览器兼容的写法

1. 前缀样式

为样式添加特定前缀,会限定仅该指定浏览器内核才能识别该样式。

p {
  color: #000;         /* 段落在忽略下面所有规则的浏览器中显示为黑色 */
  -moz-color: #F00;    /* 段落在 Gecko 浏览器中显示为红色 */
  -webkit-color: #00F; /* 段落在 Webkit 浏览器中显示为蓝色 */
  -khtml-color: #0F0;  /* 段落在 KHTML 浏览器中显示为绿色 */
  -xv-color: #FF0;     /* 段落在 Presto 浏览器中显示为黄色 */
}

2. 下划线 hack

IE 6 及以下版本可以识别以下划线开头的样式,但其他版本并不能识别(还可以识别其他字符,但主要用下划线)

#elem {
  width: [W3C 模型宽度];
  _width: [BorderBox 模型];
}

3. 星号 hack

IE 7 及以下版本可以识别一些特定字符,这里也主要用星号,如下:

#elem {
  width: [W3C 模型宽度];
  *width: [BorderBox 模型];
}

4. 子选择器 hack

IE 6 及以下版本不支持子选择器>,如

/* IE 6 下颜色没变化 */
html > body p { color: blue; }

5. 条件注释

不同版本的 IE 浏览器对 HTML 注释的识别不一样,如:

<head>
  <title>测试</title>
  <link href="all_browsers.css" rel="stylesheet" type="text/css" />
  <!--[if IE]> <link href="ie_only.css" rel="stylesheet" type="text/css"> <![endif]-->
  <!--[if lt IE 7]> <link href="ie_6_and_below.css" rel="stylesheet" type="text/css"> <![endif]-->
  <!--[if !lt IE 7]> <![IGNORE[--><![IGNORE[]]> <link href="recent.css" rel="stylesheet" type="text/css"> <!--<![endif]-->
   <link href="not_ie.css" rel="stylesheet" type="text/css"> <!--<![endif]-->
</head>

四、以下工具/名词是做什么的

  • 条件注释

不同版本的 IE 浏览器对 HTML 注释的识别不一样,使用条件注释可以为不同版本 IE 加载不同的 CSS 样式。

  • IE Hack

很多兼容问题,其实就是 IE 浏览器的兼容问题,所以 IE hack 就是根据当前版本的 IE BUG 来处理兼容性问题。

参考: 区分 IE8/IE7/IE6 以及其他浏览器-CSS | 张鑫旭

  • js 能力检测

不同浏览器对 JS 的支持程度不同,所以在使用该 JS 的方法之前,可以先判断一下当前浏览器是否有该方法,但有些工具或框架可以为我们做这种事,如 jQuery

  • html5shiv.js

为低版本浏览器识别新 HTML 5 标签的解决方案

  • respond.js

为响应式的媒体查询@media提供降级方案

  • css reset

为所有浏览器统一、初始化样式

  • normalize.css

更优质的 CSS Reset 方案

  • Modernizr

用来检测当前浏览器所支持的 HTML 5 和 CSS 3 新特性。

  • postCSS

通过 JS 来改变 CSS 的一套工具,里面有各种插件,实现各种功能,如自动为样式加前缀、px单位转换等。

五、一般在哪个网站查询属性兼容性?

  1. 简单直接点,直接百度或谷歌,兼容问题的坑,前辈们基本上都踩过了,如果没踩过的,恐怕靠我们自己也做不出来。
  2. Can I Use。直接查询某种样式在各个浏览器、各个版本的支持程度。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,625评论 1 92
  • 什么是 CSS hack CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什...
    怎么昵称阅读 351评论 0 1
  • CSS Hack 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展示的页面效果不...
    zx9426阅读 358评论 0 0
  • 什么是CSS hack CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari...
    尾巴尾巴尾巴阅读 729评论 0 0
  • 近几年,在很多中小企业里比较流行“家”文化,“家”文化因操作简单,有利于“团队建设”被一些挣了点钱、却没有多少文化...
    高手如林阅读 877评论 0 2