Web前端知识(二)——浏览器兼容
来源:互联网 发布:基督城 知乎 编辑:程序博客网 时间:2024/05/20 07:32
什么是 CSS hack?
CSS hack是通过在CSS 中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不同的CSS样式的目的,比如.kwstu{width:300px;_width:200px;},一般浏览器会先给元素使用width:300px;的样式,紧接着后面还有个_width:200px;由于下划线_width只有IE6可以识别,所以此样式在IE6中实际设置对象的宽度为200px,后面的把前面的给覆盖了,而其他浏览器不识别_width不会执行_width:200px;这句样式,所以在其他浏览器中设置对象的宽度就是300px;
CSS hack由于不同厂商的浏览器,比如Internet Explorer,Safari,Mozilla Firefox,Chrome等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS的解析认识不完全一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。
简单的说,CSS hack的目的就是使你的CSS代码兼容不同的浏览器。当然,我们也可以反过来利用CSS hack为不同版本的浏览器定制编写不同的CSS效果。
——百度百科
CSS Hack常见的有三种形式:
1、属性级Hack:
比如IE6能识别下划线“”和星号“*”,IE7能识别星号“*”,但不能识别下划线” ”,而firefox两个都不能认识。
2、选择符级Hack:
比如IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}。
3、IE条件注释Hack:
IE条件注释是微软IE5开始就提供的一种非标准逻辑语句。比如针对所有IE:<!-[if IE]><!-您的代码-><![endif]>,针对IE6及以下版本:<!-[if it IE 7]><!-您的代码-><![endif]->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
PS:条件注释只有在IE浏览器下才能执行,这个代码在非IE浏览下被当做注释视而不见。可以通过IE条件注释载入不同的CSS、JS、HTML和服务器代码等。
浏览器兼容的思路
- 要不要做
从产品的角度出发:考虑产品的受众以及受众的浏览器比例,效果优先还是基本功能优先。
从成本的角度考虑,是否需要添加这个效果以及是否需要兼容这一类的浏览器。 - 做到什么程度
让哪些浏览器支持哪些效果,比如是否让IE7浏览器支持圆角或者阴影,还是只针对IE9以上的用户才提供阴影效果。 - 如何做
根据兼容需求选择技术框架
根据兼容需求选择兼容工具
使用条件注释、CSS Hack、js能力做一些修补
一般有两种思路:
渐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,再针对高级浏览器进行效果、交互等方面的改进和追加功能达到更好的用户体验。
优雅降级:一开始就构建完整的功能,再针对低版本浏览器进行兼容。
5种以上浏览器兼容的写法
*,ie6,ie7可以识别;
_和- , ie6可以识别;
!important ,表示高优先级,ie7及以上,firefox都支持,ie6认识带!important的样式属性,但不认识!important的优先级;
-webkit- ,针对safari,chrome浏览器的内核CSS写法
-moz-,针对firefox浏览器的内核CSS写法
-ms-,针对ie内核的CSS写法
-o-,针对Opera内核的CSS写法
以下工具名词的意思
条件注释:
条件注释 (conditional comment) 是于HTML源码中被 Microsoft Internet Explorer 有条件解释的语句。条件注释可被用来向 Internet Explorer 提供及隐藏代码。
条件注释最初于微软的 Internet Explorer 5浏览器中出现,并且直至 Internet Explorer 9 均支持。微软已宣布于 Internet Explorer 10 中以标准模式处理页面 - 如 HTML5 - 时停止支持,但是旧版网页使用这种技术(于兼容性视图)将继续有效。JScript 条件注释于 Internet Explorer 4 中被引进,而在 Internet Explorer 10 中继续受支持,无论于标准模式或者兼容性模式之中,但在 Windows 应用商店应用程序中不受支持。
IE Hack:
SS Hack常见的有三种形式:CSS属性Hack、CSS选择符Hack以及IE条件注释Hack, Hack主要针对IE浏览器。
1、属性级Hack:
比如IE6能识别下划线””和星号” * “,IE7能识别星号” * “,但不能识别下划线””,而firefox两个都不能认识。
2、选择符级Hack:
比如IE6能识别html .class{},IE7能识别+html .class{}或者*:first-child+html .class{}。
3、IE条件注释Hack:
IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句。比如针对所有IE:
js 能力检测:
我们知道,各个版本的浏览器有着许多不一致性。理想状态下,应该是所有的浏览器都提供一套标准的API接口。但是现实中,各个版本的浏览器存在的怪癖非常多,我们通常都是使用客户端检测来作为补救措施。但是我们应该知道,不到万不得已,不要使用客户端检测。只要能找到更通用的方法,就应该优先采用更通用的方法。总之。先设计最通用的方案,在使用特定于浏览器的技术增强该方案。
最常用的也是最广泛使用的客户端检测技术是能力检测(特性检测)。能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力。使用这种方式无需顾及浏览器如何如何,只需确定浏览器是否支持特定的能力,就可以给出相关的方案。
//特性检测
if (object.propertyInQuestion) {
//使用object.propertyInQuestion
}
html5shiv.js
用于解决IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题。
html5shiv的使用非常的简单,考虑到IE9是支持html5的,所以只需要在页面head中添加如下代码即可:
<!--[if lt IE 9]>
<script type="text/javascript" src="js/html5shiv.js"></script>
<![endif]-->
respond.js
Respond.js是一个快速、轻量的脚本(3kb minified / 1kb gzipped),它的目标是使得那些不支持CSS3 Media Queryes特性的浏览器能够支持响应性设计,尤其是小于等于8的ie浏览器。它是用这样的方式,尽可能的修补那些不支持的浏览器来支持(很快将会有更多的信息)
css reset
reset,重置。css reset就是重置样式。
众所周知,现在所使用的主流浏览器对一些标签的默认属性上并没有做到统一,所以我们偶尔会发现,某个页面在chrome浏览器上很正常,到了firefox上面却有意想不到的偏差。当然编程人员不喜欢这样的兼容性问题的,而reset.css就是解决默认样式不兼容问题的办法之一。
CSS reset的作用是让各个浏览器的CSS样式有一个统一的基准,而这个基准一般认为就是“清零”,但是我们真的需要对这么多标签进行设置吗?显然不是。这样虽然全面,却没有考虑到代码的冗余,毕竟不是每一个项目都需要重置怎么多的标签。所以最好不要想也不想,把全面的reset复制粘贴到自己的style目录下,应该仔仔细细选择一翻,留下有用的,没用的和不必要的就不要让它们白白增加css的大小了。
normalize.css
Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。
Normalize.css是一种CSS reset的替代方案。经过@necolas和@jon_neal花了几百个小时来努力研究不同浏览器的默认样式的差异,这个项目终于变成了现在这样。
作用:
* 保护有用的浏览器默认样式而不是完全去掉它们
* 一般化的样式:为大部分HTML元素提供
* 修复浏览器自身的bug并保证各浏览器的一致性
* 优化CSS可用性:用一些小技巧
* 解释代码:用注释和详细的文档来
Normalize.css支持包括手机浏览器在内的超多浏览器,同时对HTML5元素、排版、列表、嵌入的内容、表单和表格都进行了一般化。尽管这个项目基于一般化的原则,但我们还是在合适的地方使用了更实用的默认值。
Modernizr
Modernizr是一套JavaScript 库,用来侦测浏览器是否支持HTML5与CSS3等规格。如果浏览器不支持,Modernizr会使用其他的解决方法来进行模拟。
Modernizr会自动运行。不需要调用modernizr_init()之类的函数。运行时会创建一个名为Modernizr的组件,里面包含了一组测试结果是否支持的布尔值。举例来说,如果浏览器支持Canvas API,Modernizr.canvas属性的值就会是true;如果浏览器不支持Canvas API,Modernizr.canvas属性的值就会是false:
postCSS
用到“PostCSS”这个词汇我们也许指的是以下两种说法的一种:
1. 存在 PostCSS 的情况下,那么就是指工具本身——当你运行指令 npm install postcss 时你将获得的结果。
2. 工具强化后的 PostCSS 插件系统。
简单点讲,PostCSS是CSS的处理器。如果你以前使用过CSS的预处理器的话,比如Sass、LESS或者说Stylus。这几个是使用预编码来处理CSS,然后编译成线上需要使用的CSS。而PostCSS刚好相反,他是处理你写好的CSS,让你的CSS更健康。
一般在哪个网站查询属性兼容性?
查询哪些浏览器支持哪些css属性:http://caniuse.com/
参考:
https://www.w3cschool.cn/css3/question-10231625.html
https://zh.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6%E6%B3%A8%E9%87%8A
https://www.zhihu.com/question/46312839
- Web前端知识(二)——浏览器兼容
- web前端知识汇总-浏览器兼容(主要IE)
- web前端,浏览器兼容
- web前端,浏览器兼容
- Web前端浏览器兼容初探
- Web前端浏览器兼容初探
- Web前端浏览器兼容初探
- Web前端浏览器兼容初探
- Web前端浏览器兼容的理解
- Web前端编码规范和浏览器兼容
- 前端(1)---浏览器兼容
- Web前端开发必备--浏览器知识科普
- 前端浏览器兼容之——css hack
- web前端开发中浏览器兼容问题(二)
- Web前端—jquery知识总结
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
- WEB前端浏览器不兼容导致的问题及解决方案
- WEB前端浏览器不兼容导致的问题及解决方案
- MySQL索引类型总结和使用技巧以及注意事项
- 使用 v-model 后 filter 失效怎么办
- 素数判定
- 串口流控 软件流控与硬件流控
- java对象转化为xml报文
- Web前端知识(二)——浏览器兼容
- Android Studio快捷键及常用语句快捷写法
- python学习系列---collections模块
- 数据泵分区表导入太慢了
- shell命令行选项与修传入参数处理
- 181. Employees Earning More Than Their Managers
- MFC学习笔记-操作篇
- 10个不得不知道的”系统进程”
- 为什么opengl中,gl_Position是vec4类型的?不是应该是vec3吗,多出来的那个是什么呀