虚拟机virtualbox
1、谈一谈浏览器兼容的思路
确定要不要做
- 产品的角度(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)
- 成本的角度 (有无必要做某件事)
做到什么程度
- 综合考量需要做到什么浏览器什么版本的兼容,比如兼容到IE7 还是IE6
如何做
- 根据兼容需求选择技术框架/库(jquery)
- 根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr)
- postCSS
- 条件注释、CSS Hack、js 能力检测做一些修补
渐进增强和优雅降级
- 渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验
- 优雅降级 (graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
2、什么是 CSS hack
由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。
这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果。
CSS Hack大致有3种表现形式:
-
属性前缀法(即类内部Hack):
例如 IE6能识别下划线"_"和星号" * ";
IE7能识别星号" * ",但不能识别下划线"*;
IE6~IE10都认识"\9";
但firefox前述三个都不能认识。
.box{
color: red; /*所有浏览器都支持*/
color:red !important; ⁄* Firefox、IE7支持 *⁄
_color: blue; /*ie6支持*/
*color: pink; /*ie6、7支持*/
color: yellow\9; /*ie/edge 6-8*/
}
-
选择器前缀法(即选择器Hack)
*html *前缀
只对ie6生效
*+html *+前缀
只对ie7生效 -
IE条件注释法(即HTML条件注释Hack,IE10+已经不再支持条件注释):
针对所有IE:
;
针对IE6及以下版本:
``;
这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效
3、列举5种以上浏览器兼容的写法
处理兼容问题的手段:
- 合适的框架
Bootstrap (>=ie8)
jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9)
Vue (>= ie9)
- 条件注释
<!--[if IE 6]>
<p>You are using Internet Explorer 6.</p>
<![endif]-->
- CSS hack
.box{
color: red; /*所有浏览器都支持*/
color:red !important; ⁄* Firefox、IE7支持 *⁄
_color: blue; /*ie6支持*/
*color: pink; /*ie6、7支持*/
color: yellow\9; /*ie/edge 6-8*/
}
- 使用兼容工具
- 常见兼容处理范例
.clearfix:after{
content: '';
display: block;
clear: both;
}
.clearfix{
*zoom: 1; /* 仅对ie67有效 */
}
4、以下工具/名词是做什么的
-
条件注释(conditional comment)
是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码。
IE10不再支持条件注释。
项目 | 范例 | 说明 |
---|---|---|
! | [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 |
-
IE Hack
针对IE浏览器编写不同的CSS的让IE能够正常渲染的过程 -
js 能力检测
检测浏览器是否支持某种特定的能力,然后给出特定的解决方案。 -
html5shiv.js参考资料
用于解决IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题。 -
respond.js
让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览器支持查询。 -
css reset参考资料
早期的CSS Reset的作用就是清除所有浏览器默认样式,这样更易于保持各浏览器渲染的一致性。暴力清零带来的问题:
1.*{ margin:0; padding:0; }
会带来性能问题
2.使用通配符存在隐性问题
3.过渡的标签重置等于画蛇添足
4.过渡的标签重置导致语言元素失效 -
normalize.css
是一个可定制的 CSS 文件,使浏览器呈现的所有元素,更一致和符合现代标准;是在现代浏览器环境下对于CSS reset的替代。
该项目依赖于研究浏览器默认元素风格之间的差异,精确定位需要重置的样式。相比于传统的CSS Reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被用于Twitter Bootstrap、HTML5 Boilerplate、GOV.UK、Rdio、CSS Tricks 以及许许多多其他框架、工具和网站上。
作用:
1.保护有用的浏览器默认样式而不是完全去掉它们
2.为大部分HTML元素提供一般化的样式
修复浏览器自身的bug并保证各浏览器的一致性
3.用一些小技巧优化CSS可用性
4.用注释和详细的文档来解释代码 -
Modernizr参考资料
Modernizr.js既能给老版本浏览器打补丁,又能保证新浏览器渐进增强的用户体验。 -
postCSS
PostCSS 是一个使用 JS 插件来转换 CSS 的工具。这些插件可以支持使用变量,混入(mixin),转换未来的 CSS 语法,内联图片等操作。
5、一般在哪个网站查询属性兼容性?
6、常见属性的兼容情况
属性 | 兼容 |
---|---|
div:hover | >=ie7 |
inline-block | >=ie8 |
min-width/min-height | >=ie8 |
:before,:after | >=ie8 |
background-size | >=ie9 |
border-radius圆角 | >= ie9 |
box-shadow阴影 | >= ie9 |
transform动画/渐变 | >= ie10 |
网友评论