一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情
语义化结构标签
在以前的网页编写结构的时候,我们可能会经常使用<div class="header">,<div class="section">等类似的形式
来定义我们网站的基本结构,但是这些都使用了的是div,其是不利于我们的SEO的
为此在HTML5中,针对这种情况,提供了对应的语义化标签
| 标签 | 作用 |
|---|---|
<header> | 定义网页的头部元素 |
<nav> | 定义网页的导航元素 |
<section> | 定于文档某一个区域的元素 |
<article> | 定于网页内容的元素 --- 一般是用来定义一些文本内容 |
<aside> | 定义网页侧边栏的元素 |
<footer> | 定义网页页脚的元素 |
所有的html5新增元素本质上就是一个有语义化的div元素,所以他们都是块级元素
HTML5新增元素的好处:
- 有利于网页的语义化
- 有利于SEO,便于搜索引擎解析我们的网页内容
多媒体标签
Web端事实上一直希望可以更好的嵌入音频和视频, 特别是21世纪以来, 用户带宽的不断提高, 浏览器因为和视频变得非常容易
在HTML5之前是通过flash或者其他插件实现的, 但是flash插件无法很好的支持HTML/CSS特性,且存在比较大的兼容性问题
为此HTML5提供了对应的多媒体标签
| 标签名 | 说明 |
|---|---|
<audio> | 音频标签 |
<video> | 视频标签 |
video
HTML <video> 元素 用于在HTML中嵌入媒体播放器,用于支持文档内的视频播放
<video>是一个行内替换元素
<!--
默认情况下,video会显示第一帧的内容
默认情况下,video没有控制条,所以其表现行为和image一致
-->
<video src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>
<!-- poster属性用于设置视频的海报 --- 其会作为视频为播放时候的起始帧 -->
<video src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" poster="./images/avatar.jpg" controls></video>
在实际开发中,视频的格式是多种多样的,每个视频都会有自己的格式, 但浏览器的video标签并非支持所有的视频格式,所以有的时候我们需要使用video标签的兼容性写法,也就是为其添加对应的fallback source
<!-- HTML5中 video标签的兼容性写法 -->
<video controls>
<!--
使用source定义我们的视频资源列表
浏览器会从上往下,依次去尝试使用对应的资源进行播放
并使用第一个可以播放的,也就是兼容的那个资源作为视频源
ps: 写了source后,video标签上不需要在写src属性
如果浏览器写了src属性,浏览器将不再检测source中配置的资源,而是仅仅使用src中配置的对应的视频资源
-->
<!--
avi --- Audio Video Interleaved --- windows
特点: 兼容性较好,画质清晰, 但是体积较大
-->
<source src="./videos/1.avi">
<!--
wmv --- 微软为Windows Media Player设置的视频格式 --- windows
-->
<source src="./videos/2.wmv">
<!--
mov --- 苹果为QuickTimePlayer设置的视频格式 --- mac/ios
可以跨平台,体积较小,画质清晰
-->
<source src="./videos/5.mov">
<!--
MP4 --- MPEG-4 --- 目前使用最为广泛的视频格式 --- mac/ios/windows
-->
<source src="./videos/4.mp4">
<!-- 当浏览器不支持video标签的时候,会显示如下内容 --- 可以使用任何的合法的html标签来表示提示信息 -->
<p>您当前的浏览器不支持video标签,请升级浏览器后重试</p>
</video>
video标签常见的属性
| 属性名 | 说明 | 备注 |
|---|---|---|
| src | 使用的URL地址 | 可以使用source标签代替 |
| width | 视频的宽度 | 单位是pixel |
| height | 视频的高度 | 单位是pixel |
| controls | 是否显示控制栏,包括音量,跨帧,暂停/恢复播放 | boolean类型值 |
| autoplay | 是否视频自动播放 | boolean类型值 |
| muted | 是否静音播放 | boolean类型值 |
| preload | 是否需要预加载视频 | 默认值为auto |
| poster | 海报的URL地址 | 视频未播放的时候显示的海报图片 |
ps: 对于目前绝大多数浏览器,单独设置autoplay属性,并不可以使视频自动开始播放
这是因为浏览器在解析video标签的时候,规定为了给用户一个更好的交互体验,
页面中的视频必须由用户主动进行播放或者自动静音播放
所以如果希望video可以自动播放,那么在添加autoplay属性后,还需要添加上muted属性
或者使用JavaScript来模拟用户的点击播放行为
preload属性的可选值
| 值 | 说明 |
|---|---|
| none | 页面加载后,不需要提前去加载(缓存)对应的视频 |
| auto | 页面加载后,由浏览器来决定需要预先加载那些视频内容 --- 默认值 |
| metadata | 页面加载后,不去加载对应的视频 但是需要加载例如视频时长, 第一帧信息,视频尺寸大小等视频元数据信息 |
audio
HTML <audio> 元素用于在文档中嵌入音频内容, 和video的用法非常类似
和video标签一样,audio标签其也是一个行内替换元素
| 属性名 | 说明 | 备注 |
|---|---|---|
| src | 音频播放的URL地址 | URL地址 |
| controls | 是否显示控制栏, 包括音量,进度,暂停/恢复播放 | boolean类型值 |
| autoplay | 音频是否自动播放 | boolean类型值 |
| muted | 音频是否静音播放 | boolean类型值 |
| preload | 是否需要预加载音频 | none/metadata/auto 默认值为auto 值的含义和用法与video一致 |
<!--
默认情况下,audio标签在页面上什么都不会展示
因为其默认不显示控制台,如果需要显示需要加上controls属性
和video标签不同的是,即使设置了muted属性,audio的autoplay属性依旧不会起作用
对于audio标签,如果需要播放,那么需要用户手动进行点击或者模拟用户的点击行为
-->
<audio src="./audios/yhbk.mp3" controls autoplay muted></audio>
<!-- 和video标签一样,audio标签也存在对应的兼容性写法 -->
<audio controls>
<!-- 音频也有很多格式,其中最常见的格式为mp3格式 -->
<source src="https://dl.espressif.com/dl/audio/ff-16b-2c-44100hz.ogg">
<source src="./audios//yhbk.mp3">
<p>当前浏览器不支持audio标签,请更新浏览器后重试</p>
</audio>
input的扩展内容
HTML5中对input的属性进行了扩展
<!-- 日期 --- 年/月/日 -->
<input type="date">
<!-- 时间 --- 时:分 -->
<input type="time">
<!-- color picker -->
<input type="color">
<!-- 唤起数字键盘 --- 需要在手机端尝试 -->
<input type="tel">
<!-- 用于输入邮箱 --- 需要在手机端尝试 -->
<input type="email">
<!-- 文件选择框 -->
<input type="file">
<!-- 只能输入数字的input -->
<input type="number">
<!--
滑动块
最小的时候值为min所设置的值
最大的时候只为max所设置的值
-->
<input type="range" min="0" max="1000">
<!-- 用于进行搜索的input 在输入内容后 右侧会有个小叉 可以进行重置 -->
<input type="search">
<!-- 用于输入密码的输入框 输入的内容会被转换为小圆点 -->
<input type="password">
data-*
在HTML5中, 新增一种全局属性的格式 data-*, 用于自定义数据属性
data设置的属性可以在JavaScript的DOM操作中通过dataset轻松获取到, 通常用于HTML和JavaScript数据之间的传递
<!--
使用data-* 来定义用户自定义属性
使用data- 开头用于区分 html属性和用户自定义属性
如果浏览器解析到data-开头的属性,会知道是用户自定义的属性
浏览器会跳过并交由Js脚本来进行解析和使用
ps: 如果出现同名的data-*属性,只会有第一个属性生效,后一个属性并不会覆盖前一个属性所对应的值
-->
<div id="box" data-name="klaus" data-age="24"></div>
<script>
const boxEl = document.getElementById('box')
console.log(boxEl.dataset)
/*
1. 在使用JavaScript进行获取的时候,会自动将data-进行移除
2. 获取的值的数据类型都是字符串类型
=>
{
age: "24",
name: "klaus"
}
*/
</script>
浏览器前缀
有时候可能会看到有些CSS属性名前面带有:-o-、-xv-、-ms-、mso-、-moz-、-webkit-
-o-transform: translate(100px);
-ms-transform: translate(100px);
-moz-transform: translate(100px);
-webkit-transform: translate(100px);
这些内容被称之为 vendor-specific extensions(供应商特定扩展 或被称之为浏览器前缀 或浏览器私有前缀)
在一个CSS属性被确认到正式成为标准,期间需要经过很多阶段,需要很长的时间
在这个过程中,这个css属性的属性名和属性值可能会发生改变,功能可能会发生改变,甚至可能会被移除
在浏览器某一个版本发布的时候,某一些css属性并没有正式成为标准,但是开发者想要尝试去使用这些属性的时候
就需要为这些css属性或css属性值添加上对应的浏览器前缀, 以标识这是一个在当前浏览器版本发布的时候,
还没有正式成为W3C标准的css属性或css属性值
浏览器在解析这些有浏览器前缀的属性的时候,按照如下规则来进行解析:
- 如果该属性在后期被移除,那么该属性会自动失效,表现效果和没有设置一致
- 如果该属性功能或名称发生了改变,那么该属性解析的时候,会自动解析为最新的功能或者使用最新的名称来进行解析
- 如果该属性已经成为了正式版,那么该属性会自动被映射为标准中对应的值,并按照标准中定义的规则来进行解析
常见的浏览器前缀有:
| 前缀值 | 浏览器 |
|---|---|
| -o- | Opera |
| -ms- | IE, edge |
| -moz- | FireFox |
| -webkit- | Safari、Chrome |
在实际开发中,对应的浏览器前缀并不需要我们手动进行添加
类似于webpack等之类的打包工具会集成类似于browserslist和postcss之类的工具
通过browserslist,我们可以设置我们所需要兼容的浏览器版本
通过postcss,我们可以自动去caniuse上去查找那些属性需要添加上对应的浏览器前缀
并自动为我们进行添加上对应的浏览器前缀
代码规范和编写顺序
在进行css属性编写的时候,推荐使用如下顺序进行编写:
- 确定盒子布局方式的css属性
- 例如: position, float, display等
- 确定盒子的特性和可见性等属性
- 例如: opacity, display等
- 盒子模型相关属性
- 例如 padding, margin, width,height,border等
- 文本,文字,背景相关属性
- 例如: background, font, font-size, color等
- 其它的一些装饰性属性
- 例如: transform, animation, overflow等
在css中如果定义的样式属性中存在多个单词,如果定义的样式是局部样式,那么推荐使用中划线进行分割,例如 .left-item
但是如果定义的样式是全局样式,那么推荐使用下划线进行分割,例如.left_item或者使用中划线进行分割,但是在最前面多加一个中划线,例如 .-left-item
meta标签
我们时常在head标签中定义一些元数据,也就是那些用来对网页进行配置的信息。如样式,脚本,标题等
有些元数据,我们有对应的语义化元素,如link元素,title元素,script元素等
但是有一些元数据在定义的时候,我们找不到对应的合适的语义化标签,
此时我们就可以使用meta来定义那些不能使用其他定元相关(meta-related)元素定义的任何元数据信息
meta可以定义的元数据主要有以下三种类型:
| 类型 | 说明 |
|---|---|
| charset | 进行一个字符集声明,告诉文档使用哪种字符编码 |
| http-equiv | 定义编译指令 (equiv 是equivalent 相等的 的简写) |
| name | 提供的是文档级别(document-level)的元数据,应用于整个页面 |
<head>
<!-- 定义文档编码格式为 UTF-8 -->
<meta charset="UTF-8">
<!--
用来控制IE的渲染行为
在IE浏览器中,尽可能使用最高的渲染模式进行渲染
如果可以使用Edge浏览器内核进行渲染的话,就使用edge浏览器对应的blink内核进行渲染
-->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- 设置视口 -->
<meta name="viewport" content="width=100%, initial-scalable=1.0">
<!-- 设置那些页面可以被爬虫所获取 all表示的是所有的页面 -->
<meta name="robots" content="all">
<!-- 网页作者 -->
<meta name="author" content="Klaus">
<!--
使用简短的语句对网页进行描述
1. SEO会读取这些信息对网页进行描述
2. FireFox会将这些描述内容作为书签的内容,Chrome是网页的标题作为书签的内容
-->
<meta name="description" content="这里是对网页的简短描述">
<!--
设置网页的关键字,编译SEO爬虫来进行读取和识别
content中,多个值之间使用逗号进行分割
-->
<meta name="keywords" content="meta,html,webpage">
<!-- 告诉SEO,当前网页会运行在那些设备上 -->
<meta name="applicable-device" content="pc,mobile">
<!-- 告诉双内核浏览器,例如360浏览器,在渲染页面的时候,使用webkit来进行渲染 -->
<meta name="renderer" content="webkit">
<!--
以下三行可以用来禁止,某些版本的iphone对手机号,地址,邮箱 进行默认功能的设置
默认设置为 添加上对应的样式,并且点击后可以进行特定的行为
例如: 手机号添加上默认的样式,并且点击后可以进行拨号
no -- 禁止 yes -- 允许(默认值)
-->
<meta name="format-detection" content="telephone=no">
<meta name="format-detection" content="email=no">
<meta name="format-detection" content="address=no">
<!-- 上述三行可以简写为 -->
<meta name="format-detection" content="telephone=no,email=no,adress=no">
<!-- 有些meta是自定义的,以便于自己在某些场景下进行使用 -->
<meta name="x-version" content="6.3.2">
<!-- 有些meta是为某些特定搜索引擎所指定的 -->
<meta name="baidu-site-verification" content="6zFCAGAmfZ">
<title>这里是网页的标题</title>
<!--
link标签的ref属性的值为alternative时
表示该网站是当前网站的备用域名
也就是告诉SEO引擎,如果这两个网站指向同一个页面
如果其中一个页面无法打开,可以尝试使用另外一个域名地址
-->
<link rel="alternate" href="https://www.example/m/">
</head>
favicon图标
Favicon是favorites icon的缩写,亦被称为website icon(站点图标)、page icon(页面图标)
<!--
设置站点图表
如果网站在head中设置了站点图标,那么浏览器会使用用户自己在head中设置的站点图标
如果用户没有设置站点图标,那么浏览器会使用当前网站根目录下的favicon.ico
所以推荐即在页面的head中显示声明当前网站的站点图标
同时将网站的站点图标放置在当前网站的项目根目录下
-->
<!-- <link rel="icon" href="./favicon.png"> -->
<!-- 兼容性写法 -->
<!-- 代码片段 -> link:favicon -->
<!-- 新增的rel类型shortcut 和 新增类型 type="image/x-icon" 都是为了兼容早期IE浏览器 -->
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
CSS字符编码
在样式表中有多种方法去声明字符编码,浏览器会按照以下顺序尝试下边的方法(一旦找到就停止并得出结果)
- 文件的开头的 Unicode byte-order(字节顺序标记) 字符值 --- 也就是文件编码中的标识符
- 在HTTP的响应头中使用charset响应头声明的编码方式
- CSS中使用@charset声明的编码方式
- 如果没有设置css文件的编码格式,那么使用默认的编码格式,即为UTF-8
/* 该声明语句依旧是一句css样式,所以需要使用分号来进行结尾 */
@charset 'UTF-8';