HTML5 面试知识点整理

前言:之前整理得 面试侃侃而谈 H5 和 C3 有点杂乱,并不是太系统,这次对着「HTML5与CSS3权威指南」以及阮一峰和张鑫旭得博客系统在整理下,有个系统得了解,下次面试,我直接上来给面试官系统谈谈「 H5 」谈谈「 C3 」谈谈「 E6 」,直接镇住他也懒得让面试官问我基础浪费时间,万一问道没学到还尴尬。😅

以下内容因为整理得时候都系统得学了,所以不会涉及详细得使用指南,只是简单得列举下,面试得时候谈到具体得内容,只能看自己得掌握情况系统发挥。

HTML5 面试知识点整理开始。

一、语法的改变

  1. 文件声明
!DOCTYPE(忽略大小写)
  1. 字符编码
<meta charset="UTF-8">

二、HTML5 兼容性写法

  1. 元素标记的省略
    • 单标签,不允许写结束标签,例如 img
    • 双标签,可省略结束标签,例如 li
    • 例如 headbody 这些标签可省略全部标记浏览器会自动创建
  2. 具有 Boolean 值的属性。例如 disable,readonly 默认写了就是 true 不写就是 false
  3. 标签属性值可省略双引号/单引号
  4. 标签 scriptlink 等的 type 属性值可以省略
  5. 标签不再区分大小写
  6. 单标签的 / 可省略,但在 XHTML 必须写为 <br />

三、新增语义化标签

section
article
aside
header
footer
nav
main
figure(figcaption)常用于图文说明
small 网站底部的版权状态,我常常用错使用 div 来替代。
☆★☆★☆★☆★

time(datetime,pubdate**微格式**:利用class属性来对网页添加诸如新闻、日期、地点、电话之类的附加信息的方法)
mark 高亮
embed(用来插入各种多媒体)
progress(显示一项任务的完成进度)
meter(用来显示已知范围的标量值或者分数值)
address
wbr软换行

☆★☆★☆★☆★
details(open)summary 一般用于内容的摘要,标题或图例

<dialog open>
    <p>内容</p>
</dialog>
showModal();
close();

output 输出
<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
    <input type="range" name="b" value="50" /> +
    <input type="number" name="a" value="10" /> =
    <output name="result"></output>
</form>

<ruby>
    拼音 <rp>(</rp><rt>Pinyin</rt><rp>)</rp>
</ruby>

☆★☆★☆★☆★

list 做下拉框
<label>Choose a browser from this list:
<input list="browsers" name="myBrowser" /></label>
<datalist id="browsers">
    <option value="Chrome">
    <option value="Firefox">
    <option value="Internet Explorer">
    <option value="Opera">
    <option value="Safari">
</datalist>

☆★☆★☆★☆★
canvas
video(source)
audio(source)

四、Web组件

4.1 template定制模板:

以前使用 UnderScore 结合 Jquery 做瀑布流,使用的字符串模板都是这样的:

<script type="text/template"></script>

现在 HTML5 给规范了。使用 <template><template/>

特点是:
加载页面时 template (标签可放在任意位置)内容不会呈现必须通过 JavaScript 实例化即:document.body.appendChild(temp.content.cloneNode(true))

因为模板里面的 DOM 不能直接获取,所以 template 标签有个只读属性content 表示template 标签内部所有的 DOM。

4.2 shadow DOM 组件(现在已废弃)

影子 DOM 又叫 DOM 中的 DOM 看到这个 shadow DOM 估计你脑海中第一个想到的是 Virtual DOM,虽然两者完全不一样。

点击查看具体用法

let sdroot = eleDOM.attachShadow({mode: 'open'});

特点:

  • eleDOM 元素里面的内容都不显示,可通过 slot 组件解决。
  • 模块化概念,内部的样式(作用域CSS),选择器等等不会影响到外面。
4.3 slot组件

web 组件内的一个占位符(拥有 name 属性的插槽叫具名插槽,一个事件slotchange)
一般 template 和 slot 结合 shadow DOM 组件使用。

<header id="app">
    <h3 slot="attributes">header</h3>
    <template id="temp">
        <style>
            div {
              color: tomato;
              background-color: #cfc;
              width: 180px;
              height: 100px;
            }
        </style>
        <div>文字颜色为tomato<slot name="attributes"></slot></div>
    </template>
</header>
<script>
    const shadowRoot = app.attachShadow({ mode: 'open' });
    shadowRoot.appendChild(temp.content);
</script>
4.4 自定义元素(了解下就行)
<script>
class AppDrawer extends HTMLElement {
    
}
window.customElements.define("app-drawer",AppDrawer);
</script>
<app-drawer>自定义元素</app-drawer>

4.5 HTML 导入(在 Google Chrome 73 后已过时)

css 有导入,JS 也有导入。HTML 有时会使用 iframe 导入,但是现在不用了。HTML 导入功能可用来 bootstrap 包的引入,便于管理。

语法:

<link rel="import" href="">
<script>
    const content = document.querySelector("link[rel='import']");
    console.log(content.import);
</script>

需要注意的是这个语法和引入 stylesheet 语法不同,不会直接把内容搬过来,必须配合 JS 使用。废弃的原因很简单模块化完全可替代。

五、全局属性

全局属性是所有 HTML 元素共有的属性; 它们可以用于所有元素,即使属性可能对某些元素不起作用。

以前常见的有:

title
class
id
style

HTML5 新增:

  1. 表示整个页面是否可编辑,默认为 off
document.designMode = "on"
  1. contenteditable表示元素是可编辑的
    元素有isContentEditable属性表示此元素时候可编辑
  1. hidden元素不可见,渲染但不占空间
  1. spellcheck 定义检查元素的拼写错误
    这个属性是枚举型而不是布尔类型,这意味着显式设置其中一个值true或false是强制性的

  2. accesskey="q"提供了为当前元素生成快捷键的方式alt+q

  3. tabindex
    整数属性,指示元素是否可以获取输入焦点(可聚焦),是否应该参与顺序键盘导航。一般用于弹框里面有表单的情况,如果是做一些键盘可访问的元素,当鼠标点击出现边框可配合CSS :focus-visible伪类让我感动哭了 使用。

  4. autocapitalize控制用户输入/编辑文本输入时文本输入是否自动大写

  5. autofocus自动聚焦

  6. dir一个指示元素中文本方向的枚举属性

六、input 标签支持的控件

以下控件某些自带正则:

以前:
text
checkbox
password
radio
reset   
submit
button

HTML5新增:

color
number
range
tel     
time
email
file
url 
week
search
date
month
datetime-local
hidden
image

原生自带表单 UI 可能比较丑可通过:

进行样式重置。

控件新增属性:

autofocus
placeholder
form,formaction,formenctype,formmethod,formnovalidate,formtarget
required
autocomplete
min,max,maxlength,multiple,step,pattern
list(list配合datalist使用配合autocomplete)
readonly
selectionDirection选中文字方向
图片的height

链接相关属性
download
其他属性
ol:start和reversed
style的scoped
script:async和defer
link:mainfest

通过 rel="preload" 进行内容预加载:指明哪些资源是在页面加载完成后即刻需要的。
preload 还有许多其他好处。使用 as 来指定将要预加载的内容的类型,将使得浏览器能够:

  • 更精确地优化资源加载优先级。
  • 匹配未来的加载需求,在适当的情况下,重复利用同一资源。
  • 为资源应用正确的内容安全策略
  • 为资源设置正确的 Accept 请求头。
  • 支持media="(max-width: 600px)"
  • 支持 type="video/mp4"

prefetch 与 preload 不同:prefetch 供下一个导航/页面使用,所以这个 API 没啥用。更多 link 使用方法:HTML rel属性值释义大全

七、HTML5新增事件

分为五类:

  1. 鼠标事件
ondrag  当元素被拖拽的时候执行
ondragover  当元素拖拽经过释放对象的时候
ondragstart 当元素拖拽操作开始的时候执行
ondragend   当元素拖拽操作结束的时候执行
ondragenter 当元素拖拽进入释放对象的时候
ondragleave 当元素拖拽离开释放对象的时候
ondrop  当拖拽元素被放开的时候
onmouswheel 当鼠标滑轮滚动的时候执行
onscroll    当元素的滚动条滚动的时候执行
  1. 新媒体事件
onpause 当媒体数据暂停的时候执行
onplay  当媒体数据继续开始播放的时候执行
ontimeupdate    当媒体改变其播放位置的时候执行
onvolumechange  当媒体音量大小发生改变的时候执行,包括无声
onwaiting   当媒体元素停止播放的时候
onended 当媒体已经到达最后的时候执行
onloadstart 当浏览器开始加载媒体数据的时候执行
onplaying   当媒体数据已经开始播放的时候执行
onprogress  在浏览器正在获取媒体数据的时候执行
---
oncanplay   当媒体可以播放的时候执行
oncanplaythrough    当媒体可以播放到最后的时候执行
ondurationchange    当媒体长度改变的时候执行
onemptied   当媒体资源元素变成空的时候执行
onerror 当加载元素发生错误的时候执行
onloadeddata    当媒体数据加载完毕的时候执行
onloadedmetadata    当媒体元素的持续时间加载完毕的时候执行
onratechange    当媒体数据播放比率发生改变的时候执行
onreadystatechange  当ready-state发生改变的时候执行
onseeked    当元素的seeking属性不是true的时候执行
onseeking   当元素的seeking属性是true的时候执行
onstalled   当获取元素数据发生错误的时候执行
onsuspend   当浏览器停止获取媒体数据的时候执行

  1. window新增事件
onresize    当窗体大小改变的时候执行
onhaschange 当文档发生改变的时候执行
onmessage   当该信息被触发的时候执行
onpopstate  当窗体历史改变的时候执行
onoffline   当文档离线的时候执行
ononline    当文档上线的时候执行
onafterprint    在文档打印之后执行
onbeforeprint   在文档打印之前执行
---
onbeforeloaded  在文档加载完毕之前执行
onerror 当错误发生时执行
onpagehide  当窗体隐藏的时候执行
onpageshow  当窗体显示的时候执行
onredo  当文档执行恢复上一次操作的时候执行
onstorage   当文档加载ok的时候执行
onondo  当文档执行恢复之前一次操作的时候执行
onunload    当用户离开文档的时候执行
  1. 表单事件
oninput     当元素获得用户输入的时候执行
oninvalid   当元素验证无效的时候执行
onformchange    当表单发生改变的时候执行

  1. 动画事件
animationstart - CSS 动画开始后触发
animationiteration - CSS 动画重复播放时触发
animationend - CSS 动画完成后触发

其中DOM二级事件监听第三个参数发生了更改:

addEventListener(type,cb,bool);
第三个参数改为对象形式:
{
    passive:true,//preventDefault
    once:true,
    capture:true
}

八、文件数据类型

filelist(File接口基于Blob)
DataTransfer
blob(BLOB (binary large object),表示二进制大对象)
blob要想使用必须:

img.src = window.URL.createObjectURL(blob);
img.onload = function(e) {
  window.URL.revokeObjectURL(img.src); // 清除释放
};

ArrayBuffer
fileReader
理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型

九、XHR2.0 和 fetch

跨域
进度事件
二进制上传下载

讲到跨域:

在HTML5中,一些 HTML 元素提供了对 CORS 的支持, 例如 <audio>、<img>、<link>、<script> 和 <video> 均有一个跨域属性 (crossOrigin property),它允许你配置元素获取数据的 CORS 请求。

十、本地存储

localStorage
sessionStorage
indexedDB
HTML5 indexedDB前端本地存储数据库实例教程

MYSQL
PWA
借助Service Worker和cacheStorage缓存及离线开发
借助Service Worker和cacheStorage缓存及离线开发(mainfest)

十一、通信

11.1 WebSocket

WebSocket 教程

11.2 Server-Sent Events服务器单向浏览器通信

Server-Sent Events 教程

11.3 跨页面通信
  • postMessage结合message和iframe(postMessage可跨域)
  • MessageChannel(MC消息通道)
  • BroadcastChannel(BC广播通道)

页面间通信与数据共享解决方案简析

11.4 WebWorker

阮一峰——Web Worker 使用教程

11.5 SharedWorker

注意调试得时候禁用缓存也没用:

new SharedWorker(`./worker.js?date=${new Date()}`);
//如果要使共享进程可以连接到多个不同的页面,这些页面必须属于相同的域(相同的协议,主机以及端口)

SharedWorker

11.6 push&Notification 推送与通知

简单了解HTML5中的Web Notification桌面通知

十二、Geolocation 地理位置信息

Geolocation 获取到当前设备的经纬度(位置)。

function getUserLocation() {
    return new Promise((resolve, reject) => {
        if (!navigator.geolocation) {
            reject()
        } else {
            navigator.geolocation.getCurrentPosition(success, error);
        }
        function success(position) {
            const latitude = position.coords.latitude;
            const longitude = position.coords.longitude;
            resolve({latitude, longitude});
        }
        function error() {
            reject();
        }
    })
}
getUserLocation().then(res=>console.log(res));

十三、canvas

十四、Video和Audio

playbackRate视频倍速播放

十五、FullScreen 全屏 API

HTML5 全屏 API 在 FireFox/Chrome 中的显示差异比较老了文章,其实使用很简单,三句语法:

// 开启全屏
document.documentElement.requestFullscreen();
// 退出全屏
document.exitFullscreen();
//是否是全屏,不是的话为null
document.fullscreenElement

加个按钮就能使用了。

十、battery

关于电池🔋的 API,电量低的时候可以使用。

navigator.getBattery().then(function(battery) {
  console.log("是否在充电? " + (battery.charging ? "是" : "否"));
  console.log("电量等级: " + battery.level * 100 + "%");
  console.log("充电时间: " + battery.chargingTime + " s");
  console.log("放电时间: " + battery.dischargingTime + "s");
});

附图一张:


百炼功纯始自然

创建日期:2020年4月21日23点42分

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350