前端面试题之解决浏览器兼容性的方案

2023-11-01

浏览器兼容性涉及的内容有很多,特别是针对IE浏览器,以下整理出五种常见的浏览器兼容性解决方法。

一、样式初始化

由于各大浏览器会有自身的默认样式,并且不尽相同,所以为了尽可能的保证样式的统一性,前端在开发项目之前都会先进行样式格式化,最常见的分为以下几个方面。

1.pandding 值和 margin 值均设置为 0

将html、body、a、li、ol、input、textarea、select、button 等标签的 padding 值和 margin 值设置为 0。

2.html 标签

设置统一的字体,如果使用 rem 单位,则 html 需要设置合适的字号。

3.a 标签

设置统一的颜色,将 text-decoration 属性设置为 none。

4.ol 和 li 标签

list-style 统一设置为 none。

5.input、textarea、select、button 等标签初始化

border 设置为 none;

根据需要设置颜色和背景色。

二、使用不同类型的浏览器内核前缀

1.Chrome(谷歌浏览器) 与 Safari(苹果浏览器) 内核:Webkit (中译无) 前缀:-webkit-

2.IE (IE浏览器) 内核:Trident (中译三叉戟) 前缀:-ms-

3.Firefox (火狐浏览器) 内核:Gecko(中译壁虎) 前缀:-moz-

4.Opera (欧朋浏览器) 内核:Presto(中译迅速) 前缀:-o-

例:

-webkit-border-radius: 10px; /*谷歌浏览器*/
-ms-border-radius: 10px;     /*IE浏览器*/
-moz-border-radius: 10px;    /*火狐浏览器*/
-o-border-radius: 10px;      /*欧朋浏览器*/
border-radius: 10px; 

三、针对IE浏览器不同版本的解决方案

1.对于低版本的 IE 浏览器使用 CSS hack( 即给特点前缀)

注:以下符号是写在属性名前面。

兼容 IE6 的 hack 符号:- 或 _

兼容 IE6 、7 的 hack 符号:` ~ ! @ # $ % ^ & * ( ) + = [ ] | < > , . 任意一个符号

兼容 IE6、7、8 的 hack 符号:.

注:以下符号是写在属性值与分号直接,中间不留空格。

兼容 IE8 的 hack 符号:\0/

兼容 IE8、9、10 的 hack 符号:\0

兼容 IE6、7、8、9、10 的 hack 符号:\9

例:

/*hack符号在前*/
_border-radius: 10px;   /*IE6*/
+border-radius: 10px;   /*IE6\7*/
.border-radius: 10px;   /*IE6\7\8*/
 
/*hack符号在后*/
border-radius: 10px\0/;   /*IE8*/
border-radius: 10px\0;   /*IE8\9\10*/
border-radius: 10px\9;   /*IE6\7\8\9\10*/

2.为不同的版本编写独立的样式,其他浏览器识别不到。

例:大于 IE9 的浏览器使用这个单独的 style9.css 样式

<!--[if gte IE 9]> 
 <link rel="stylesheet" href="style9.css">
<![endif]-->

例:只有 IE6 浏览器使用的 style6.css 样式

<!--[if IE 6]>
   <link rel="stylesheet" href="style6.css">
<![endif]-->

四、其他特殊样式

1.cursor 属性的 hand 值和 pointer 值

问题:firefox 浏览器不支持 hand 值,但其他浏览器均支持 pointer 值。
解决: 统一使用 cursor 属性的 pointer 值。

2.水平居中

问题:IE8 及IE8 以下版本浏览器不可通过设置 margin:0 auto 实现水平居中。

解决: 可通过设置父级 text-align:center 实现。

3.属性值 “inherit”

问题:IE8 及IE8 以下版本浏览器不支持属性值 “inherit”。

解决:谨慎使用属性值 “inherit”。

五、JS兼容性

1.ES6语法

问题:IE11 不支持箭头函数、class 语法等(报 SCRIPT1002: 语法错误),不支持 Set 和 Map 数据结构(不报错)及 Promise 对象,支持 let 和 const,IE10 及以下不支持任何 ES6 语法。

解决:如果要兼容IE浏览器的项目请使用 ES5 语法或者使用 Babel 进行转换。

2.操作 tr 标签

问题:IE9 及 IE9 以下版本浏览器,不能操作 tr 标签的 innerHTML 属性。

解决:可以操作 td 标签的 innerHTML 属性。

3.Ajax

问题:IE9 及 IE9 以下版本浏览器无法使用 Ajax 获取接口数据。

解决:在使用 Ajax 请求之前设置 jQuery.support.cors=true。

4.event 对象的 srcElement 属性

问题:IE8 及 IE8 以下版本浏览器 event 对象只有 srcElement 属性,没有 target 属性。

解决:obj = event.target?event.target:event.srcElement。

5.DOM 事件绑定

问题:IE8 及 IE8 以下版本浏览器是用 attachEvent() 方法,而其他浏览器是 addEventListener() 方法。

解决:判断 IE 浏览器版本,如果是 IE8 及以下 事件绑定则使用 attachEvent() 方法,注意 attachEvent() 方法的用法,第一个参数为“onclick” 而不是“click”。并且没有第三个参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端面试题之解决浏览器兼容性的方案 的相关文章

随机推荐

  • Edge浏览器查看请求头(2022)

    目录 如何查看 使用公开的 如何查看 OK如果大家找不到的话可以用下面的这些在网上已经公开的请求头 使用公开的 Mozilla 5 0 Windows NT 10 0 Win64 x64 AppleWebKit 537 36 KHTML l
  • 报错 java.lang.NoClassDefFoundError: Lcom/sun/tools/javac/util/List;

    解决办法 全局搜索javac 找到引用的地方 import com sun tools javac util List 把它删除 重新引用 import java util List 原因 jar包引用错误
  • C++(18)——智能指针unique_ptr

    简介 unique ptr 是 C 11 提供的用于防止内存泄漏的智能指针中的一种实现 独享被管理对象指针所有权的智能指针 unique ptr对象包装一个原始指针 并负责其生命周期 当该对象被销毁时 会在其析构函数中删除关联的原始指针 u
  • spwan-fcgi和fcgi 关系

    spwan fcgi 举个例子 spawn fcgi a 127 0 0 1 p 10000 f login spwan fcgi c main 函数 会执行参数解析过程 获得 ip 端口 和 执行文件的路径 bind socket 函数会
  • Ubuntu22 k8s 1.27.1 安装及集群搭建教学(2023.5.16 k8s 最新版本教学,只看这一篇就够了哦!保姆级教程!不行你来找我!)

    Ubuntu22 k8s 1 27 1 安装及集群搭建教学 2023 5 16 k8s 最新版 只看这一篇就够了哦 保姆级教程 不行你来找我 温馨提示请仔细阅读 1 由于新版的k8s不支持docker了 因此开始前建议新开一台全新的虚拟机
  • Java finally return执行顺序

    Java finally语句到底是在return之前还是之后执行
  • vuex详解一:彻底弄懂state、mapState、mapGetters、mapMutations、mapActions

    一 state 先看一下标准的store目录结构 入vuex 以后 我们需要在state中定义变量 类似于vue中的data 通过state来存放共享的1状态 store actions mutations getters mutation
  • 免费虚拟机软件VirtualBox快速入门

    文章目录 目的 快速入门 下载与安装 新建虚拟机 启动虚拟机 修改分辨率 使用USB设备 常用设置 显示菜单 共享粘贴板和文件拖放 性能调整 网络调整 共享文件夹 快照 导出导入 总结 目的 虚拟机 Virtual Machine 指通过软
  • 睿智的目标检测58——Pytorch Focal loss详解与在YoloV4当中的实现

    睿智的目标检测58 Pytorch Focal loss详解与在YoloV4当中的实现 学习前言 什么是Focal Loss 一 控制正负样本的权重 二 控制容易分类和难分类样本的权重 三 两种权重控制方法合并 实现方式 学习前言 给Yol
  • 热数据、温数据、冷数据

    1 定义 热数据 温数据和冷数据是指根据数据的访问频率和重要性 将数据分为不同的类别 以便更好地管理和存储数据 热数据 Hot Data 指访问频率高 对业务和应用关键的数据 这些数据通常需要快速 高效地访问和处理 因此需要存储在高性能 低
  • java按单个或多个标点符号分割字符串,筛选单词

    一 对于功能需求比价简单的字符串 例如只需要按单个标点分割的字符串 可以使用split 方法来分割 例如 String s1 Hellow World String s1 Hello World String s2 s1 split for
  • Xilinx ISE、iMPACT、PlanAhead在Windows 10 64位系统下闪退的解决办法

    文章目录 现象描述 一 ISE 10 1安装程序崩溃 二 无法加载License 三 ISE 14 7和iMPACT闪退 四 PlanAhead 14 7闪退 问题分析 解决办法 一 ISE 10 1安装程序闪退的解决办法 二 无法加载Li
  • vue-mixins一些常用方法

    前言 今天接手公司的一个vue的项目 发现项目中有个mixins属性 我发现之前的项目中都没有发现过这个属性 查阅了官方文档并进行了总结 官方文档 mixins vue mixins与父子组件还是有很大的区别的 组件与mixins区别 组件
  • mongodb命令

    1 Help查看命令提示 help db help db yourColl help db youColl find help rs help 2 切换 创建数据库 use yourDB 当创建一个集合 table 的时候会自动创建当前数据
  • android webview 显示灰度网页

    要在WebView中显示网页灰度显示 您可以通过以下步骤操作 使用的原理两种方式 一种使用画笔 一种是js css注入 都能够实现黑白色灰度网页 在您的布局文件中添加WebView组件
  • 《重构:改善既有代码的设计》读书笔记(持续更新中)

    背景 我也不知道这个算不算读书笔记 书本知识点整理和个人理解内容可跳至下面正文 最近过年加找工作一直没想起来整理学习内容 时间都很零碎 回想一下 的确一直以来都是为了完成项目去看知识点 除了刚开始想转行做IT的时候跟着慕课网的两条前后端路线
  • ARP协议详解,ARP协议执行原理、ARP协议如何根据IP地址寻找Mac地址?

    作者主页 士别三日wyx 作者简介 CSDN top200 阿里云博客专家 华为云享专家 网络安全领域优质创作者 ARP协议 一 什么是ARP协议 1 Mac地址 2 网络层的数据 3 ARP协议 二 ARP协议执行原理 1 局域网内 2
  • Java设计模式——命令模式

    文章目录 命令模式 命令模式 命令模式很好理解 举个例子 司令员下令让士兵去干件事情 从整个事情的角度来考虑 司令员的作用是 发出口令 口令经过传递 传到了士兵耳朵里 士兵去执行 这个过程好在 三者相互解耦 任何一方都不用去依赖其他人 只需
  • 基于SSM的新能源汽车在线租赁系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用Vue技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave
  • 前端面试题之解决浏览器兼容性的方案

    浏览器兼容性涉及的内容有很多 特别是针对IE浏览器 以下整理出五种常见的浏览器兼容性解决方法 一 样式初始化 由于各大浏览器会有自身的默认样式 并且不尽相同 所以为了尽可能的保证样式的统一性 前端在开发项目之前都会先进行样式格式化 最常见的