在 HTML 标记语言中,有标签、属性名、属性值等许多组成部分。他们有的有大小写之别,而有的则没有。由于 HTML 标准规定所有的字符串除特别说明外都是要区分大小写的,因此这里我们就来探究一下那些没有大小写之分的部分。

DOCTYPE

DOCTYPE 是所有符合规范的 HTML 文档都所要求的。如果省略了 DOCTYPE 声明,浏览器就有可能会用兼容模式等不一定符合 HTML 标准的模式来渲染文档。

下面是 HTML5 文档的 DOCTYPE 声明的一个例子:(实例:W3C HTML5 标准

<!DOCTYPE html>

虽然上述例子中 DOCTYPE 用了大写而 html 用了小写,但是这两者都是大小写不敏感的。

如完全使用小写也是符合规范的:(实例:Google

<!doctype html>

或者完全大写:(实例:网易

<!DOCTYPE HTML>

或者也可以混合大小写:(实例:百度

<!Doctype html>

标签名和属性名

HTML 文档中的标签名和属性名都是大小写不敏感的。

而 XML 文档中的标签名和属性名都是大小写敏感的。

布尔属性

应用于 HTML 元素的一些属性如 checked, disabled, readonly, required, selected 等是布尔属性,仅有两种状态,即 truefalse

这些属性如果设置在元素上,那么他们的值只能指定为空字符串或者该属性本身(大小写不敏感)。如:

<input disabled>
<input disabled="">
<input disabled=disabled>
<input disabled="DISABLED">

对于布尔属性,实际实现中,只要被指定在元素上,就表示 true,而无论其值如何,即使值为 false, no 等,仍代表 true;而如果元素上没有指定该属性,则表示 false

枚举属性

枚举属性与布尔属性类似,不同的是,其接受一系列规范允许的关键字(大小写不敏感),每个关键字与一个状态相对应。如

  • autocomplete 接受 on(对应状态 on), off(对应状态 off), (空字符串,对应状态 on);
  • <button>type 属性接受 submit, reset, button, (空字符串,对应 submit button 状态);
  • contenteditable 接受 true, false, (空字符串,对应 true 状态), inherit(或任意其他字符串,对应 inherit 状态)。

meta 标签中的 name

meta 标签中 name 的值是大小写不敏感的(非 contentcontent 的值的大小写敏感性取决于相应的 name),如 description, keywords 等。

meta 标签中的 http-equiv

meta 标签中的 http-equiv 是枚举属性,因而其值是大小写不敏感的。

此外,http-equiv 是与 HTTP 协议中的头部字段相对应的,而 HTTP 的头部也是大小写不敏感的,因而 http-equiv 的值也自然是大小写不敏感的。(RFC 7230

http-equiv="X-UA-Compatible"

X-UA-Compatible 的名字和值都是大小写不敏感的,如以下各行都是等效的:

<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="X-UA-COMPATIBLE" content="IE=EDGE">

另外,如前文所述,在 HTML 文档中,标签名和属性名也是大小写不敏感的,因此整条语句都是大小写不敏感的。

参考:

charset 是大小写不敏感的

在 HTML 中,我们需要为页面指定编码,如

<meta charset="utf-8">

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

注意,以上两个标签不能同时存在。

上述例子中的 utf-8 或其他编码就是大小写不敏感的。

编码相关的规范可以参考 Encoding Standard | WHATWG

lang 是大小写不敏感的

lang 属性为 HTML 元素的内容和该元素的其他属性指定了语言。其值是符合 BCP 47 规范的语言标签。

由于 BCP 47 中规定语言标签是大小写不敏感的,因而 lang 属性的值也是大小写不敏感的。

大小写不敏感的属性值的列表

如前所述,HTML 中属性的名字是大小写不敏感的,而属性的值则默认是大小写敏感的。

例外的是,下述列表中的属性的值是大小写不敏感的。(其中一些已在上文中提到过。)

  • accept
  • accept-charset
  • align
  • alink
  • axis
  • bgcolor
  • charset
  • checked
  • clear
  • codetype
  • color
  • compact
  • declare
  • defer
  • dir
  • direction
  • disabled
  • enctype
  • face
  • frame
  • hreflang
  • http-equiv
  • lang
  • language
  • link
  • media
  • method
  • multiple
  • nohref
  • noresize
  • noshade
  • nowrap
  • readonly
  • rel
  • rev
  • rules
  • scope
  • scrolling
  • selected
  • shape
  • target
  • text
  • type (视情况而定)
  • valign
  • valuetype
  • vlink