所谓元信息,是指描述自身的信息,元信息类标签,就是 HTML 用于描述文档自身的一类标签,它们通常出现在 head 标签中,一般都不会在页面被显示出来。

元信息多数情况下是给浏览器、搜索引擎等机器阅读的,有时候这些信息会在页面之外显示给用户,有时候则不会。

head 标签

head 标签规定了自身必须是 html 标签中的第一个标签,它的内容必须包含一个 title ,并且最多只能包含一个 base 。如果文档作为 iframe ,或者有其它方式指定了文档标题时,可以允许不包含 title 标签。

title 标签

title 标签标识文档的标题。

heading 和 title 两个标签的区别是:
title 作为元信息,可能会被用在浏览器收藏夹、微信推送卡片、微博等各种场景,这时候往往是上下文缺失的,所以 title 应该是完整地概括整个网页内容的。
而 h1 则仅仅用于页面展示,它可以默认具有上下文,并且有链接辅助,所以可以简写,即便无法概括全文,也不会有很大的影响。

base 标签

base 标签实际上是个历史遗留标签。它的作用是给页面上所有的 URL 相对地址提供一个基础。

base 标签最多只有一个,它改变全局的链接地址,它是一个非常危险的标签,容易造成跟 JS 的配合问题,所以在实际开发中,建议使用 JS 来代替 base 标签。

meta 标签

meta 标签是一组键值对,它是一种通用的元信息来表示标签。

在 head 中可以出现任意多个 meta 标签。一般的 meta 标签由 name 和 content 两个属性定义。 name 表示元信息的名, content 则用于表示元信息的值。

  1. <meta name=application-name content="IsForums">

这个标签表示页面所在的 web-application ,名为 IsForums 。

http 标准规定了一些 name 作为大家使用的共识,也鼓励大家法命自己的 name 来使用。

具有 charset 属性的 meta

从 HTML5 开始,为了简化写法, meta 标签新增了 charset 属性。添加了 charset 属性的 meta 标签无需再有 name 和 content。

  1. <meta charset="UTF-8">

charset 型 meta 标签非常关键,它描述了 HTML 文档自身的编码形式。因此,建议这个标签放在 head 的第一个。

具有 http-equiv 属性的 meta

具有 http-equiv 属性的 meta 标签,表示执行一个命令,这样的 meta 标签可以不需要 name 属性了。

例如,下面一段代码,相当于添加了 content-type 这个 http 头,并且指定了 http 编码方式。

  1. <meta http-equiv="content-type" content="text/html; charset=UTF-8">

除了 content-type ,还有以下几种命令:

  • content-language 指定内容的语言;
  • default-style 指定默认样式表;
  • refresh 刷新;
  • set-cookie 默认 http 头 set-cookie,设置 cookie;
  • x-ua-compatible 模拟 http 头 x-ua-campatible ,声明 ua 兼容性;
  • content-security-policy 模拟 http 头 content-security-policy ,声明内容安全策略。
  • expires 设定网页的到期时间。<meta http-equiv="expires" content="0">
  • Pragma 设定禁止浏览器从本地机的缓存中调阅页面内容。 <meta http-equiv="Pragma" content="no-cache">
  • cache-control <meta http-equiv="cache-control" content="no-cache">

    name 为 viewport 的 meta

    name 为 viewport 的 meta ,它的 content 是一个复杂结构,使用逗号分隔的键值对,键值对的格式是 key=value。
    例如:

    1. <meta name="viewport" content="width=500, initial-scale=1">

    这里只指定了两个属性,宽度和缩放,实际上,viewport 能控制得更多,它能表示的全部属性如下:

  • width:页面宽度,为一个正整数,或字符串 device-width,表示跟设备宽度相等。

  • height:页面高度,可以取值具体的数字,也可以是 device-height,表示跟设备高度相等,很少使用。
  • initial-scale:设置页面的初始缩放比例,为一个数字,可以带小数
  • minium-scale:允许用户的最小缩放比例,为一个数字,可以带小数
  • maximum-scale:允许缩放的最大比例,为一个数字,可以带小数
  • user-scalable:是否允许用户进行缩放,值为 no 或 yes

此外,在安卓中还支持 target-densitydpi 这个私有属性,它表示目标设备的密度等级,作用是决定 css 中的 1px 代表多少物理像素。

  • target-densitydpi:值可以为一个数值或 high-dpi、medium-dpi、low-dpi、device-dpi 这几个字符串中的一个

    特别说明的是,当 target-densitydpi=device-dpi 时,css 中的 1px 会等于物理像素中的 1px 。 因为这个属性只有安卓支持,并且安卓已经决定要废弃这个属性了,所以这个属性要避免进行使用。

其它预定义的 meta

在 HTML 标准中,还定义了一批 meta 标签的 name,可以视为一种有约定的 meta。

  • application-name:如果页面是 Web application,用这个标签表示应用名称。
  • author:页面作者。
  • description:页面描述,这个属性可能被用于搜索引擎或者其它场合。
  • generator:生成页面所使用的工具,主要用于可视化编辑器,如果是手写 HTML 的网页,不需要加这个 meta。
  • keywords:页面关键字,对于 SEO 场景非常关键。
  • referrer:跳转策略,是一种安全考量。
  • theme-color:页面风格颜色,实际并不会影响页面,但是浏览器可能据此调整页面之外的 UI。

参考资料:

  • 重学前端 —— 第15课,HTML元信息类标签