Web前端兼容性面试题及详细答案(实战向)_第1页
Web前端兼容性面试题及详细答案(实战向)_第2页
Web前端兼容性面试题及详细答案(实战向)_第3页
Web前端兼容性面试题及详细答案(实战向)_第4页
Web前端兼容性面试题及详细答案(实战向)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web前端兼容性面试题及详细答案(实战向)一、基础浏览器兼容类1、前端常说的浏览器兼容主要指哪些浏览器?核心兼容场景是什么?参考答案:日常项目兼容主要分两类场景:1)PC端:重点兼容IE11、旧版Edge、Chrome、Firefox、360浏览器(极速/兼容模式)、搜狗浏览器;国内项目最大的兼容痛点是IE11和双核浏览器的兼容模式。2)移动端:重点兼容微信内置浏览器、支付宝浏览器、iOSSafari、安卓原生浏览器、各厂商自研浏览器(华为、小米等)。核心兼容问题本质:不同浏览器内核对HTML、CSS、JS、API的解析和支持程度不一样,旧浏览器不支持新特性、默认样式、事件机制、渲染逻辑存在差异。2、常见浏览器内核分别是什么?有什么区别?参考答案:Chrome、新版Edge、360极速、搜狗极速:Blink内核,对新特性支持最好,兼容性最统一Firefox:Gecko内核,标准性强,兼容问题较少IE、360兼容模式、搜狗兼容模式:Trident内核,坑最多,不支持ES6+、新CSS特性、部分DOMAPISafari、iOS所有浏览器:WebKit内核,移动端独有坑最多,比如手势、滚动、样式兼容问题实战中90%的兼容bug,都出在Trident和WebKit旧内核上。二、CSS兼容性高频面试题1、CSS常见兼容问题有哪些?如何解决?参考答案:整理项目中最常遇到的6个核心问题及落地解决方案:1)默认样式不统一(不同浏览器内外边距、列表样式、按钮样式不同)解决:项目初始化引入reset.css或normalize.css;reset清零默认样式,normalize统一标准样式,企业项目更常用normalize。2)盒模型解析差异问题:IE怪异模式下盒模型为border-box,标准浏览器默认content-box,导致宽高计算不一致。解决:全局统一设置box-sizing:border-box,彻底统一所有浏览器盒模型计算规则。3)CSS3新属性不生效(圆角、阴影、过渡、动画)问题:旧版浏览器需要私有前缀才能识别。解决:添加浏览器私有前缀(-webkit-、-moz-、-ms-),项目中直接用autoprefixer自动处理,无需手动写。4)IE11不支持flex部分属性问题:IE11flex布局换行、居中、自适应尺寸存在bug,flex:1解析异常。解决:避免简写flex:1,拆分写flex-grow:1;flex-shrink:1;flex-basis:0%;固定布局结构,不使用复杂嵌套flex。5)移动端1px边框变粗问题问题:高清屏dpr为2/3,默认1px边框会被渲染成2px/3px。解决:通过伪元素+transform缩放实现细边框,是移动端通用方案。6)Safari样式兼容坑问题:Safari不支持部分渐变、固定定位异常、滚动回弹导致布局错乱。解决:单独写Safari兼容样式,开启滚动惯性优化,避免fixed嵌套使用。2、讲讲CSS私有前缀及autoprefixer的工作原理参考答案:私有前缀是浏览器厂商为了兼容试验性CSS新特性推出的前缀:-webkit-:Chrome、Safari、移动端浏览器-moz-:Firefox-ms-:IE、旧版Edge-o-:旧版Operaautoprefixer是基于PostCSS的工具,配合browserslist配置,能根据项目需要兼容的浏览器版本,自动添加、删除、更新私有前缀,还能兼容旧版本语法,开发时只需写标准CSS,无需手动兼容。3、IE常见CSS兼容坑有哪些?参考答案:IE11不支持CSS3变量、grid布局、部分选择器IE11图片留白问题:img设置vertical-align:middle解决IE11透明度兼容:除了opacity,需要兼容filter:alpha(opacity=50)IE10-11浮动布局错位、清除浮动失效,需精准使用clear或BFC清除浮动三、JavaScript兼容性高频面试题1、JS主要的兼容问题集中在哪些方面?参考答案:JS兼容问题核心集中在旧浏览器不支持新语法、新API、事件机制差异,主要分为4类:1)ES6+语法不兼容:IE完全不支持let/const、箭头函数、解构、模板字符串、Promise等,直接报错。2)WebAPI不兼容:fetch、FormData新方法、数组新方法(includes、find、forEach部分兼容)、localStorage异常、滚动API、触摸API。3)事件兼容:事件绑定、事件对象、阻止冒泡、阻止默认行为、鼠标/触摸事件差异。4)BOM/DOM兼容:窗口尺寸获取、滚动距离获取、元素获取方法差异。2、ES6+语法如何兼容低版本浏览器?Babel+Polyfill原理是什么?参考答案:很多面试者会混淆Babel和Polyfill,实际二者分工完全不同:1)Babel的作用:只转译语法,把ES6+语法转为ES5语法,比如箭头函数、let、解构、类,转译后低版本浏览器可识别。但无法转译新API,比如Promise、Array.includes、Object.assign。2)Polyfill的作用:做API补丁,给低版本浏览器补上缺失的全局方法和对象,让浏览器拥有新API能力。项目实战方案:使用@babel/preset-env+core-js@3,根据目标浏览器版本,按需注入polyfill,避免全量引入导致代码冗余。3、事件绑定、事件对象的浏览器兼容写法参考答案:1)事件绑定兼容标准浏览器:addEventListenerIE低版本:attachEvent封装兼容写法:判断浏览器是否存在addEventListener,不存在则使用attachEvent。2)事件对象兼容标准:事件对象通过形参获取IE:window.event通用获取:vare=event||window.event3)阻止冒泡兼容标准:e.stopPropagation()IE:e.cancelBubble=true4)阻止默认行为兼容标准:e.preventDefault()IE:e.returnValue=false4、数组方法的兼容问题怎么处理?参考答案:IE11不支持Atotype.includes、find、findIndex、forEach部分场景、flat等方法。解决方案:1)工程化项目:配置core-js自动polyfill,无需手动处理;2)原生无构建工具项目:手动封装兼容方法,或引入es5-shim补丁;3)开发尽量少用超高阶新数组方法,优先用兼容性更好的循环、filter。四、移动端专属兼容性问题1、移动端常见兼容bug及解决方案参考答案:1)移动端点击300ms延迟原因:早期移动端双击缩放机制,浏览器等待300ms判断是否双击。解决:①设置meta视口标签user-scalable=no;②引入fastclick库(旧项目);③现代浏览器已基本修复。2)iOS滚动卡顿、回弹问题解决:给滚动容器添加-webkit-overflow-scrolling:touch,开启硬件加速滚动。3)微信浏览器兼容问题常见:图片不显示、字体错乱、底部安全区域留白、弹窗滚动穿透。解决:适配微信安全区域,弹窗打开时禁止底层滚动,单独兼容微信内置浏览器样式。4)移动端点击高亮解决:-webkit-tap-highlight-color:transparent清除点击高亮背景。2、滚动穿透问题如何解决?参考答案:场景:移动端弹窗弹出后,滑动弹窗区域,底层页面会跟着滚动,就是滚动穿透。兼容最优方案:1)弹窗打开时,记录当前页面滚动位置,给body设置固定定位、overflow:hidden;2)弹窗关闭时,恢复body样式,还原滚动位置;该方案兼容所有移动端浏览器,无副作用。五、工程化与实战兼容方案1、项目中一套完整的前端兼容优化流程是什么?参考答案:我实际项目中的落地流程,面试直接说即可:1)确定兼容范围:根据产品需求,明确是否需要兼容IE11、低版本移动端;2)配置browserslist:在package.json配置兼容浏览器版本,供autoprefixer、babel统一使用;3)CSS兼容:引入normalize.css,开启autoprefixer自动加前缀,规避IE、移动端样式bug;4)JS兼容:配置babel+core-js,按需polyfillES6+语法和API;5)针对性hack:对IE、Safari、微信浏览器独有问题,写专属兼容样式和逻辑;6)真机测试:优先在目标兼容浏览器、真机测试,避免开发环境正常、线上出bug。2、什么是浏览器Hack?日常怎么使用?参考答案:Hack就是针对特定浏览器写的专属兼容代码,用来修复独有bug。我日常不会滥用Hack,因为冗余且难维护,只有无法统一兼容时才使用:1)IE专属hack:通过条件注释、属性前缀区分IE版本;2)WebKit专属hack:通过-webkit前缀、媒体查询区分;原则:能用通用方案解决,绝不写hack,保证代码可维护性。六、面试压轴题(高频反问)1、你项目中遇到最棘手的前端兼容问题是什么?怎么解决的?参考答案(实战口述版):之前做后台管理系统项目,需要兼容IE11,遇到两个核心问题:第一,IE11不支持Promise和ES6语法,页面直接白屏报错。最初只配置了Babel转译语法,忽略了API兼容,后面引入core-js做按需polyfill,补齐缺失的浏览器API,解决了报错问题。第二,IE11下flex布局嵌套错乱、元素自适应错位。排查后发现是IE11对flex简写属性解析异常,我把flex简写全部拆分成独立属性,同时调整布局嵌套结构,统一盒模型,彻底解决了布局错乱问题。同时我优化了项目兼容配置,统一browserslist规则,让后续所有开发自动适配IE11,从工程层面规避兼容问题,减

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论