浏览器兼容
2017-10-12 本文已影响0人
月光下的微笑
什么是 CSS hack
由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。
这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。
谈一谈浏览器兼容的思路
-
要不要做:
产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)
成本的角度 (有无必要做某件事) -
做到什么程度:
让哪些浏览器支持哪些效果 -
如何做:
根据兼容需求选择技术框架/库(jquery)
根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr、postCSS)
条件注释、CSS Hack、js 能力检测做一些修补
列举5种以上浏览器兼容的写法
- 注释法
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
- IE Hack法
.box{
color: red;
_color: blue; /*ie6*/
*color: pink; /*ie67*/
color: yellow\9; /*ie/edge 6-8*/
}
- 兼容清除浮动
.clearfix{
content: " ";
display: block;
clear: both;
}
.clearfix{
*zoom: 1; //for ie6,7
}
- ie 67的inline-block
.target{
display: inline-block;
*display: inline;
*zoom: 1;
}
- 利用插件提高兼容
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
以下工具/名词是做什么的
- 条件注释
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
<!--[if !IE]><!-->
<script>alert(1);</script>
<!--<![endif]-->
<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->
项目 | 范例 | 说明 |
---|---|---|
! | [if !IE] | 非IE |
lt | [if lt IE 5.5] | 小于IE 5.5 |
lte | [if lte IE 6] | 小于等于IE6 |
gt | [if gt IE 5] | 大于 IE5 |
gte | [if gte IE 7] | 大于等于IE7 |
| | [if (IE 6)|(IE 7)] | IE6或者IE7 |
指于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。
- IE Hack
.box{
color: red;
_color: blue; /*ie6*/
*color: pink; /*ie67*/
color: yellow\9; /*ie/edge 6-8*/
}
针对ie的css hack
- js 能力检测
检测是否有这个属性,方法没有就用另外一种方式获取这个
通常直接用jquery来达到这个目的。 - html5shiv.js
让一些自身不支持html5标签的浏览器支持html5。具体方式是使用createElement()来创建标签。 - respond.js
为了响应式的页面,为ie6/7/8模拟css3的媒体查询。 - css reset
为浏览器自身有默认的样式,如padding和margin等, 不方便我们使用,所以我们要重置这些属性,如将margin设为0,字体设置为xx等等。暴力清除。 - normalize.css
上面一个的进化版本,保护了有用的浏览器默认样式。 - Modernizr
探测用户浏览器html5和css3的一些特性,根据用户浏览器是否支持这些特性来向html元素中添加不同的class。 - postCSS
PostCSS 是一个允许使用 JS 插件转换样式的工具。 这些插件可以检查(lint)你的 CSS,支持 CSS Variables 和 Mixins, 编译尚未被浏览器广泛支持的先进的 CSS 语法,内联图片,以及其它很多优秀的功能。PostCSS的目标是通过自定义插件和工具这样的生态系统来改造CSS。与Sass和Less这些预编译器相同的原则,PostCSS把扩展的语法和特性转换成现代的浏览器友好的CSS。