HTML
关于 HTML 的一些总结, 持续更新中……
HTML 常见理解
1、语义化标签
语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化)。 通俗来讲就是用正确的标签做正确的事情。
常见的语义化标签:
<header></header>
<!-- 头部 -->
<nav></nav>
<!-- 导航栏 -->
<section></section>
<!-- 区块(有语义化的div) -->
<main></main>
<!-- 主要区域 -->
<article></article>
<!-- 主要内容 -->
<aside></aside>
<!-- 侧边栏 -->
<footer></footer>
<!-- 底部 -->
语义化的优点如下:
- 对机器友好,带有语义的文字表现力丰富,更适合搜索引擎的爬虫爬取有效信息,有利于 SEO。除此之外,语义类还支持读屏软件,根据文章可以自动生成目录;
- 对开发者友好,使用语义类标签增强了可读性,结构更加清晰,开发者能清晰的看出网页的结构,便于团队的开发与维护。
2、src 和 href 的区别
src 和 href 都是用来引用外部的资源,它们的区别如下:
src: 表示对资源的引用,它指向的内容会嵌入到当前标签所在的位置。src会将其指向的资源下载并应⽤到⽂档内,如请求 js 脚本。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执⾏完毕,所以⼀般 js 脚本会放在页面底部。href: 表示超文本引用,它指向一些网络资源,建立和当前元素或本文档的链接关系。当浏览器识别到它他指向的⽂件时,就会并⾏下载资源,不会停⽌对当前⽂档的处理。 常用在 a、link 等标签上。
3、script 标签中defer 和 async 的区别
script 标签中 defer 和 async 的区别 如果没有 defer 或 async 属性,浏览器会立即加载并执行相应的脚本。它不会等待后续加载的文档元素,读取到就会开始加载和执行,这样就阻塞了后续文档的加载。
defer 和 async 属性都是去异步加载外部的 JS 脚本文件,它们都不会阻塞页面的解析,其区别如下:
- 执行顺序: 多个带
async属性的标签,不能保证加载的顺序;多个带defer属性的标签,按照加载顺序执行; - 脚本是否并行执行:
async属性,表示后续文档的加载和执行与 js 脚本的加载和执行是并行进行的,即异步执行;defer属性,加载后续文档的过程和 js 脚本的加载(此时仅加载不执行)是并行进行的(异步),js 脚本需要等到文档所有元素解析完成之后才执行,DOMContentLoaded事件触发执行之前。
注 从改变脚本处理方式上看,
async属性与defer类似。当然,它们两者也都只适用于外部脚本,都会告诉浏览器立即开始下载。不过,与 defer 不同的是,标记为 async 的脚本并不保证能按照它们出现的次序执行。给脚本添加 async 属性的目的是告诉浏览器,不必等脚本下载和执行完后再加载页面,同样也不必等到该异步脚本下载和执行后再加载其他脚本。执行时其实也是异步的,谁先下载完,谁先执行,所以执行阶段的顺序会很随机,所以 async 属性的 script 中最好不要在这个阶段操作 DOM 元素。
4、常见的 meta 标签
meta 标签由 name 和 content 属性定义,用来描述网页文档的属性,比如网页的作者,网页描述,关键词等,除了 HTTP 标准固定了一些 name 作为大家使用的共识,开发者还可以自定义 name 。
常用的 meta 标签:
<!-- charset,用来描述HTML文档的编码类型: -->
<meta charset="UTF-8" />
<!-- keywords,页面关键词: -->
<meta name="keywords" content="关键词" />
<!-- description,页面描述: -->
<meta name="description" content="页面描述内容" />
<!-- refresh,页面重定向和刷新: -->
<meta http-equiv="refresh" content="0;url=" />
<!-- viewport,适配移动端,可以控制视口的大小和比例: -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<!-- 搜索引擎索引方式: -->
<meta name="robots" content="index,follow" />
其中,viewport 的 content 参数有以下几种:
- width viewport :宽度(数值/device-width)
- height viewport :高 度(数值/device-height)
- initial-scale :初始缩放比例
- maximum-scale :最大缩放比例
- minimum-scale :最小缩放比例
- user-scalable :是否允许用户缩放(yes/no)
这里有一个衍生的问题: 怎么处理移动端 1px 渲染成 2px 问题 局部处理:
- mate 标签中的 viewport 属性 initial-scale 设置为 1,
- rem 按照设计稿标准走,外加利用 initial-scaletransfrome 的设置为 1scale(0.5) 缩小一倍即可;
全局处理
- mate 标签中的 viewport 属性 initial-scale 设置为 1
- 使用 rem 按照设计稿开发
其中,搜索 robots 的 content 参数有以下几种:
- all:文件将被检索,且页面上的链接可以被查询;
- none:文件将不被检索,且页面上的链接不可以被查询;
- index:文件将被检索;
- follow:页面上的链接可以被查询;
- noindex:文件将不被检索;
- nofollow:页面上的链接不可以被查询。