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

news/2025/2/27 3:33:30

目录

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

二、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博客


http://www.niftyadmin.cn/n/5869418.html

相关文章

leetcode704------二分法查找有序数组中特定的值

目录 一、二分法的基本概念 二、二分法的基本步骤 三、迭代二分法查找有序数组中的特定值题目 3.1 题目介绍 3.2 求解思路 3.2.1 情况一:左闭右闭[left, right] 3.2.2 情况二:左闭右开[left, right) 四、二分法的时间复杂度与空间复杂度 4.1 …

【STM32】玩转IIC之驱动MPU6050及姿态解算

目录 前言 一.MPU6050模块介绍 1.1MPU6050简介 1.2 MPU6050的引脚定义 1.3MPU6050寄存器解析 二.MPU6050驱动开发 2.1 配置寄存器 2.2对MPU6050寄存器进行读写 2.2.1 写入寄存器 2.2.2读取寄存器 2.3 初始化MPU6050 2.3.1 设置工作模式 2.3.2 配置采样率 2.3.3 启…

MySQL | MySQL库、表的基本操作

MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…

【Golang】go语言异常处理快速学习

Go 语言的异常处理与很多传统的编程语言不同,它没有 try/catch 这样的异常捕获机制,而是通过 错误类型(error)来进行错误处理。Go 语言鼓励显式地处理错误,保持代码的简单性和可维护性。在 Go 中,错误处理不…

Ollama部署本地大模型DeepSeek-R1-Distill-Llama-70B

文章目录 一、下模二、转模1. 下载转换工具2. 安装环境依赖3. llama.cpp1. 转换脚本依赖2. llama.cpp安装依赖包3. llama.cpp编译安装4. 格式转换 三、Ollama部署1. 安装启动Ollama2. 添加模型3. 测试运行 一、下模 #模型下载 from modelscope import snapshot_download model…

Rust 驱动的 Python 工具革命:Ruff 和 uv 与传统工具的对比分

Rust 驱动的 Python 工具革命:Ruff 和 uv 与传统工具的对比分析 概述: Python 生态系统长期以来依赖于一系列经典工具,如 Flake8、Black、pip 和 virtualenv,这些工具在代码检查、格式化和依赖管理方面发挥了重要作用。然而&…

【鸿蒙开发】第三十九章 LazyForEach:数据懒加载

目录 1 背景 2 使用限制 键值生成规则 组件创建规则 首次渲染 非首次渲染 改变数据子属性 使用状态管理V2 拖拽排序 1 背景 LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架…

通过Python编程语言实现“机器学习”小项目教程案例

以下为你提供一个使用Python实现简单机器学习项目的教程案例,此案例将使用鸢尾花数据集进行分类任务,运用经典的支持向量机(SVM)算法。 步骤 1:环境准备 首先,你要确保已经安装了必要的Python库&#xff…