所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果。所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题。

在学习浏览器兼容性之前,我想把前端开发人员划分为两类:

第一类:

是精确按照设计图开发的前端开发人员,可以说是精确到1px的,他们很容易就会发现设计图的不足,并且在很少的情况下会碰到浏览器的兼容性问题,而这些问题往往都死浏览器的bug,并且他们制作的页面后期易维护,代码重用问题少,可以说是比较牢固放心的代码。

第二类:

是基本按照设计图来开发的前端开发人员,很多细枝末节差距很大,不如间距,行高,图片位置等等经常会差几px。某种效果的实现也是反复调试得到,具体为什么出现这种效果还模模糊糊,整体布局十分脆弱。稍有改动就乱七八糟。代码为什么这么写还不知所以然。这类开发人员往往经常为兼容性问题所困。修改好了这个浏览器又乱了另一个浏览器。改来改去也毫无头绪。其实他们碰到的兼容性问题大部分不应该归咎于浏览器,而是他们的技术本身了。

文章主要针对的是第一类,严谨型的开发人员,因此这里主要从浏览器解析差异的角度来分析兼容性问题。

方法/步骤✨


1️⃣ 浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
| 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和 padding差异较大。

| 碰到频率:100%

| 解决方案:CSS里 *{margin:0;padding:0;}

| 备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符来设置各个标签的内外补丁是0。

2️⃣ 浏览器兼容问题二:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大
| 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。

| 碰到频率:100%

| 解决方案:CSS里 *{margin:0;padding:0;}

| 备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设置各个标签的内外补丁是0。

3️⃣ 浏览器兼容问题三:设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度
| 问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度

| 碰到频率:60%

| 解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。

| 备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。

4️⃣ 浏览器兼容问题四:行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,IE6间距bug
| 问题症状:IE6里的间距比超过设置的间距

| 碰到几率:20%

| 解决方案:在display:block;后面加入display:inline;display:table;

| 备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在IE6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。
5️⃣ 浏览器兼容问题五:图片默认有间距
| 问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。

| 碰到几率:20%

| 解决方案:使用float属性为img布局

| 备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(我的一个学生使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法,所以我禁止他们使用)
6️⃣ 浏览器兼容问题六:标签最低高度设置min-height不兼容
| 问题症状:因为min-height本身就是一个不兼容的CSS属性,所以设置min-height时不能很好的被各个浏览器兼容

| 碰到几率:5%

| 解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为:{min-height:200px; height:auto !important; height:200px; overflow:visible;}

| 备注:在B/S系统前端开时,有很多情况下我们又这种需求。当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。
7️⃣ 浏览器兼容问题七:透明度的兼容CSS设置
做兼容页面的方法是:每写一小段代码(布局中的一行或者一块)我们都要在不同的浏览器中看是否兼容,当然熟练到一定的程度就没这么麻烦了。建议经常会碰到兼容性问题的新手使用。很多兼容性问题都是因为浏览器对标签的默认属性解析不同造成的,只要我们稍加设置都能轻松地解决这些兼容问题。如果我们熟悉标签的默认属性的话,就能很好的理解为什么会出现兼容问题以及怎么去解决这些兼容问题。

/* CSS hack*/

我很少使用hacker的,可能是个人习惯吧,我不喜欢写的代码IE不兼容,然后用hack来解决。不过hacker还是非常好用的。使用hacker我可以把浏览器分为3类:IE6 ;IE7和遨游;其他(IE8 chrome ff safari opera等)

◆IE6认识的hacker 是下划线_ 和星号 *

◆IE7 遨游认识的hacker是星号 *

比如这样一个CSS设置:

height:300px;*height:200px;_height:100px;

IE6浏览器在读到height:300px的时候会认为高时300px;继续往下读,他也认识heihgt, 所以当IE6读到height:200px的时候会覆盖掉前一条的相冲突设置,认为高度是200px。继续往下读,IE6还认识_height,所以他又会覆盖掉200px高的设置,把高度设置为100px;

IE7和遨游也是一样的从高度300px的设置往下读。当它们读到*height200px的时候就停下了,因为它们不认识_height。所以它们会把高度解析为200px,剩下的浏览器只认识第一个height:300px;所以他们会把高度解析为300px。因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。

浏览器兼容性版本问题与解决方案相关推荐

  1. 浏览器兼容性问题汇总及解决方案

    最近一直在调测系统在各个浏览器的兼容性问题,真是让人抓狂啊,我最爱的Firefox竟然还是出问题最多的,好伤心--把碰到的问题和查到的一些资料总结一下写在这里,一方面方便自己以后使用,另一方面希望对遇 ...

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

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

  3. html 引入js 兼容,JS跨浏览器兼容性解决思路及方案汇总,常见JS兼容性知识点汇总...

    上篇文章我们介绍了,处理CSS浏览器兼容性的4个解决方案:浏览器CSS样式初始化.浏览器私有属性,CSS hack语法和自动化插件,有兴趣的可以看看,链接放到本文结尾 本文主要介绍JS的跨浏览器兼容性 ...

  4. 浏览器兼容性问题解决方案· 总结

    浏览器兼容性问题解决方案 · 总结 javascript/jquery 浏览数:536 2017-9-2 普及:浏览器的兼容性问题,往往是个别浏览器(没错,就是那个与众不同的浏览器)对于一些标准的定义 ...

  5. 最全整理浏览器兼容性问题与解决方案(转)

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

  6. pc端不同浏览器兼容性问题及解决方案

    代码兼容:IE7及以上,360浏览器,搜狗浏览器,谷歌,火狐,欧朋等等. 一.需要注意的地方: 1.写好标准头: 2.首先引入初始化css,保证消除不同浏览器的细微差别. 具体内容: *{margin ...

  7. 前端开发中常见的浏览器兼容性问题及解决方案

    文章目录 前言 一.浏览器四大内核 二.主流兼容问题 (一)浏览器引擎 (二)兼容问题的原因 (三) 为什么浏览器会存在兼容性问题? (四)处理兼容问题的思路 1. 要不要做? 2. 做到什么程度? ...

  8. 1.最全整理浏览器兼容性问题与解决方案

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

  9. 关于Vite项目打包后浏览器兼容性问题的解决方案

    一.问题描述 vite+vue3项目开发完以后,你会发现打包后的项目运行在新版浏览器可以正常显示,但运行在一些版本比较老的浏览器如 Chrome < 23.Firefox < 21和IE等 ...

最新文章

  1. php mysql环境搭配_centos6.7下搭配apache php mysql环境
  2. 技术人员必须了解的产品设计基本概念
  3. 开发日记-20190915 关键词 汇编语言王爽版 第十章
  4. 使用 Castal DynamicProxy 简化 Silverlight 数据绑定
  5. javascript foreach中获取数组下标/index
  6. SQL语句大全(2)
  7. Android之Android studio Gradle sync failed: Unknown host ‘services.gradle.org
  8. oracle 查看锁表情况及数据库连接情况
  9. fastjson使用-- @JSONField使用(转)
  10. kafka 并发数配置过程中踩到的坑 InstanceAlreadyExistsException Error registering AppInfo mbean
  11. 统计学基础知识有哪些?看这一篇就够了
  12. 链桨PaddleDTX系列 - xdb源码分析(一)
  13. 搜扣扣三大频道闹元宵 优惠券、聚划算、九块邮正式上线
  14. DevExpress WinForms Controls v22.1 beta版来袭,上车
  15. 谷歌账号被封怎么办?谷歌账号解封申诉步骤请收好!
  16. 阿福卡专属流量包 开通 取消 方法
  17. CUDA编程:矩阵乘运算从CPU到GPU
  18. 小i机器人2019数博会C位秀肌肉 “认知智能”引领行业创新变革
  19. IEEE 802.11 RTS/CTS 协议
  20. MiniConda使用

热门文章

  1. WCF 关闭默认调试客户端
  2. 最强易用性?趣链科技智能合约引擎是怎样炼成的
  3. luogu_P1618
  4. Android官方文档training中英文翻译目录大全:29篇已翻译,45篇未翻译
  5. 国内舆情监测系统,国内舆情监测通过什么技术实现
  6. FIREBIRD使用经验总结
  7. 特斯拉旧版全自动驾驶Beta软件遭泄露,新版本迟迟未发引众怒
  8. 【转】程序设计语言中的 一等公民,二等公民,三等公民
  9. ges resource dynamic和ges enqueues占用较高导致实例终止问题处理
  10. matlab离散与连续系统仿真