HTML面试题整理总结
前记
为了准备春招面试,对自己的知识点进行一个总结积累,第一篇是关于HTML方面的知识点,后续如果遇见新题会进行继续的补充
什么是 HTML 语义化,有什么好处
HTML语义化简单来说就是,段落使用<p></p>
,侧边栏用<aside></aside>
,主要内容使用<main></main>
。
- 有助于构架良好的HTML结构
- 有助于搜索引擎建立索引、抓取,有利于SEO
- 有利于不同设备的解析
- 有利于团队的开发维护
为什么要在html文件开头加上一个<!DOCTYPE html>
告诉浏览器使用哪个版本的HTML规范来渲染文档。DOCTYPE不存在或形式不正确会导致HTML文档以混杂模式呈现。
HTML5为什么只需要写 <!DOCTYPE html>?
HTML5不基于SGML,所以不需要引用DTD(DTD 文档类型定义)。在HTML5中<!DOCTYPE>只有一种
<!DOCTYPE html>
在HTML4.01中,<!DOCTYPE>声明引用DTD,因为HTML4.01基于SGML。DTD规定了标记语言的规则,这样浏览器才能正确的呈现内容。在HTML4.01中有三种<!DOCTYPE>声明。
行内元素有哪些?块级元素有哪些?
- 行内元素:
a
、span
、img
、input
、select
- 块级元素:
div
、ul
、ol
、li
、p
meta viewport 是做什么用的,怎么写?
控制页面在移动端不要缩小显示。
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
HTML5的新增特性
新增加了图像、位置、存储、多任务等功能。
- 新增功能标签:可以用作画板的
canvas
,用于媒介回放的video
和audio
元素等 - 本地离线存储:
localStorage
长期存储数据,浏览器关闭后数据不丢失;sessionStorage
的数据在浏览器关闭后自动删除 - 语意化更好的标签:
figure
、footer
、header
、aside
、time
等标签 - 位置API:
Geolocation
- 表单控件:
calendar
date
time
email
url
search
- 新的技术:
Web Worker
(web worker是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行)Web Socket
- 拖放API:
drag
、drop
- 离线网路程序:能够让网页在客户端本地高效地离线运行。
- History API:允许对浏览器历史记录进行操作。这对于那些交互地加载新信息的页面尤其有用。
介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎(Layout Engine或Rendering Engine)和JS引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。
JS引擎:解析和执行javascript来实现网页的动态效果。
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
常见的浏览器内核及对应浏览器
Trident
:IE内核Gecko
:Firefox内核Presto
:Opera前内核(已废弃)Webkit
:Safari内核,Chrome内核原型,开源Blink
:由Google和Opera Software开发,Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器中使用
defer 和 async 的区别
没有defer
或async
,浏览器在遇到script
标签后,会立即加载并执行标签中的脚本,“立即”指的是在渲染该script
标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。
有defer
,加载后续文档元素的过程将和script.js
的加载并行进行(异步),但是script.js
的执行要在所有元素解析完成之后,DOMContentLoaded
事件触发之前完成。
有async
,加载和渲染后续文档元素的过程将和script.js
的加载并行进行(异步),但当script.js
加载完后会立即执行,即停止加载和渲染后续文档元素,执行script.js
。
如图所示,但需要注意以下几点
- 关于
defer
,此图未尽之处在于它是按照加载顺序执行脚本的,这一点要善加利用 - 关于
async
,它的脚本加载顺序是乱序的,谁先加载完执行谁