什么是 CSS hack
由于不同厂商的浏览器,或者是同一厂商的浏览器的不同版本,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一致,得不到我们所需要的页面效果。这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。
谈一谈浏览器兼容的思路
- 首先考虑需不需要做兼容。从产品的角度考虑产品的受众以及浏览器的比例,效果优先还是基本功能优先。
- 成本的考虑,投入产出比。
- 兼容哪些浏览器,兼容到什么版本,让哪些浏览器支持哪些效果。
- 渐进增强和优雅降级的选择
渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
浏览器兼容的写法
-
条件注释:
<!-- [if lt IE9]> <style> header, footer, nav{display:block;} </style> <![endif]-->
-
属性前缀法:
.box{ color: red; _color: blue; /ie6/ color: pink; /ie6,7/ color: yellow\9; /ie/edge 6-10/ }
-
选择器前缀法
span{ /仅ie6/ display: block; }
使用Moderniz( 利用Modernizr的能力检测,对标签不存在的能力特别优化)
<div class="no-textshadow"></div>
.no-textshadow{border:1px solid red;}
-
条件注释和兼容工具相结合
<!--[if lte IE9]> <script src="../js/html5shiv.js"></script> <![endif]-->
以下工具/名词是做什么的
条件注释
这是基于HTML源码中被IE(IE<=9)有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。
IE Hack
针对IE浏览器编写不同的CSS(属性前缀法、选择器前缀法、IE条件注释法)使得页面效果在不同版本的IE浏览器中达到效果一致。
js 能力检测
使用JS来检测浏览器拥有的能力而不是来区分是什么浏览器。这样如果浏览器拥有某种能力则提供一种方案,没有某种能力则提供另一种方案。
html5shiv.js
针对不支持HTML5标签的浏览器,创建并模拟HTML5的标签的效果并使相应的CSS生效。
respond.js
为不支持CSS3媒体查询的浏览器(IE6-8)模拟CSS3的媒体查询。
css reset
清除浏览器默认的元素样式。
normalize.css
保护有用的浏览器默认样式;一般化的样式,修复浏览器自身的bug并保证各浏览器的一致性;优化CSS可用性。
Modernizr
是一个JS类库,用来检测浏览器的CSS3和HTML5能力,从而解决浏览器的兼容问题。
postCSS
利用JS插件转换CSS。可以将CSS解析成抽象语法树。