浏览器兼容性问题又被称为网页或网站兼容性问题;不同浏览器内核及所支持的html等网页语言标准不同,不同客户端环境(如分辨率不同)造成实际显示效果未能达到预期理想效果

首先我们来看一下目前市面上常见的一些浏览器:ie、chrome、firefox、safari、opera、maxthon、360、qq、yy、uc、sogou、2345、淘宝、猎豹、世界之窗等

其中表现很出色的有chrome、firefox、safari等;而表现极差的就是ie6/7内核浏览器了,我们的兼容性工作大半都是围绕这两个浏览器内核展开

我们的常规处理方式是调试各浏览器网页显示效果、使用成熟的前端开发框架、运用css与hack技巧等

常见hack技巧

css

_:ie6内核浏览器识别color:#333;_color:#999;
*:ie7及其以下内核浏览器识别color:#333;*color:#999;
\:如\9意为ie9及其以下内核浏览器识别color:#333;color:#999\9;
!important:多内核浏览器识别,作用为强制此属性值color:#333 !important;
这几个最常用的数量虽然不多,但是够用而且很管用;但是我们的遵循原则是能不用就不用

html

ie内核浏览器识别<!--[if IE]><![endif]-->
ie6内核浏览器识别<!--[if IE 6]><![endif]-->
ie7及其以上内核浏览器识别<!--[if gte IE 7]><![endif]-->
ie7及其以下内核浏览器识别<!--[if lte IE 7]><![endif]-->
非ie内核浏览器识别<!--[if !IE]><![endif]-->
非ie7及其以下内核浏览器识别<!--[if !(lte IE 7)]><!-->

常见浏览器兼容性问题及解决方案

height低像素值无效

浏览器环境:ie6

height:5px;

height高度实际表现为大于5像素,问题产生是因为ie6下容器默认行高的影响;
为高度过低元素添加溢出部分隐藏属性即可;

height:5px;
overflow:hidden;

margin值双倍边距

浏览器环境:ie6

margin:0 10px;
float:left;

margin左右边距实际表现为20像素,问题一般发生于浮动元素,原因是ie6下浮动元素margin值默认变成双倍;为浮动元素添加行间元素属性即可,优化了同行元素的排版表现

margin:0 10px;
display:inline;
float:left;

或为浮动元素添加ie6专有属性

margin:0 10px;
_margin:0 5px;
float:left;

max-width、min-width、max-height、min-height等属性无效

浏览器环境:ie6

max-width:1280px;
min-width:980px;
max-height:800px;
min-height:600px;

最大最小宽高属性在网页需要它出现时并没有给面子,问题原因是ie6不支持;解决办法是使用expression来实时获取元素当前适合宽高

max-width:1280px;_width:expression(documentElement.clientWidth > 1280 ? "1280px" : "auto");
min-width:980px;_width:expression(documentElement.clientWidth < 980 ? "980px" : "auto");
min-height:800px;_height:expression((documentElement.clientHeight || document.body.clientHeight) > 800 ? "800px" : "");
min-height:600px;_height:expression((documentElement.clientHeight || document.body.clientHeight) < 600 ? "600px" : "");

网页实际情况各不相同,各位在根据需求处理具体页面时请自己提好裤子认真测试

fixed属性值无效

浏览器环境:ie6

position:fixed;top:100px;left:10px;

预想中的悬挂效果并没有出现,原因很简单ie6根本不支持;我们的解决办法是改变元素的悬挂为定位并使用expression来实时处理元素当前显示位置

position:fixed;
_position:absolute;
top:100px;
_top:expression(documentElement.scrollTop + 100 + "px");
left:10px;

expression工作时的表现还是可以接受,唯一的缺点是性能

定位元素上下或左右属性同时赋值时无效

浏览器环境:ie6

position:absolute;
top:0;
bottom:0;
left:0;
right:0;

画布实际表现为并没有按预想的全屏伸展开,问题产生原因是ie6下上下或左右定位属性同时存在时只识别上与左;为元素赋于宽高属性即可

width:100%;height:100%;position:absolute;top:0;left:0;

问题到此并没有得到完全解决,事实上,很多情况下,我们所希望的定位元素的宽高并非正好为100%

position:absolute;top:30px;bottom:50px;left:20px;right:20px;

这时css的能力似乎显得捉襟见肘,想拿出一个合适的宽高属性就无从下手了;我们只好通过css与js合作来处理

position:absolute;top:30px;left:20px;
var w = $(window).width() - 40;
var h = $(window).height() - 80;
$('#object').css({'width':w,'height':h});

有人问,resize时候不行了,你都知道网页resize了你还不知道resize事件捕捉到后怎么办么

透明png格式图片的背景问题

浏览器环境:ie6

网页上的糟糕表现为出现了灰背景,原因是ie6不支持png透明或png8及其以上的alpha透明度;网上的解决办法很多,javascript办法最多但都有通病,本身加载时间与之带来的网页负载,尤其是在网页本身负载就很大或网页上有过多需要处理的png图片的情况,会导致本来性能就不好的ie6浏览器明显停滞甚至崩溃,所以这里我们推荐的是css与图形处理两种纯天然处理方式,首先来看css滤镜处理

background:url(../images/logo.png) no-repeat 50%;
_background:none;
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../images/logo.png");

看上去一切都很美好,就是不能应用于img标签,其次是不能拼图所以也就不支持css sprite;我们再来看图形处理,使用工具为fireworks而非photoshop(其实是我们并不知它怎么实现同样操作),首先为打开的png图片的画布吸取图片四周最相近的背景色

然后打开图像预览,选择gif格式的索引色透明或alpha透明度导出,或选择png8格式的索引色透明导出即可;现在你们应该懂了,楼主不知道photoshop是否可以在图片导出时顺便附带上画布背景色

width等百分比值计算时有误

浏览器环境:ie6/7

width:25%;

如恰好有4个该元素充满外部容器,外容器宽度不是恰到好处时实际宽度会溢出,第4个元素会换行,问题的产生是因为ie6/7网页计算自适应处理能力不足;较为稳妥的处理方案是为ie6/7少许减少宽度

width:25%;*width:24%;

td内为空时,容器无法占据理想状态下应占据的位置

浏览器环境:ie6/7

<td></td>

页面上表现是该元素和其它同类相比不正常,因为浏览器处理该问题时不够智能;为td插入一个不可见的空格占位符即可

<td>&nbsp;</td>

position属性使用过多或使用位置不恰当引起滚动时页面错乱

浏览器环境:ie7

position:relative;

网页上最直接表现就是极具破坏性的滚动错位,问题产生来自ie7自身渲染解析出错;这个问题的解决方案没有具体的代码,尽量避免在过多层级中使用该属性,绝对禁止为无需要无作用元素添加该属性,如tr、td等

容器内纯英文文本过长且无空格等符号时不能自动换行

浏览器环境:多浏览器

<p>abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc</p>

属于极端操作行为,问题来自各浏览器本身,添加2个word属性即可

word-break:break-all;word-wrap:break-word;

或者不换行,超出部分显示为更多

overflow:hidden;white-space:nowrap;text-overflow:ellipsis;

这2个办法各有优劣,使用时都需根据网页上具体情况而定

元素有margin上边距值且处于最前或下边距值且处于最后,外部容器高度不能自适应

浏览器环境:多浏览器

margin:20px 0 0;

外容器没有按理想状况自适应撑开,从内间隙变成了外间隙,突出表现在外容器有背景色等特征可被明显观察时;根据情况更换元素或外容器的margin为padding

padding:20px 0 0;

或者根据实际情况给外容器添加浮动属性

老生常谈的清浮动

浏览器环境:多浏览器

问题没什么要描述的直接上解决代码

.clearfix:after{height:0;
display:block;
content:".";
visibility:hidden;
clear:both;
}
.clearfix{zoom:1;}.clear{height:0;overflow:hidden;font-size:0;clear:both;}

如使用清浮动样式的元素处于页面最底部,会给页面底部带来一小段空隙,发生该情况时需及时调整注意避免

悬挂元素工作时表现失常,页面滚动时有明显的停顿抖动

浏览器环境:多浏览器

position:fixed;

原本该吸附在页面上的元素并没有令人满意的工作,原因是网页带给浏览器的性能消耗过大如网页上有动画等;直接办法是添加一个叫做隐藏被旋转元素背面的属性

position:fixed;
-webkit-backface-visibility:hidden;
-moz-backface-visibility:hidden;
backface-visibility:hidden;

图片等元素不能自适应垂直居中

浏览器环境:多浏览器

<p><i><img src="" width="120" height="120" /></i></p>

无需多描述直接上代码,p与img宽高均可任意改动

p{width:800px;
height:800px;
display:table-cell;
text-align:center;
vertical-align:middle;
}
p img{position:static;+position:relative;
top:-50%;left:-50%;vertical-align:middle;}
p i{position:static;+position:absolute;top:50%;}

一个网站尤其是大型门户网站的兼容性调试是一项很浩大的工程,耗时耗力耗青春,并且还不一定讨好,从事过大项目开发中兼容性调试的同行一定有着和他人不一样的体会,个中滋味实在难以明言

很多人以为自己懂兼容性,觉得不过如此,随手可以做出一个全浏览器兼容的网页

但是一个在兼容性问题上沉浸多年并在大型门户级网站开发中支持很久的人在兼容性水平的表现上是完全不一样的,兼容性出色的工程师可以通过部署好自己的代码,从很多源头上避免产生兼容性问题的可能性

现在的国内市场上,能出色完成ie6/7兼容性工作的人越来越少,原因有很多:很多新加入前端开发的同行,直接依托某web前端开发框架,并且在框架本身的兼容性条件下选择回避ie6/7的兼容性工作;而老一辈前端工程师随着个人发展到一定阶段后,有着其它更重要的职能与个人更感兴趣的内容,也不会乐意继续从事该项没有未来的工作;最后一个重中之重的现实问题,长期支持ie6/7对于前端工程师的个人成长来说的确是一个很不利的因素,毕竟它正处于淘汰进行时,市场占有量越来越少并且很多引领互联网行业的媒体也开始接受忽略来自ie6用户的态度

web前端开发浏览器兼容性相关推荐

  1. web前端开发浏览器兼容性 - 持续更新

    浏览器兼容性问题又被称为网页或网站兼容性问题:不同浏览器内核及所支持的html等网页语言标准不同,不同客户端环境(如分辨率不同)造成实际显示效果未能达到预期理想效果 首先我们来看一下目前市面上常见的一 ...

  2. web前端关于浏览器兼容性

    web前端关于浏览器兼容性 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登 ...

  3. web前端面试--浏览器兼容性问题

    web前端面试 本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 文章目录 web前端面试 前言 ...

  4. web前端开发常用浏览器介绍及运行配置

    1.web前端开发常用浏览器介绍 浏览器是用来检索展示以及传递web信息的应用程序,市面上比较常见的浏览器有IE浏览器.火狐浏览器.谷歌浏览器.Safari浏览器和欧朋浏览器等,其中IE.火狐和谷歌是 ...

  5. 小猿圈Web前端开发学习路线

    很多人已经下定决心学习前端开发,但是学习很盲目,没有一个明确的目标,导致学了很长时间效果也没有很明显,最终放弃了,这个结果是我们最不想看到的结果,那么学习路线就十分重要了,好的学习路线对学习会引向成功 ...

  6. 前端传中文文件名_前端工程师需要掌握哪些知识,web前端开发规范总结

    Web前端作为开发团队中不可或缺的一部分,需要按照相关规定进行合理编写(一部分不良习惯可能给自己和他人造成不必要的麻烦).不同公司不同团队具有不同的规范和文档.下面是根据不同企业和团队的要求进行全面详 ...

  7. 开发web前端_移动前端开发和web前端开发的区别?

    如果说非要有区别的话应该就是开发的软件和方式不同,因为他们本来就不属于一端的东西,具体来看看下面: web前端开发 用最简单粗暴的方式来讲,就是用html + css + javascript来构建一 ...

  8. 超级棒的170+款web前端开发工具汇总,千万要收藏好!

    作者:web前端开发 我们与企业内部的Web开发团队进行了很多次交流,研究了很长时间,最后将Debug工具与Web前端开发工具整理汇总在了一起,这些工具对每个Web开发人员都非常有用. 这些工具将使您 ...

  9. 移动web前端开发框架_移动前端开发是Web前端开发吗?

    移动端开发并不是Web前端开发,但移动前端开发和web前端开发其实都属于前端开发的范围,目前前端发展的趋势就是大前端,可以说是包罗万象.但不论趋势如何发展,目前来看HTML.CSS和JavaScrip ...

最新文章

  1. 2017沈阳站流水账+感想
  2. CH 5102 Mobile Service(线性DP)
  3. (2) 第二章 WCF服务与数据契约 服务契约详解(三)- [ServiceContract]特性
  4. ROS学习笔记七:使用rqt_console和roslaunch
  5. Linux系统忘记密码怎么办?
  6. windows操作系统自带的端口TCP转发
  7. 学习webpack系列之二 ---- (管理静态资源)
  8. Oracle form培训资料,Oracle ERP FORM开发学习操作手册
  9. 数据分析实战项目:SQL分析淘宝用户行为
  10. C# 反编译修改dll文件
  11. python 组合优化_python中的多周期投资组合优化
  12. 怎么求中位数和分位数 概率密度函数_数理统计第四讲(次序统计量续,伽马分布)...
  13. vn.py2-行情记录的使用
  14. 《 黑白团团队》第一次作业:团队亮相
  15. ADM pro破解百度云限速 ADM pro设置方法 ES文件管理器
  16. 2019年全球卫星遥感行业现状、融资及卫星遥感行业发展趋势分析:即时化、网络化、个性化、多样化(转载)
  17. 局域网资产发现过程(利用工具nmap、masscan)
  18. umi 加载导航_利用AGV导航激光定位技术解决移动机器人取卸货不成功的问题
  19. 报错:找不到模块“antd-mobile (也可以是其他的模块)”或其相应的类型声明。
  20. 千锋教育+计算机四级网络-计算机网络学习-03

热门文章

  1. 第十四周项目二成绩姓名排名
  2. MSTPVRRP协议
  3. 快消品营销模式变革:一物一码BC一体化营销
  4. bp语音识别matlab,【Matlab学习手记】基于带动量项的BP神经网络语音识别
  5. 使用xlsx.js 40行代码实现excel预览
  6. css2选择器写法大全
  7. 【天光学术】法学论文怎么写?先从选题和你说起!
  8. 敏捷开发是一个坑吗?
  9. oracle delete block,Oracle delete和truncate对高水位(HWM)的影响详细解析
  10. centos 7 systemctl restart network失败处理