html知识点记录

1. !DOCTYPE 标签:

它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令.

2. H5新特性

媒体播放的 video 和 audio
本地存储 localStorage 和 sessionStorage
离线应用 manifest
桌面通知 Notifications
语意化标签 article、footer、header、nav、section
增强表单控件 calendar、date、time、email、url、search
地理位置 Geolocation
多任务 webworker
全双工通信协议 websocket
历史管理 history
跨域资源共享(CORS) Access-Control-Allow-Origin
页面可见性改变事件 visibilitychange
跨窗口通信 PostMessage
Form Data 对象
绘画 canvas

3. 行内元素及块级元素

  1. HTML4中,元素被分成两大类: inline (内联元素)与 block(块级元素)。一个行内元素只占据它对应标签的边框所包含的空间。
    常见的行内元素有: a b span img strong sub sup button input label select textarea

  2. 块级元素占据其父元素(容器)的整个宽度,因此创建了一个“块”。
    常见的块级元素有: div ul ol li dl dt dd h1 h2 h3 h4 h5 h6 p

  3. 区别
    (1)格式上,默认情况下,行内元素不会以新行开始,而块级元素会新起一行。
    (2)内容上,默认情况下,行内元素只能包含文本和其他行内元素。而块级元素可以包含行内元素和其他块级元素。
    (3)行内元素与块级元素属性的不同,主要是盒模型属性上:行内元素设置 width 无效,height 无效(可以设置 line-height),设置 margin 和 padding 的上下不会对其他元素产生影响。

4. 自闭和标签

br hr img input link meta

(1)从属关系区别。 @import 是 CSS 提供的语法规则,只有导入样式表的作用;link 是 HTML 提供的标签,不仅可以加
载 CSS 文件,还可以定义 RSS、rel 连接属性、引入网站图标等。

(2)加载顺序区别。加载页面时,link 标签引入的 CSS 被同时加载;@import 引入的 CSS 将在页面加载完毕后被加载。

(3)兼容性区别。@import 是 CSS2.1 才有的语法,故只可在 IE5+ 才能识别;link 标签作为 HTML 元素,不存在兼容
性问题。

(4)DOM 可控性区别。可以通过 JS 操作 DOM ,插入 link 标签来改变样式;由于 DOM 方法是基于文档的,无法使用 @i
mport 的方式插入样式。

6. 常见的浏览器内核比较

Trident:这种浏览器内核是 IE 浏览器用的内核,因为在早期 IE 占有大量的市场份额,所以这种内核比较流行,以前有很多
网页也是根据这个内核的标准来编写的,但是实际上这个内核对真正的网页标准支持不是很好。但是由于 IE 的高市场占有率,微
软也很长时间没有更新 Trident 内核,就导致了 Trident 内核和 W3C 标准脱节。还有就是 Trident 内核的大量 Bug 等
安全问题没有得到解决,加上一些专家学者公开自己认为 IE 浏览器不安全的观点,使很多用户开始转向其他浏览器。

Gecko:这是 Firefox 和 Flock 所采用的内核,这个内核的优点就是功能强大、丰富,可以支持很多复杂网页效果和浏览器扩
展接口,但是代价是也显而易见就是要消耗很多的资源,比如内存。

Presto:Opera 曾经采用的就是 Presto 内核,Presto 内核被称为公认的浏览网页速度最快的内核,这得益于它在开发时的
天生优势,在处理 JS 脚本等脚本语言时,会比其他的内核快3倍左右,缺点就是为了达到很快的速度而丢掉了一部分网页兼容性。

Webkit:Webkit 是 Safari 采用的内核,它的优点就是网页浏览速度较快,虽然不及 Presto 但是也胜于 Gecko 和 Trid
ent,缺点是对于网页代码的容错性不高,也就是说对网页代码的兼容性较低,会使一些编写不标准的网页无法正确显示。WebKit
前身是 KDE 小组的 KHTML 引擎,可以说 WebKit 是 KHTML 的一个开源的分支。

Blink:谷歌在 Chromium Blog 上发表博客,称将与苹果的开源浏览器核心 Webkit 分道扬镳,在 Chromium 项目中研发 B
link 渲染引擎(即浏览器核心),内置于 Chrome 浏览器之中。其实 Blink 引擎就是 Webkit 的一个分支,就像 webkit 是
KHTML 的分支一样。Blink 引擎现在是谷歌公司与 Opera Software 共同研发,上面提到过的,Opera 弃用了自己的 Presto
内核,加入 Google 阵营,跟随谷歌一起研发 Blink。

7. 常见浏览器所用内核

(1) IE 浏览器内核:Trident 内核,也是俗称的 IE 内核;

(2) Chrome 浏览器内核:统称为 Chromium 内核或 Chrome 内核,以前是 Webkit 内核,现在是 Blink内核;

(3) Firefox 浏览器内核:Gecko 内核,俗称 Firefox 内核;

(4) Safari 浏览器内核:Webkit 内核;

(5) Opera 浏览器内核:最初是自己的 Presto 内核,后来加入谷歌大军,从 Webkit 又到了 Blink 内核;

(6) 360浏览器、猎豹浏览器内核:IE + Chrome 双内核;

(7) 搜狗、遨游、QQ 浏览器内核:Trident(兼容模式)+ Webkit(高速模式);

(8) 百度浏览器、世界之窗内核:IE 内核;

(9) 2345浏览器内核:好像以前是 IE 内核,现在也是 IE + Chrome 双内核了;

(10)UC 浏览器内核:这个众口不一,UC 说是他们自己研发的 U3 内核,但好像还是基于 Webkit 和 Trident ,还有说
是基于火狐内核。

8.浏览器渲染原理

(1)解析收到的文档,构建DOM树;
(2)解析CSS,构建CSSOM规则树;
(3)根据DOM和CSSOM构建渲染树,渲染树的节点渲染对象包含颜色,大小等属性的矩形;
(4)浏览器根据渲染器布局,确定位置,大小;
(5)绘制,调用渲染对象的paint方法进行绘制;

9. CSS 如何阻塞文档解析?(浏览器解析过程)

理论上,既然样式表不改变 DOM 树,也就没有必要停下文档的解析等待它们,然而,存在一个问题,JavaScript 脚本执行时可
能在文档的解析过程中请求样式信息,如果样式还没有加载和解析,脚本将得到错误的值,显然这将会导致很多问题。

所以如果浏览器尚未完成 CSSOM 的下载和构建,而我们却想在此时运行脚本,那么浏览器将延迟 JavaScript 脚本执行和文档
的解析,直至其完成 CSSOM 的下载和构建。也就是说,在这种情况下,浏览器会先下载和构建 CSSOM,然后再执行 JavaScript,最后再继续文档的解析。

10.如何减少回流(重排)?(浏览器绘制过程)

(1)使用 transform 替代 top

(2)不要把节点的属性值放在一个循环里当成循环里的变量

(3)不要使用 table 布局,可能很小的一个小改动会造成整个 table 的重新布局

(4)把 DOM 离线后修改。如:使用 documentFragment 对象在内存里操作 DOM

(5)不要一条一条地修改 DOM 的样式。与其这样,还不如预先定义好 css 的 class,然后修改 DOM 的 className。

11. DOMContentLoaded 事件和 Load 事件的区别?

DOMContentLoaded:初始的HTML文档被完全加载和解析完成之后触发改事件,无需等待样式、子框架的加载完成;
Load:所有资源加载完成后触发;

12. 区别?

从页面显示效果来看,被 包围的文字将会被加粗,而被 包围的文字将以斜体的形式呈现。

但是 是自然样式标签,分别表示无意义的加粗,无意义的斜体,表现样式为 { font-weight: bolder},仅仅表示「这
里应该用粗体显示」或者「这里应该用斜体显示」,此两个标签在 HTML4.01 中并不被推荐使用。

是语义样式标签。 表示一般的强调文本,而 表示比 语义更强的强调文本。

使用阅读设备阅读网页时: 会重读,而 是展示强调内容。

13.前端性能优化?

前端性能优化主要是为了提高页面的加载速度,优化用户的访问体验。我认为可以从这些方面来进行优化。

内容方面:

(1)通过文件合并、css 雪碧图、使用 base64 等方式来减少 HTTP 请求数,避免过多的请求造成等待的情况。

(2)通过 DNS 缓存等机制来减少 DNS 的查询次数。

(3)通过设置缓存策略,对常用不变的资源进行缓存。

(4)使用延迟加载的方式,来减少页面首屏加载时需要请求的资源。延迟加载的资源当用户需要访问时,再去请求加载。

(5)通过用户行为,对某些资源使用预加载的方式,来提高用户需要访问资源时的响应速度。
服务器方面:

(1)使用 CDN 服务,来提高用户对于资源请求时的响应速度。

(2)服务器端启用 Gzip、Deflate 等方式对于传输的资源进行压缩,减小文件的体积。

(3)尽可能减小 cookie 的大小,并且通过将静态资源分配到其他域名下,来避免对静态资源请求时携带不必要的 cookie

CSS 和 JavaScript 方面:

(1)把样式表放在页面的 head 标签中,减少页面的首次渲染的时间。

(2)避免使用 @import 标签。

(3)尽量把 js 脚本放在页面底部或者使用 defer 或 async 属性,避免脚本的加载和执行阻塞页面的渲染。

(4)通过对 JavaScript 和 CSS 的文件进行压缩,来减小文件的体积。

-------------本文结束&感谢您的阅读-------------