前端面试题——html5

1.html5的新特性 文件类型声明()仅有一型:。 新的解析顺序:不再基于 SGML。 绘画canvas; 用于媒介回放的 video和 audio元素; 语意化更好的内容元素:article、footer、header、nav、section; 表单控件:calendar、date、time、email、url、search; input元素的新类型:date, email, url等。 新的技术: webworker, websocket, Geolocation; 新的属性:ping(用于 a 与 area),charset(用于 meta), async(用于 script)。 全域属性:id,tabindex, repeat。 新的全域属性:contenteditable, contextmenu, draggable, dropzone, hidden, spellcheck。 新应用程序接口: HTML Geolocation、 HTML Drag and Drop、 HTML Local Storage 、HTML Application Cache、 HTML Web Workers、 HTML SSE 、HTML Canvas/WebGL、 HTML Audio/Video 移除的元素: 纯表现的元素:basefont,big,center,font, s,strike,tt,u; 对可用性产生负面影响的元素:frame,frameset,naframes; 2.什么是 Retina 显示屏,带来了什么问题? retina:一种具备超高像素密度的液晶屏,同样大小的屏幕上显示的像素点由 1 个变 为多个,如在同样带下的屏幕上,苹果设备的 retina 显示屏中,像素点 1 个变为 4 个 在高清显示屏中的位图被放大,图片会变得模糊,因此移动端的视觉稿通常会设计为 传统 PC 的 2 倍 那么,前端的应对方案是: 设计稿切出来的图片长宽保证为偶数,并使用 backgroud-size 把图片缩小为原来的 1/2 例如:图片宽高为:200px*200px, 那么写法如下 .css{width:100px;height:100px;background-size:100px 100px;} 其它元素的取值为原来的 1/2, 例如:视觉稿 40px 的字体, 使用样式的写法为 20px.css{font-size:20px} 3.ios 系统中元素被触摸时产生的半透明灰色遮罩怎么去掉? ios 用户点击一个链接,会出现一个半透明灰色遮罩, 如果想要禁用,可设置 -webkit- tap-highlight-color的 alpha 值为 0,也就是属性值的最后一位设置为 0 就可以去除半透明灰色遮罩 a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)} 4.部分 android 系统中元素被点击时产生的边框怎么去掉? android 用户点击一个链接,会出现一个边框或者半透明灰色遮罩, 不同生产商定义出 来额效果不一样,可设置-webkit-tap-highlight-color的alpha 值为 0 去除部分机器自带的效果 a,button,input,textarea{ -webkit-tap-highlight-color: rgba(0,0,0,0;) -webkit-user-modify:read-write-plaintext-only; } -webkit-user-modify 有个副作用,就是输入法不再能够输入多个字符 另外,有些机型去除不了,如小米 2 对于按钮类还有个办法,不使用 a 或者input 标签,直接用 div 标签。 5.webkit 表单元素的默认外观怎么重置 通用 .css{-webkit-appearance:none;} 伪元素改变 number 类型 input 框的默认样式 input[type=number]::-webkit-textfield-decoration-container { background-color: transparent; } input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; } input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; } 6.webkit 表单输入框 placeholder 的颜色值能改变么 input::-webkit-input-placeholder{color:#AAAAAA;} input:focus::-webkit-input-placeholder{color:#EEEEEE;} 7.禁止 ios 长按时不触发系统的菜单,禁止 ios&android 长按时下载图片 .css{-webkit-touch-callout: none} 8.禁止 ios 和 android 用户选中文字 .css{-webkit-user-select:none} 9.打电话发短信写邮件怎么实现 打电话: 打电话给:0755-10086 发短信,winphone 系统无效 发短信给: 10086 写邮件: peun@foxmail.com 10.audio 元素和 video 元素在 ios 和 andriod 中无法自动播放 应对方案:触屏即播 $('html').one('touchstart',function(){ audio.play() }) 11.闪屏怎么解决 通过 transform 的 3d 属性改去硬件加速可以解决闪屏问题 开启硬件加速 1,解决页面闪白 2,保证动画流畅 .css { -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); } 12.取消 input 在 ios 下,输入的时候英文首字母的默认大写 13.android 上去掉语音输入按钮 input::-webkit-input-speech-button {display: none} 14.设计高性能 CSS3 动画的几个要素 尽可能地使用合成属性 transform 和 opacity 来设计 CSS3 动画 不使用 position 的 left 和 top 来定位 利用 translate3D 开启 GPU 加速 15.fixed bug ios下 fixed元素容易定位出错,软键盘弹出时,影响 fixed元素定位 android下 fixed 表现要比 iOS 更好,软键盘弹出时,不会影响 fixed 元素定位 ios4 下不支持 position:fixed 解决方案 可用 isroll.js,暂无完美方案 16.移动 H5 前端性能优化指南 PC 优化手段在 Mobile 侧同样适用 在 Mobile 侧我们提出三秒种渲染完成首屏指标 基于第二点,首屏加载 3 秒完成或使用 Loading 基于联通 3G 网络平均 338KB/s(2.71Mb/s),所以首屏资源不应超过 1014KB Mobile 侧因手机配置原因,除加载外渲染速度也是优化重点 基于第五点,要合理处理代码减少渲染损耗 基于第二、第五点,所有影响首屏加载和渲染的代码应在处理逻辑中后置 加载完成后用户交互使用时也需注意性能 优化指南 [加载优化] 加载过程是最为耗时的过程,可能会占到总耗时的 80%时间,因此是优化的 重点 · 减少 HTTP 请求 因为手机浏览器同时响应请求为 4 个请求(Android 支持 4 个,iOS 5 后可 支持 6 个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过 4 个 a) 合并 CSS、JavaScript b) 合并小图片,使用雪碧图 · 缓存 使用缓存可以减少向服务器的请求数,节省加载时间,所以所有静态资源都要 在服务器端设置缓存,并且尽量使用长 Cache(长 Cache 资源的更新可使用时间戳) a) 缓存一切可缓存的资源 b) 使用长 Cache(使用时间戳更新 Cache c) 使用外联式引用 CSS、JavaScript · 压缩 HTML、CSS、JavaScript 减少资源大小可以加快网页显示速度,所以要对 HTML、CSS、JavaScript 等 进行代码压缩,并在服务器端设置 GZip a) 压缩(例如,多余的空格、换行符和缩进) b) 启用 GZip · 无阻塞 写在 HTML 头部的 JavaScript(无异步),和写在 HTML 标签中的 Style 会 阻塞页面的渲染,因此 CSS 放在页面头部并使用 Link 方式引入,避免在 HTML 标签 中写 Style,JavaScript 放在页面尾部或使用异步方式加载 · 使用首屏加载 首屏的快速显示,可以大大提升用户对页面速度的感知,因此应尽量针对首屏 的快速显示做优化 · 按需加载 将不影响首屏的资源和当前屏幕资源不用的资源放到用户需要时才加载,可以 大大提升重要资源的显示速度和降低总体流量 PS:按需加载会导致大量重绘,影响渲染性能 a) LazyLoad b) 滚屏加载 c) 通过 Media Query 加载 · 预加载 大型重资源页面(如游戏)可使用增加 Loading 的方法,资源加载完成后再 显示页面。但 Loading 时间过长,会造成用户流失 对用户行为分析,可以在当前页加载下一页资源,提升速度 a) 可感知 Loading(如进入空间游戏的 Loading) b) 不可感知的 Loading(如提前加载下一页) · 压缩图片 图片是最占流量的资源,因此尽量避免使用他,使用时选择最合适的格式(实 现需求的前提下,以大小判断),合适的大小,然后使用智图压缩,同时在代码中用 Srcset 来按需显示 PS:过度压缩图片大小影响图片显示效果 a) 使用智图( http://zhitu.isux.us/ ) b) 使用其它方式代替图片(1. 使用 CSS3 2. 使用 SVG 3. 使用 IconFont) c) 使用 Srcset d) 选择合适的图片(1. webP 优于 JPG 2. PNG8 优于 GIF) e) 选择合适的大小(1. 首次加载不大于 1014KB 2. 不宽于 640(基于手机屏 幕一般宽度)) · 减少 Cookie Cookie会影响加载速度,所以静态资源域名不使用 Cookie · 避免重定向 重定向会影响加载速度,所以在服务器正确设置避免重定向 · 异步加载第三方资源 第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源 [脚本执行优化] 脚本处理不当会阻塞页面加载、渲染,因此在使用时需当注意 · CSS 写在头部,JavaScript 写在尾部或异步 · 避免图片和 iFrame 等的空 Src 空 Src 会重新加载当前页面,影响速度和效率 · 尽量避免重设图片大小 重设图片大小是指在页面、CSS、JavaScript 等中多次重置图片大小,多次重 设图片大小会引发图片的多次重绘,影响性能 · 图片尽量避免使用 DataURL DataURL 图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染, 加载慢耗时长 [CSS 优化] · 尽量避免写在 HTML 标签中写 Style 属性 · 避免 CSS 表达式 CSS 表达式的执行需跳出 CSS 树的渲染,因此请避免 CSS 表达式 · 移除空的 CSS 规则 空的 CSS 规则增加了 CSS 文件的大小,且影响 CSS 树的执行,所以 需移除空的 CSS 规则 · 正确使用 Display 的属性 Display 属性会影响页面的渲染,因此请合理使用 a) display:inline 后不应该再使用 width、height、margin、 padding 以及 float b) display:inline-block 后不应该再使用 float c) display:block 后不应该再使用 vertical-align d) display:table-*后不应该再使用 margin 或者 float · 不滥用 Float Float 在渲染时计算量比较大,尽量减少使用 · 不滥用 Web 字体 Web 字体需要下载,解析,重绘当前页面,尽量减少使用 · 不声明过多的 Font-size 过多的 Font-size 引发 CSS 树的效率 · 值为 0 时不需要任何单位 为了浏览器的兼容性和性能,值为 0 时不要带单位 · 标准化各种浏览器前缀 a) 无前缀应放在最后 b) CSS 动画只用 (-webkit- 无前缀)两种即可 c) 其它前缀为 -webkit- -moz- -ms- 无前缀 四种,(-o-Opera 浏 览器改用 blink 内核,所以淘汰) · 避免让选择符看起来像正则表达式 高级选择器执行耗时长且不易读懂,避免 使用 [JavaScript 执行优化] · 减少重绘和回流 a) 避免不必要的 Dom 操作 b) 尽量改变 Class 而不是 Style,使用 classList 代替 className c) 避免使用 document.write d) 减少 drawImage · 缓存 Dom 选择与计算 每次 Dom 选择都要计算,缓存他 · 缓存列表.length 每次.length 都要计算,用一个变量保存这个值 · 尽量使用事件代理,避免批量绑定事件 · 尽量使用 ID 选择器 ID 选择器是最快的 · TOUCH 事件优化 使用 touchstart、touchend 代替 click,因快影响速度快。但应注意 Touch 响应过快,易引发误操作 **[渲染优化] · HTML 使用 Viewport Viewport 可以加速页面的渲染,请使用以下代码 · 减少 Dom 节点 Dom 节点太多影响页面的渲染,应尽量减少 Dom 节点 · 动画优化 a) 尽量使用 CSS3 动画 b) 合理使用 requestAnimationFrame 动画代替 setTimeout c) 适当使用 Canvas 动画 5 个元素以内使用 css 动画,5 个以上使用 Canvas 动画(iOS8 可使用 webGL) · 高频事件优化 Touchmove、Scroll 事件可导致多次渲染 a) 使用 requestAnimationFrame 监听帧变化,使得在正确的时间进 行渲染 b) 增加响应变化的时间间隔,减少重绘次数 · GPU 加速 CSS 中以下属性(CSS3 transitions、CSS3 3D transforms、 Opacity、Canvas、WebGL、Video)来触发 GPU 渲染,请合理使用(PS:过渡使 用会引发手机过耗电增加) 17.CSS 动画与 Canvas 动画性能优劣分析 a、CSS 动画更为流畅、但内存占用过高,动画元素在 5 个以内更为推荐; b、Canvas 动画存在丢帧现象,这一现象在 android 中低端手机中表现更为明显; c、5 个以内动画元素,选用 CSS 动画,80%的设备帧频可达 80 以上。 18.移动端怎么自适应? 移动自适应的话一般我用的话就是 rem,通过 rem 单位配合媒体查询来完成几个屏幕 的适配,以 iphone6 位标准,向上适配 plus,向下适配 5,不做过多的适配,有时候 有要求的话也用 js 来控制 rem 的大小达到适配效果,rem 是相对单位,相对 html 元 素的 font-size 值的属性,比如 font-size:100px; 的话 1rem 就得 100px,这样我子 需要通过改变 html 的 font-size 就可以达到适配效果。 19.如何开启 gpu 加速? 为动画 DOM 元素添加 CSS3 样式-webkit-transform:transition3d(0,0,0)或- webkit-transform:translateZ(0);,这两个属性都会开启 GPU 硬件加速模式,从而让 浏览器在渲染动画时从 CPU 转向 GPU 通过-webkit-transform:transition3d/translateZ 开启 GPU 硬件加速之后,有些时 候可能会导致浏览器频繁闪烁或抖动,可以尝试以下办法解决之: -webkit-backface-visibility:hidden; -webkit-perspective:1000; 通过-webkit-transform:transition3d/translateZ开启 GPU 硬件加速的适用范 围: a)使用很多大尺寸图片(尤其是 PNG24 图)进行动画的页面。 b)页面有很多大尺寸图片并且进行了 css 缩放处理,页面可以滚动时。 c)使用 background-size:cover 设置大尺寸背景图,并且页面可以滚动时 d)编写大量 DOM 元素进行 CSS3 动画时 (transition/transform/keyframes/absTop&Left) e)使用很多 PNG 图片拼接成 CSS Sprite 时 20.Svg 和 canvas 的区别 canvas 是 html5 提供的新元素,而 svg 存在的历史要比 canvas 久远,已 经有十几年了。svg 并不是 html5 专有的标签,最初 svg 是用 xml 技术(超文本扩展 语言,可以自定义标签或属性)描述二维图形的语言。在 H5 中看似 canvas 与 svg 很像,但是,他们有巨大的差别。 首先,从它们的功能上来讲,canvas 可以看做是一个画布。其绘制出来的图形为 标量图,因此,可以在 canvas 中引入 jpg 或 png 这类格式的图片,在实际开发中, 大型的网络游戏都是用 canvas 画布做出来的,并且 canvas 的技术现在已经相当的成 熟。另外,我们喜欢用 canvas 来做一些统计用的图表,如柱状图曲线图或饼状图 等。而 svg,所绘制的图形为矢量图,所以其用法上受到了限制。因为只能绘制矢量 图,所以 svg 中不能引入普通的图片,因为矢量图的不会失真的效果,在项目中我们 会用来做一些动态的小图标。但是由于其本质为矢量图,可以被无限放大而不会失 真,这很适合被用来做地图,而百度地图就是用 svg 技术做出来的。 另外从技术发面来讲 canvas 里面绘制的图形不能被引擎抓取,如我们要让 canvas 里 面的一个图片跟随鼠标事件:canvas.onmouseover=function(){}。而 svg 里面的图 形可以被引擎抓取,支持事件的绑定。另外 canvas 中我们绘制图形通常是通过 javascript 来实现,svg 更多的是通过标签来来实现,如在 svg 中绘制正矩形形就要 用,这里我们不能用属性 style="width:XXX;height:XXX;”来定义 SVG SVG 是一种使用 XML 描述 2D 图形的语言。 SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为 某个元素附加 JavaScript 事件处理器。 在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变 化,那么浏览器能够自动重现图形。 特点: a)不依赖分辨率 b)支持事件处理器 c)最适合带有大型渲染区域的应用程序(比如谷歌地图) d)复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快) e)不适合游戏应用 Canvas Canvas 通过 JavaScript 来绘制 2D 图形。 Canvas 是逐像素进行渲染的。 在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如 果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对 象。 特点: a)依赖分辨率 b)不支持事件处理器 c)弱的文本渲染能力 d)能够以 .png 或 .jpg 格式保存结果图像 e)最适合图像密集型的游戏,其中的许多对象会被频繁重绘 21.物理 1 像素怎么实现 可以使用 after 插入的形式将宽度设置为 200%,然后通过 css transfrom 的 scale 缩 放 0.5 倍; 22.响应式布局的原理 Meta 标签定义 使用 viewport meta 标签在手机浏览器上控制布局 通过快捷方式打开时全屏显示 隐藏状态栏 iPhone 会将看起来像电话号码的数字添加电话连接,应当关闭 使用 Media Queries 适配对应样式 常用于布局的 CSS Media Queries 有以下几种: 设备类型(media type): all 所有设备; screen 电脑显示器; print 打印用纸或打印预览视图; handheld 便携设备; tv 电视机类型的设备; speech 语意和音频盒成器; braille 盲人用点字法触觉回馈设备; embossed 盲文打印机; projection 各种投影设备; tty 使用固定密度字母栅格的媒介,比如电传打字机和终端。 设备特性(media feature): width 浏览器宽度; height 浏览器高度; device-width 设备屏幕分辨率的宽度值; device-height 设备屏幕分辨率的高度值; orientation 浏览器窗口的方向纵向还是横向,当窗口的高度值大于等于宽度时该特性 值为 portrait,否则为 landscape; aspect-ratio 比例值,浏览器的纵横比; device-aspect-ratio 比例值,屏幕的纵横比。 设置多种视图宽度 @media only screen and (min-width:768px)and(max-width:1024px){} @media only screen and (width:320px)and (width:768px){} 百分比布局 宽度不固定,可以使用百分比 #head{width:100%;} #content{width:50%;} 响应式图片 #wrap img{ max-width:100%; height:auto; } 字体设置 一个响应式的字体应关联它的父容器的宽度,这样才能适应客户端屏幕。css3 引入了 新的单位叫做 rem,和 em 类似但对于 Html 元素,rem 更方便使用。em 是相对于根 元素的,需重置根元素字体大小: html{font-size:100%;} 完成后,可以定义响应式字体: @media (min-width:640px){body{font-size:1rem;}} @media (min-width:960px){body{font-size:1.2rem;}} @media (min-width:1200px){body{font-size:2rem;}} 23.移动端适配 1.自适应方式 2.viewport 方式 3.rem 方式 4.scale()方式缩放 24.常用 meta IE 相关 避免 IE 使用兼容模式 为不支持 viewport 的 IE Mobile 设定宽度 是否对手持设备友好 UC 浏览器 强制竖屏 强制全屏 应用模式 360 开启极速模式 X5 浏览器 强制竖屏 强制全屏 应用模式 iphone 相关 启动 webapp 功能 删除工具栏和菜单栏 控制状态栏颜色 开启号码或邮箱检测 添加主屏幕 icon
本文由作者创作或收集,内容引用如有问题请联系站长处理。
转载请注明原文及出处:前端面试题——html5

发表评论 (审核通过后显示评论):