# Question

# DTD的作用是什么?什么是怪异模式?什么是标准模式?二者有什么差别(举例)?产生的历史原因是什么?使用时需要注意什么?

DTD 是Doc Type Declaration, 对于HTML和XHTML, 添加文档对象声明能够确保不同浏览器使用相同的方式解析页面。不设置DocType或者错误设置会触发怪异模式。 在HTML顶部添加 <!DOCTYPE html> 就是使用标准模式

怪异模式下不同的浏览器的渲染模式是不一样的,就导致开发者需要花费大量精力在不同浏览器的一致性上。 而标准模式浏览器的一致性好得多。

举例,css的盒模型。微软在IE5时与IE6的盒模型不一致。盒模型的宽度不等于内容加上内边距。 所以可以用DTD来控制怎么显示盒模型

使用时需注意: <!DOCTYPE html> 必须放在顶部,前面不能有其他的字符。 可以使用document.compatMode 来检测

# HTML5是什么?有哪些新特性?新增了哪些语义化标签?新增了哪些表单元素?和h5有啥关系?

HTML5 是HTML第五次修订版。 广义上叫Web开发技术集。

  • 语义化标签: section article nav header footer main audio video figure
  • 新的通信技术: Websocket, 服务器推送, WebRTC
  • 离线存储: LocalStorage , indexedDB等
  • 多媒体。 音视频, WebRTC, 摄像头等
  • 2/3D绘画。 Canvas, WebGL, SVG
  • 性能。 WebWorkers, xhr2, 动画, History API
  • 设备访问。Camera API, 触控,位置,设备方向
  • 样式 CSS3阴影、边框、动画、形变、过渡、布局
  • 新增表单元素 type=email、search、range、color、date、url、number

# 如何理解HTML语义化 ?

关键点: 合适的标签, 合适的命名

# meta viewport作用?

让页面能够在小屏幕下合理的显示 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">

最大缩放是1, 最小缩放也是1,也就是没办法使用手指来拉伸

# HTML和XHTML的区别

XHTML标签必须闭合, HTML可以省略闭合。 HTML表单的属性可以不设置值。 比如<input type="radio" selected> XHTML表单属性必须设置值 <input type="radio" selected="selected"> HTML标签和属性忽略大小写, 在XHTML标签和属性只能小写

# 使用 data-* 属性有什么用?

可以暂存数据, node.dataset可以获取data-属性构造的对象。比如 <div id="node" data-color="red" data-font-size="30px">jirengu</div> Object.assign(node.style, node.dataset)

# <script><script async><script defer> 的区别。

  • <script>加载->执行->往后解析;加载会阻塞解析,多个JS按顺序执行

浏览器碰到script标签会停止,阻塞解析,当执行完js后才会继续写解析。

  • <script async> 不影响DOM的解析和其他资源的加载,特例独行,不保证顺序,不保证时机
  • <script defer> 不影响DOM的解析和其他资源的加载,但是会保证在DOM资源准备就绪后再执行,并且对于多个defer的外置js按顺序执行

白屏: 页面一片空白,突然展示完整的有样式的内容

FOUC:无样式内容闪烁,页面一开始展示无样式的内容,突然样式正常

样式的加载不会阻塞后续元素的解析,所以当然是加载的越早越好。并且能防止部分浏览器出现无样式内容闪烁的效果。

JS的加载会阻塞后续DOM的解析,放在后面可以让用户第一时间看见页面体验更好。而且一般js常常会操作DOM,如果放在head里此时body上的dom元素尚未解析,只能监听事件再合适的时机再操作dom多此一举。

有些场景下比如需要尽早的做一些事情,比如移动端适配时修改html的fontsize,此时可以放在head中越早越好。

# 浏览器渲染机制?什么是回流(reflow)、重绘(repaint)?

解析HTML,构建DOM树;解析CSS构建CSSOM树;组合成渲染树;计算节点的位置和几何结构;绘制到屏幕上。

回流:重新计算元素的几何尺寸,位置。添加删除元素,修改盒模型属性,display: none等,引起自己尺寸、位置变化或者其他元素尺寸位置的变化。

重绘:重新绘制全部或者部分界面。修改颜色、背景色等。不需要重新计算位置,只需要重新绘制效果。

优化:一次性修改样式;给动画使用绝对定位或者transfrom减小影响面;在DOM离线状态下修改样式。 回流必将引起重绘,重绘不一定会引起回流。

Last Updated: 1/18/2022, 2:15:42 AM