当前位置: 首页 > news >正文

前端浏览器开发中的浏览器兼容问题【持续更新】

目录

一、什么是浏览器兼容问题

二、JavaScript兼容问题及解决方案

2.1addEventListener与attachEvent的区别

2.2集合类对象问题

 2.3自定义属性问题

 2.4event.x与event.y问题

2.5window.location.href问题

 2.6事件委托方法

 三、CSS兼容问题及解决方案

3.1浏览器CSS样式初始化

3.2浏览器私有属性

3.3使用Autoprefixer工具

一、什么是浏览器兼容问题

浏览器兼容问题指:“不同浏览器(IE、Chrome、FireFox、Safari、Edge)对同一种CSS样式或同一段JS代码的解析渲染会有所不同”,从而用户在不同浏览器环境下的访问呈现的页面效果不一致。

浏览器兼容问题分为:“CSS兼容问题”、“JavaScript兼容问题

造成浏览器兼容问题的根本原因是:“不同浏览器使用的内核不同”,不过随着时代的发展Webkit内核逐渐统一市场,浏览器兼容问题也越来越少。

常见浏览器内核:

浏览器内核

IE

Trident
ChromeBlink
FirefoxGecko
SafariWebkit
EdgeBlink

Blink内核是Webkit内核的一个分支,属于同一个源代码开发

而在手机浏览器中,几乎全是Webkit内核开发

二、JavaScript兼容问题及解决方案

2.1addEventListener与attachEvent的区别

attachEvent—————————兼容IE7、IE9

addEventListener———————兼容Firefox、chrome、IE、safari,不兼容IE7、IE8

 解决方法:

function addEvent(el,eventName,callback){
    if (elment.addEventListener){
        //现代浏览器使用addEventListener
        el.addEventListener(eventName,callback,false);
    }
    else if (el.attachEvent){
        //旧浏览器使用attachEvent
        el.attachEvent('on' + eventName,callback);
    } 
    else{
        //最后使用内联事件属性
        element['on' + eventName] = callback;
    }
}

//使用示例
const button = document.getElementById('myButton');
addEvent(button,'click',funcion(){
    console.log('按钮被点击了');
})

2.2集合类对象问题

IE下,可以使用()[]获取集合类对象

FireFox下,只能使用[]获取集合对象

解决方法:

 统一使用[]获取集合类对象

 2.3自定义属性问题

IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用gettAttribute()获取自定义属性

firefox下,只能使用getAttribute()获取自定义属性

 解决方法:

统一使用getAttribute()获取属性

 2.4event.x与event.y问题

IE下,event对象xy属性,没有pageXpageY属性

Firefox下,event对象pageXpageY属性,没有xy属性

 解决方法:

var myDirectionX = event.x ? event.x : event.pageX;
var myDirectionY = event.y ? event.y : event.pageY;

2.5window.location.href问题

IE可以使用window.locationwindow.location.href

Firefox1.5下,只能使用window.location

 解决方法:

统一使用window.location

 2.6事件委托方法

function f(){...}

在IE下,使用document.body.onload = f;

在Firefox下,使用document.body.onload = f();

 解决方法:

统一使用document.body.onload = function() {}

 三、CSS兼容问题及解决方案

3.1浏览器CSS样式初始化

* {
    margin:0;
    padding:0;
    /* 根据需要添加 */
    box-size:border-box;
}

3.2浏览器私有属性

  1. -moz表示firefox浏览器私有属性
  2. -ms表示IE浏览器私有属性
  3. -webkit-表示chrome、safari、edge私有属性
  4. -o表示opera私有属性

对于私有属性的顺序,要把标准写法放到最后,兼容性写法放到前面

-webkit-transform:rotate(-3deg); /*为Chrome/Safari*/
 -moz-transform:rotate(-3deg); /*为Firefox*/
 -ms-transform:rotate(-3deg); /*为IE*/
 -o-transform:rotate(-3deg); /*为Opera*/
 transform:rotate(-3deg);

3.3使用Autoprefixer工具

使用该工具可以根据原CSS文件一键生成新CSS文件,新CSS文件会在原CSS文件属性基础上自动添加浏览器前缀。

具体可参考:

进阶插件和技巧:使用Autoprefixer自动管理浏览器前缀-CSDN博客

相关文章:

  • 计算机毕业设计 ——jspssm502Springboot 餐厅点餐系统
  • C语言数据结构—堆的应用及Topk问题
  • Dify部署
  • 第一章:项目简介
  • 非结构化数据管理平台如何解决企业数据孤岛问题?
  • 物联网综合实训室建设方案的探讨(职业院校物联网综合实训室建设方案)
  • 朝天椒 USB 服务器解决投标CA盾异地连接
  • django框架使用
  • 希尔排序:突破插入排序的局限
  • 嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)
  • 【nginx】nginx.conf配置详解
  • 编写第一个 C++ 程序 – Hello World 示例
  • 【YOLOv8】YOLOv8改进系列(3)----替换主干网络之ConvNeXt V2
  • Nginx的安装和部署以及Nginx的反向代理与负载均衡
  • 芯旺微KF32A156芯片CANFD过滤配置
  • 【数据结构】顺序表和链表
  • PHP Zip 文件处理指南
  • 计算机毕设-基于springboot的人工智能领域复合型人才校企协同培养管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • xcLeigh 博主:全栈领域优质创作者,博客专家
  • LabVIEW 中 codeGenEngine.llb 工具库
  • 全国省市县国土空间总体规划已基本批复完成,进入全面实施阶段
  • 国家卫生健康委通报关于肖某引发舆情事件调查处置进展情况
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 欠债七十万后,一个乡镇驿站站长的中年心事
  • 基金经理调仓引发大金融板块拉升?公募新规落地究竟利好哪些板块
  • 呼吸医学专家杜晓华博士逝世,终年50岁