前端面试题——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 提供的新元素
发表评论 (审核通过后显示评论):