1. 2.3 通用微语法
      1. 2.3.1 布尔属性
      2. 2.3.2 关键字和枚举属性
      3. 2.3.3 数字
        1. 2.3.3.1 有符号整数
        2. 2.3.3.2 非负整数
        3. 2.3.3.3 浮点数
        4. 2.3.3.4 浮点数列表
      4. 2.3.4 日期和时间
        1. 2.3.4.1 月份
        2. 2.3.4.2 日期
        3. 2.3.4.3 无年份日期
        4. 2.3.4.4 时间
        5. 2.3.4.5 本地日期和时间
        6. 2.3.4.6 时区
        7. 2.3.4.7 全局日期和时间
        8. 2.3.4.8 星期
        9. 2.3.4.9 持续时间
        10. 2.3.4.10 模糊的时间点
      5. 2.3.5 颜色
      6. 2.3.6 以空格分隔的标记
      7. 2.3.7 以逗号分隔的标记
      8. 2.3.8 引用
      9. 2.3.9 媒体查询
      10. 2.3.10 唯一内部值

2.3 通用微语法

HTML 中有多个地方接受特定的数据类型,例如日期或数字。本节描述了这些格式内容的符合性标准以及如何解析它们。

2.3.1 布尔属性

许多属性是 布尔属性。元素上存在布尔属性表示真值,而属性不存在表示假值。

如果属性存在,其值必须是空字符串或与属性规范名称进行 ASCII 不区分大小写 匹配的值,且没有前导或尾随空格。

布尔属性不允许使用“true”和“false”值。要表示假值,必须完全省略该属性。

以下是一个选中且禁用的复选框示例。 checkeddisabled 属性是布尔属性。

<label><input type=checkbox checked name=cheese disabled> Cheese</label>

这也可以等效地写成这样

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

您还可以混合样式;以下仍然等效

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

2.3.2 关键字和枚举属性

某些属性称为 枚举属性,它们具有一组有限的状态。此类属性的状态是通过组合属性的值、每个属性规范中给出的关键字/状态映射集以及规范中可能给出的两个特殊状态来派生的。这些特殊状态是 无效值默认值缺失值默认值

多个关键字可以映射到相同的状态。

空字符串可以是有效的关键字。请注意, 缺失值默认值 仅在属性缺失时适用,而不是在属性存在且值为空字符串时适用。

要确定属性的状态,请使用以下步骤

  1. 如果未指定属性

    1. 如果属性定义了 缺失值默认值 状态,则返回该 缺失值默认值 状态。

    2. 否则,不返回任何状态。

  2. 如果属性的值与属性定义的某个关键字进行 ASCII 不区分大小写 匹配,则返回该关键字表示的状态。

  3. 如果属性定义了 无效值默认值 状态,则返回该 无效值默认值 状态。

  4. 不返回任何状态。

出于创作符合性目的,如果指定了枚举属性,则属性的值必须与该属性的符合关键字之一进行 ASCII 不区分大小写 匹配,且没有前导或尾随空格。

出于 反射 目的,任何关键字都映射到的状态被称为具有 规范关键字。这通过以下方式确定

2.3.3 数字

2.3.3.1 有符号整数

如果字符串由一个或多个 ASCII 数字 组成,且可选地以 U+002D HYPHEN-MINUS 字符 (-) 为前缀,则该字符串为 有效整数

没有 U+002D HYPHEN-MINUS (-) 前缀的 有效整数 表示该数字字符串用十进制表示的数字。带有 U+002D HYPHEN-MINUS (-) 前缀的 有效整数 表示跟随 U+002D HYPHEN-MINUS 的数字字符串用十进制表示的数字,从零中减去。

2.3.3.2 非负整数

如果字符串由一个或多个 ASCII 数字 组成,则该字符串为 有效非负整数

有效非负整数 表示该数字字符串用十进制表示的数字。

2.3.3.3 浮点数

如果字符串由以下内容组成,则该字符串为 有效浮点数

  1. 可选地,一个 U+002D HYPHEN-MINUS 字符 (-)。

  2. 以下两者之一或两者,按给定顺序:

    1. 一系列一个或多个 ASCII 数字

    2. 以下两者,按给定顺序:

      1. 一个 U+002E FULL STOP 字符 (.)。

      2. 一系列一个或多个 ASCII 数字

  3. 可选地

    1. U+0065 LATIN SMALL LETTER E 字符 (e) 或 U+0045 LATIN CAPITAL LETTER E 字符 (E)。

    2. 可选地,一个 U+002D HYPHEN-MINUS 字符 (-) 或 U+002B PLUS SIGN 字符 (+)。

    3. 一系列一个或多个 ASCII 数字

有效浮点数 表示通过将有效数字乘以十的指数幂获得的数字,其中有效数字是第一个数字,解释为十进制(包括小数点和小数点后的数字,如果有的话,如果整个字符串以 U+002D HYPHEN-MINUS 字符 (-) 开头且数字不为零,则将有效数字解释为负数),指数是 E 后面的数字(如果有的话)(如果 E 和数字之间存在 U+002D HYPHEN-MINUS 字符 (-) 且数字不为零,则解释为负数,否则忽略 E 和数字之间存在的 U+002B PLUS SIGN 字符 (+))。如果没有 E,则指数视为零。

Infinity 和 Not-a-Number (NaN) 值不是 有效浮点数

2.3.3.4 浮点数列表

有效浮点数列表 是多个 有效浮点数,以 U+002C COMMA 字符分隔,没有其他字符(例如,没有 ASCII 空格)。此外,可能对可以提供的浮点数的数量或允许的值范围有限制。

2.3.4 日期和时间

在下述算法中,年份 year 中月份 month 的天数 为:如果 month 为 1、3、5、7、8、10 或 12,则为31;如果 month 为 4、6、9 或 11,则为30;如果 month 为 2 且 year 是 400 的倍数,或者 year 是 4 的倍数但不是 100 的倍数,则为29;否则为28。这考虑了公历中的闰年。 [GREGORIAN]

当本节定义的日期和时间语法中使用 ASCII 数字 时,它们表示十进制数字。

在本规范中,当提到 格里高利历推算 时,指的是现代格里高利历,将其推算到公元 1 年。 格里高利历推算 中的日期,有时明确称为 格里高利历推算日期,是指即使在当时(或地点)该历法未被使用时,也使用该历法描述的日期。 [GREGORIAN]

在本规范中使用格里高利历作为线格式是参与决策者文化偏见导致的任意选择。另请参阅讨论表单中 日期、时间和数字格式 以及 time 元素的部分。

2.3.4.1 月份

月份 由一个特定的 格里高利历推算日期 组成,没有时区信息,也没有超出年份和月份的日期信息。 [GREGORIAN]

如果字符串由以下组件按给定顺序组成,则该字符串为表示年份 year 和月份 month有效月份字符串

  1. 四个或更多 ASCII 数字,表示 year,其中 year > 0
  2. 一个 U+002D HYPHEN-MINUS 字符 (-)
  3. 两个 ASCII 数字,表示月份 month,范围为 1 ≤ month ≤ 12
2.3.4.2 日期

一个日期由一个特定的格里高利历日期组成,不包含时区信息,包括年份、月份和日期。[GREGORIAN]

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示年份year、月份month和日期day有效日期字符串

  1. 一个有效的月份字符串,表示yearmonth
  2. 一个 U+002D HYPHEN-MINUS 字符 (-)
  3. 两个ASCII数字,表示day,范围在1 ≤ day ≤ maxday之间,其中maxday月份month和年份year的天数
2.3.4.3 无年份日期

一个无年份日期由格里高利历的月份和该月中的日期组成,但不包含关联的年份。[GREGORIAN]

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示月份month和日期day有效的无年份日期字符串

  1. 可选地,两个U+002D HYPHEN-MINUS字符 (-)
  2. 两个ASCII数字,表示月份month,范围在1 ≤ month ≤ 12之间
  3. 一个 U+002D HYPHEN-MINUS 字符 (-)
  4. 两个ASCII数字,表示day,范围在1 ≤ day ≤ maxday之间,其中maxday天数,指的是月份month和任意闰年(例如4或2000)的天数

换句话说,如果month为“02”,表示二月,则日期可以为29,就像年份为闰年一样。

2.3.4.4 时间

一个时间由一个特定的时间组成,不包含时区信息,包括小时、分钟、秒和秒的小数部分。

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示小时hour、分钟minute和秒second有效时间字符串

  1. 两个ASCII数字,表示hour,范围在0 ≤ hour ≤ 23之间
  2. 一个U+003A COLON字符 (:)
  3. 两个ASCII数字,表示minute,范围在0 ≤ minute ≤ 59之间
  4. 如果second不为零,或者可选地,如果second为零
    1. 一个U+003A COLON字符 (:)
    2. 两个ASCII数字,表示second的整数部分,范围在0 ≤ s ≤ 59之间
    3. 如果second不是整数,或者可选地,如果second是整数
      1. 一个U+002E FULL STOP字符 (.)
      2. 一个、两个或三个ASCII数字,表示second的小数部分

second组件不能为60或61;无法表示闰秒。

2.3.4.5 本地日期和时间

一个本地日期和时间由一个特定的格里高利历日期组成,包括年份、月份和日期,以及一个时间,包括小时、分钟、秒和秒的小数部分,但以不带时区的方式表示。[GREGORIAN]

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示日期和时间的有效的本地日期和时间字符串

  1. 一个有效的日期字符串,表示日期
  2. 一个U+0054 LATIN CAPITAL LETTER T字符 (T)或一个U+0020 SPACE字符
  3. 一个有效的时间字符串,表示时间

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示日期和时间的有效的规范化本地日期和时间字符串

  1. 一个有效的日期字符串,表示日期
  2. 一个U+0054 LATIN CAPITAL LETTER T字符 (T)
  3. 一个有效的时间字符串,表示时间,并以给定时间的最短可能字符串表示(例如,如果给定时间为分钟后的零秒,则完全省略秒组件)
2.3.4.6 时区

一个时区偏移量由带符号的小时数和分钟数组成。

如果一个字符串由以下任一组成,则该字符串为表示时区偏移量的有效时区偏移量字符串

此格式允许时区偏移量从 -23:59 到 +23:59。目前,在实践中,实际时区的偏移量范围为 -12:00 到 +14:00,并且实际时区的偏移量的分钟组件始终为 00、30 或 45。但是,不能保证这种情况永远如此,因为时区被用作政治足球,因此受制于非常反复无常的政策决定。

有关在先于正式时区形成的历史时间中使用时区偏移量的详细信息,另请参阅下面全局日期和时间部分中的用法说明和示例。

2.3.4.7 全局日期和时间

一个全局日期和时间由一个特定的格里高利历日期组成,包括年份、月份和日期,以及一个时间,包括小时、分钟、秒和秒的小数部分,并以包含带符号的小时数和分钟数的时区偏移量表示。[GREGORIAN]

如果一个字符串由以下组件按给定顺序组成,则该字符串为表示日期、时间和时区偏移量的有效的全局日期和时间字符串

  1. 一个有效的日期字符串,表示日期
  2. 一个U+0054 LATIN CAPITAL LETTER T字符 (T)或一个U+0020 SPACE字符
  3. 一个有效的时间字符串,表示时间
  4. 一个有效时区偏移量字符串,表示时区偏移量

20世纪中叶UTC形成之前的日期中的时间必须根据UT1(格林尼治0°经线上的当代地球太阳时间)表示和解释,而不是UTC(UT1的近似值,以SI秒为单位)。在时区形成之前的时间必须表示和解释为带有显式时区的UT1时间,这些时区近似于当时适当的当地时间与在伦敦格林尼治观察到的时间之间的差异。

以下是一些作为有效的全局日期和时间字符串编写的日期示例。

"0037-12-13 00:00Z"
尼禄(罗马皇帝)生日当天使用伦敦时间的地区的午夜。有关这实际上对应于哪个日期的进一步讨论,请参见下文。
"1979-10-14T12:00:00.001-04:00"
1979年10月14日中午后一毫秒,在美国东海岸在夏令时期间使用的时区。
"8592-01-01T02:09+02:09"
8592年1月1日午夜UTC。与该时间关联的时区比UTC早两个小时九分钟,这目前不是真实的时区,但仍然允许。

这些日期值得注意的几点

2.3.4.8

一个由一个周年的编号和一个表示从星期一开始的七天时期的周数组成。在此日历系统中,每个周年都有52或53个这样的七天时期,如下所述。从1969年12月29日(1969-12-29)星期一格里高利历日期开始的七天时期定义为1970年第1周。连续的周按顺序编号。周年中第1周之前的那个星期是前一个周年的最后一周,反之亦然。[GREGORIAN]

编号为year的周年有53周,如果它对应于格里高利历中年份year的第一天(1月1日)为星期四,或者对应于格里高利历中年份year的第一天(1月1日)为星期三,并且year为400的倍数,或为4的倍数但不是100的倍数。所有其他周年都有52周。

具有53周的周年的最后一天的周数为53;具有52周的周年的最后一天的周数为52。

特定日期的周-年数可能与包含该日期的年份数不同,这在格里高利历推算中是如此。周-年y中的第一周是包含格里高利年y中第一个星期四的那一周。

出于现代目的,此处定义的星期等同于ISO 8601中定义的ISO星期。 [ISO8601]

如果一个字符串包含以下组件,并按给定顺序排列,则该字符串为表示周-年year和星期week有效星期字符串

  1. 四个或更多ASCII数字,表示year,其中year > 0
  2. 一个 U+002D HYPHEN-MINUS 字符 (-)
  3. 一个U+0057拉丁大写字母W字符(W)
  4. 两个ASCII数字,表示星期week,范围在1 ≤ week ≤ maxweek之间,其中maxweek是周-年year最后一天的星期数
2.3.4.9 时长

一个时长由一定数量的秒组成。

由于月和秒不可比较(一个月不是精确的秒数,而是一个时间段,其精确长度取决于测量的具体日期),因此本规范中定义的时长不能包含月(或年,年相当于12个月)。只能描述描述特定秒数的时长。

如果一个字符串包含以下两种情况之一,则该字符串为表示时长t有效时长字符串

2.3.4.10 更模糊的时间点

如果一个字符串也属于以下情况之一,则该字符串为带可选时间的有效日期字符串

2.3.5 颜色

一个简单颜色由三个范围在0到255(含)之间的8位数字组成,分别表示颜色的红色、绿色和蓝色分量,在'srgb'颜色空间中。

如果一个字符串正好是七个字符长,并且第一个字符是U+0023井号字符(#),其余六个字符都是ASCII十六进制数字,前两位数字表示红色分量,中间两位数字表示绿色分量,最后两位数字表示蓝色分量(以十六进制表示),则该字符串为有效简单颜色

如果一个字符串是有效简单颜色并且不使用U+0041拉丁大写字母A到U+0046拉丁大写字母F之间的任何字符,则该字符串为有效小写简单颜色


2D图形上下文具有单独的颜色语法,也处理不透明度。

2.3.6 以空格分隔的标记

一个以空格分隔的标记集是一个字符串,包含零个或多个单词(称为标记),单词之间用一个或多个ASCII空格分隔,其中单词由一个或多个字符的任何字符串组成,这些字符都不是ASCII空格

包含以空格分隔的标记集的字符串可以在开头或结尾处有ASCII空格

一个无序的唯一以空格分隔的标记集是一个以空格分隔的标记集,其中没有标记重复。

一个有序的唯一以空格分隔的标记集是一个以空格分隔的标记集,其中没有标记重复,但标记的顺序有意义。

以空格分隔的标记集有时有一组定义的允许值。当定义了一组允许值时,所有标记都必须来自该允许值列表;其他值是非标准的。如果没有提供这样的允许值集,则所有值都是标准的。

如何比较以空格分隔的标记集中的标记(例如,区分大小写或不区分大小写)是在每个集合的基础上定义的。

2.3.7 以逗号分隔的标记

一个以逗号分隔的标记集是一个字符串,包含零个或多个标记,每个标记都用单个U+002C逗号字符(,)与下一个标记分隔,其中标记由零个或多个字符的任何字符串组成,既不以ASCII空格开头也不以ASCII空格结尾,也不包含任何U+002C逗号字符(,),并且可选地用ASCII空格包围。

例如,字符串" a ,b,,d d "包含四个标记:"a"、"b"、空字符串和"d d"。每个标记周围的前导和尾随空格不计入标记的一部分,空字符串可以是一个标记。

以逗号分隔的标记集有时对构成有效标记的内容有进一步的限制。当定义了这样的限制时,所有标记都必须符合这些限制;其他值是非标准的。如果没有指定此类限制,则所有值都是标准的。

2.3.8 引用

对类型为type的元素的有效哈希名称引用是一个字符串,由一个U+0023井号字符(#)后跟一个字符串组成,该字符串与同一中类型为type的元素的name属性的值完全匹配。

2.3.9 媒体查询

如果一个字符串与媒体查询<media-query-list>生成规则匹配,则该字符串为有效媒体查询列表[MQ]

如果一个字符串匹配用户的环境,则该字符串为空字符串、仅包含ASCII空格的字符串,或者是一个根据媒体查询中给出的定义与用户环境匹配的媒体查询列表。 [MQ]

2.3.10 唯一内部值

一个唯一内部值是一个可序列化的值,可以通过值进行比较,并且永远不会暴露给脚本。

要创建一个新的唯一内部值,请返回一个唯一内部值,该值以前从未由该算法返回过。