HTML 中大小写的那些事
- DOCTYPE
- 标签名和属性名
- 布尔属性
- 枚举属性
- meta 标签中的 name
- meta 标签中的 http-equiv
- http-equiv="X-UA-Compatible"
- charset 是大小写不敏感的
- lang 是大小写不敏感的
- 大小写不敏感的属性值的列表
在 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 等是布尔属性,仅有两种状态,即 true 或 false。
这些属性如果设置在元素上,那么他们的值只能指定为空字符串或者该属性本身(大小写不敏感)。如:
<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 的值是大小写不敏感的(非 content,content 的值的大小写敏感性取决于相应的 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 文档中,标签名和属性名也是大小写不敏感的,因此整条语句都是大小写不敏感的。
参考:
- Specifying legacy document modes (Internet Explorer)
- consider lowercase X-UA-Compatible · Issue #1656 · h5bp/html5-boilerplate
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