ES6、HTML5、CSS3新特性

583 阅读5分钟

感谢掘金守候i的文章分享

感谢b站up主技术蛋老师的精彩分享

ES6新特性

标题内容备注
let和const 变量声明
箭头函数不能用做构造函数,无this、arguments等
模板字符串My name is ${name}, I am ${age}
解构赋值可将属性/值从对象/数组中取出,赋值给其他变量
模块化export、import
扩展操作符...
对象属性简写cat, cat:cat
Promise异步解决方案
新增数据类型Symbol

变量声明

声明方法:varconstletfunctionclassimport

varletconst
变量提升××
全局变量××
重复声明××
重新赋值×
暂时死区×
块作用域×
只声明不初始化×

HTML5 新特性

标题内容备注
新增元素语义化标签使页面的内容结构化
页面布局由DIV+CSS过渡为语义化
aside、header、section、footer
新增APICanvas用笔刷绘制2D位图
SVG用标签绘制不规则矢量图
SVG节点多时渲染慢,Canvas性能更好但写得复杂
SVG 支持分层和事件,Canvas 不支持 可用库实现
新增API音频audio视频video浏览器原生支持无需安装
新增APIXMLHttpRequest升级版通过CORS实现了跨源XMLHttpRequest
请求包含一个Origin头部为服务器提供HTTP请求的源信息
新增APIWebSockets
在单个TCP连接上通讯协议
新建WebSocket实例+目的URL,可连接远程主机
BS之间一次握手建立通道后互传数据
send方法向服务器发送数据
onmessage事件接收响应
新增API表单属性 placeholder等
新增APIWeb Storage API
在本地存储用户的浏览数据
只允许该网页访问使用
localStorage无时间限制 保存在客户端本地 手动删除
sessionStorage针对一个session的关闭窗口数据删除 保存在session中
新增APIWeb Workers API允许 JS 脚本创建多线程,但子线程受主线程控制,且不得操作 DOM

CSS3 新特性

标题内容备注
盒模型box-sizing:border-box
(边框和padding包含在元素的宽高之内)
box-sizing:content-box
(边框和padding不包含在元素的宽高之内)
媒体查询
监听屏幕尺寸的变化
做响应式网站
弹性布局
可控制下级盒子的位置
栅格布局Grid
动画 animation@keyframes
做一个预设的动画和一些页面交互的动画效果
logo展示动画、loading效果、音乐震动条
过渡 transition
元素从样式1渐变为样式2的效果 补充中间帧

指定要添加效果的CSS属性指定效果的持续时间
hover动画、下拉菜单、焦点图、手风琴
形变 transform属性有位移translate、缩放scale、旋转rotate、倾斜skew
阴影 box-shadow
颜色表示rgba(rgb为颜色值,a为透明度)
渐变线性渐变 background: linear-gradient
径向渐变Radial Gradients
圆锥渐变

CSS布局

Grid布局指南

CSS在处理网页布局方面一直做的不是很好。一开始我们用的是table(表格)布局,然后用float(浮动),position(定位)和inline-block(行内块)布局,但是这些方法本质上是hack,遗漏了很多功能,例如垂直居中。后来出了flexbox(盒子布局),解决了很多布局问题,但是它仅仅是一维布局,而不是复杂的二维布局,实际上它们(flexbox与grid)能很好的配合使用。Grid布局是第一个专门为解决布局问题而创建的CSS模块。

媒体查询

能使页面在不同终端设备下达到不同的效果,会根据设备的大小自动识别加载不同样式。

设置 meta 标签

使用设备的宽度做为视图宽度并禁止初始的缩放,也就是PC端与移动端显示效果相同的响应式:

<meta name="viewport" content="width=device-width,
initial-scale=1,minimum-scale=1,maximum-scale=1,
user-scalable=no,viewport-fit=cover">

媒体查询语法

@media screen and (max-width:768px){
  // 设备宽度小于 768px 加载样式:
  body{background-color:red};
}
@media screen and (max-width:992px) and (min-width:768px){
  // 设备宽度介于 768px~992px 之间 加载样式:
  body{background-color:pink};
}
@media screen and (min-width:992px){
  // 设备宽度大于 992px 加载样式:
  body{background-color:green};
}

HTTP、WebSocket、WebRTC

HTTP

客户端没发送请求给服务器之前,服务器不会主动响应。客户端发请求后服务器才作反应,是单向的传输数据。若想持续获取资源得不断重复请求。

长轮询 Long polling

客户端让HTTP请求保持持久连接,服务器需腾出资源给长轮询,就算没数据的时候也得保持连接。

WebSockets

专门做“实时”应用的协议。开始时使用HTTP,后面保持TCP持久连接,请求URI用的是wswss

"ws:""//"host[":"port]path["?"query]
"wss:""//"host[":"port]path["?"query]

在HTTP协议里对应的是HTTP和HTTPS,客户端发起WebSockets请求,需要在请求首部里做出说明:

Connection:Upgrade
Upgrade:webSocket
Sec-WebSocket-Key:   // 提供给服务器验证是否收到有效的webSockets请求
Sec-WebSocket-Version:

服务器收到这个请求后就会看到连接要求升级,升级为什么直接在Upgrade里找,得到webSocket,于是服务器就知道客户端要建立WebSockets连接。服务器响应内容与请求一致,表明验证了连接已经被升级了。

101 Switching Protocols  // 服务器正式做出响应前发出
Connection:Upgrade
Upgrade:webSocket
Sec-WebSocket-Accept:   // 表示服务器同意建立连接,根据请求里Key的值来生成

以上建立连接后,正式可以双向传输数据。

Socket.io库

用到了WebSockets协议,但是对于不支持WebSockets的浏览器会回退到HTTP轮询,并提供自动重连。Socket.io库可以实现聊天应用。

WebRTC

一种实时通讯(Real-Time Communications)技术,实现了基于网页的视频会议,不借助中间媒介建立浏览器之间点对点的连接,实现视频流和音频流或其他任意数据的传输。

WebRTC的应用场景

  • 直播
  • 游戏
  • 视频会议/在线教育
  • 屏幕共享/远程控制