一.什么是浏览器兼容性问题?
所谓的浏览器兼容性问题,是指不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况;而造成浏览器兼容问题的根本原因,是浏览器的内核不同导致的。
认识浏览器内核  
浏览器类型            内核                        JS引擎  
IE                      Trident                     JScript  
Firefox                 Gecko                     TraceMonkey  
Chrome              WebKit, Blink                 V8  
Safari                   WebKit                 SquirrelFish Extreme  
Opera                   Presto                     Carakan

CSS浏览器兼容性问题的解决思路和方案

1.使用CSS Hack解决兼容性问题
浏览器在读取CSS代码的时候可能会遇到一些无法识别的代码,造成这种现象的原因通常有两种:  
1. 代码本身有问题,如: bg:red ,bg并不是一个有效的css属性  
2. 代码没问题,但浏览器的内核不能识别,如: box-sizing:border-box ,这句代码本身没有问题,但由于使用的是CSS3的属性box-sizing ,会造成在一些低版本内核的浏览器中无法识别。  
总之,当浏览器遇到这些无法识别的代码时,它会怎么做呢?和java、C#等后端语言不同,浏览器不会中止程序的执行,它会立即跳过这些无法识别的代码,就当作没看见一样,继续执行后面的代码。就向下面这个例子一样:

.main{
color1 : red; /*这句代码无法被浏览器识别,浏览器就当这句代码不存在*/
color: green;
}

浏览器方面,除了拥有这种特殊的错误处理方式之外,不同的浏览器内核,以及浏览器内核的不同版本,它们同时拥有自己独特的CSS属性,这些属性在CSS标准之外。造成这种现象的原因是一些历史遗留问题。
比如,webkit内核的浏览器能够识别-webkit-box-sizing:border-box; ,在没有box-sizing的年代,它就是通过-webkit-box-sizing 来设置盒子宽高影响范围的,但其他内核的浏览器是无法识别该属性的。当然,其他内核的浏览器也拥有自己的一些特有属性,是同样的道理。

2. 浏览器CSS样式初始化

由于每个浏览器的css默认样式不尽相同,所以最简单有效的方式就是对其进行初始化,相信很多朋友都写过这样的代码,在所有CSS开始前,先把marin和padding都设为0,以防不同浏览器的显示效果不一样。

*{ margin: 0; padding: 0;
}

3. 渐近增强和优雅降级
由于我们的网页需要适应不同型号、以及同型号不同版本的浏览器。面对这么多的浏览器,就算使用Hack技术,我们也无法保证所有的样式都能正常的应用到浏览器中,比如,你无法把动画效果应用到IE5中。如果你的项目需要考虑那些旧版本的浏览器,你就会面临上面的困境。
如何处理呢?
我们的总体思路是:网页在新版本的浏览器中要应用新的效果;网页在旧版本的浏览器中可以没有新的效果,但不要布局错乱。以上是总体思路,而面对不同的项目时,可能有侧重点的不同。比如,政府网站一般会侧重考虑旧版本浏览器;而互联网应用项目会侧重考虑新版本浏览器。

针对不同的侧重点,于是出现了两种静态页面的开发思路,它们分别是渐近增强(progressive enhancement)和优雅降级(graceful degradation)。
渐进增强是指:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级是指:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
它们的区别在于:
优雅降级以新版本浏览器为目标,从现状开始,并面向低版本浏览器,逐渐减少用户体验的供给。
渐进增强以旧版本浏览器为目标,从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应新版本浏览器的需要。
降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
在代码风格上,优雅降级会优先书写新标准中的属性,以适应新版本浏览器,然后再补充旧版本浏览器中的书写方式,如下:

.transition{
transition: all .5s;
-o-transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
}

渐近增强会优先书写浏览器特有的属性,以适应旧版本浏览器,然后再补充新标准中的属性,如下:

.transition {
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}

4.使用现代化的CSS插件解决兼容问题

 

转载于:https://www.cnblogs.com/youwei716/p/11074533.html

CSS浏览器兼容性与解决方法相关推荐

  1. 浏览器与css的兼容,CSS浏览器兼容性与解决

    一.超链接访问后hover样式不出现 1.现象描述: 同时设置了a:visited和a:hover样式,但一旦超链接点击过后,hover的样式就不再出现了. 2.解决方法: 调整样式顺序为先a:vis ...

  2. html网页自动兼容模式,解决CSS浏览器兼容性问题的4种方案

    前端是一个苦逼的职业,不仅因为技术更新快,而且要会的东西实在太多了,更让人头疼的是,还要面临各种适配.兼容性问题. 为什么会有浏览器兼容性问题? 还不是因为浏览器厂商太多了! Chrome,Frire ...

  3. CSS浏览器兼容性问题详解总结

    CSS浏览器兼容性问题详解总结 2009-11-12 11:39 对css缩写的支持问题: 不论是ie 还是ff对css的缩写都有一小点问题 比如 border: 0xp solid #fff;两个浏 ...

  4. CSS浏览器兼容性的4个解决方案:浏览器CSS样式初始化、浏览器私有属性,CSS hack语法和自动化插件...

    前端是一个苦逼的职业,不仅因为技术更新快,而且要会的东西实在太多了(如果全写出来,那真是一箩筐),更让人头疼的是,还要面临各种适配.兼容性问题. 一直以来都是头痛医头脚痛医脚,没有进行系统的梳理,整个 ...

  5. CSS浏览器兼容性问题

    CSS浏览器兼容性问题 1.浏览器CSS样式初始化 最简单的初始化方法就是:使用通配符(*),重置所有的初始样式. *{margin: 0;padding: 0; } /* 10px=1rem */ ...

  6. CSS盒子塌陷及解决方法

    CSS盒子塌陷及解决方法 1 盒子塌陷的原因 2 如何清除塌陷 1 盒子塌陷的原因 什么是盒子塌陷? 外部的盒子没有包裹住内部的浮动盒子,导致了盒子塌陷. 盒子高度塌陷原因? ①父元素没有设置高度(h ...

  7. html 弹窗被拦截,window.open()弹窗被浏览器拦截的解决方法

    本篇文章给大家带来的内容是关于window.open()弹窗被浏览器拦截的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么情况下会弹窗被拦截 当window.open为用 ...

  8. Win10任务栏总是弹出推荐Edge浏览器广告的解决方法

    这篇文章给大家分享的是有关Win10任务栏总是弹出推荐Edge浏览器广告的解决方法的内容.小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧. 继 Outlook 网站."开始 ...

  9. win10中谷歌浏览器输入任何字符导致浏览器崩溃的解决方法

    win10中谷歌浏览器输入任何字符导致浏览器崩溃的解决方法 最近在使用谷歌浏览器的时候,偶尔会用百度等查询资料,如果是点击标签页直接跳转不会出现任何问题,但是一旦有输入的时候,不管是在百度等搜索栏中输 ...

最新文章

  1. 【跨域报错解决方案】Access to XMLHttpRequest at ‘http://xxx.com/xxx‘ from origin ‘null‘ has been blocked by
  2. 如何利用多核CPU提高虚拟现实性能?
  3. iOS 根据日期判断星座源代码
  4. linux2.6版及以后内核:支持实时、抢占
  5. python批量读取文件名_Python遍历目录并批量更换文件名和目录名的方法
  6. Linux网站搭建(1)---Apache2安装配置
  7. 安装kali-linux提示vesamenu.c32 not a COM32R image
  8. GBase 8a - 开启防火墙安装集群添加端口策略
  9. 多重检验_LSD方法不准确性
  10. python基础之排列组合以及正则表达式
  11. android jdk和ndk下载地址,cocos2d-x Android(SDK,NDK,JDK,ANT)下载地址
  12. 人脸检测--TinaFace
  13. python opencv 拍照_在jupyter noteb中使用opencv显示网络摄像头中的图像
  14. androidx依赖aar报错
  15. 剑指offer16. 数值的整数次方P110
  16. Java - SpringBoot 框架详解(一)
  17. 2021-08-12 This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin
  18. 02 -02 36kr项目
  19. 文字拉伸css_CSS 3D拉伸文字
  20. 调试经验——Excel中去除单元格内的换行符(Chr(10))的四种方法

热门文章

  1. mysql按照日期先去重在分组_【巨杉数据库Sequoiadb】【咨询】【数据操作】【聚集查询】在执行聚集查询时,字符类型的字段能否按照实际内容进行分组去重...
  2. csds原装的Markdown文档
  3. 集群系统服务器,Web集群服务器及管理系统
  4. 织梦内核风吟导航QQ导航天下网址管理源码
  5. Spring Cloud微服务之父工程的创建(一)
  6. PTVS 安装操作指南
  7. 给开发者准备的 10 款最好的 jQuery 日历插件
  8. node.js——麻将算法(二)赖子玩法
  9. linux获取进程信息函数
  10. 永久把linux系统chrome的user agent 改成win10系统的