@charset

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

@charset CSS 规则指定样式表中使用的字符编码。当在某些 CSS 属性(如 content)中使用非 ASCII 字符时,此语法非常有用。尽管 @charset 中的第一个字符是 @ 符号,但它不是一个 at-rule。它是一个特定的字节序列,只能放置在样式表的开头。除了 Unicode 字节顺序标记之外,不允许在其前面出现其他字符。它也不遵循正常的 CSS 语法规则,例如引号或空白的使用。

如果 @charset 未被识别为字符集声明,则它会被解析为一个普通的 at-rule。CSS 语法模块废弃了这种回退行为,将其定义为当样式表进行语法检查时应丢弃的无法识别的旧规则。

由于有多种方法可以定义样式表的字符编码,浏览器将按以下顺序尝试以下方法(并在其中一种方法产生结果时立即停止):

  1. 文件开头放置的 Unicode 字节顺序字符的值。
  2. Content-Type: HTTP 头部的 charset 属性或用于提供样式表的协议中的等效属性所赋的值。
  3. @charset CSS 声明。
  4. 使用引用文档定义的字符编码:<link> 元素的 charset 属性。此方法已过时,不应使用。
  5. 假定文档为 UTF-8。

语法

css
@charset "UTF-8";
@charset "iso-8859-15";

参数

字符集

一个 <string>,表示要使用的字符编码。它必须是 IANA 注册表中定义的网络安全字符编码的名称,并且必须用双引号括起来,紧跟一个空格字符 (U+0020),并立即以分号终止。如果多个名称与一个编码相关联,则只能使用标记为首选的名称。

正式语法

请注意,@charset 规则不是通过语法解析的,而是通过以下形式的特定字节序列解析的:

@charset "<charset>";

示例

有效和无效的字符集声明

css
@charset "UTF-8"; /* Set the encoding of the style sheet to Unicode UTF-8 */
css
@charset 'iso-8859-15'; /* Invalid, wrong quotes used */
@charset  "UTF-8"; /* Invalid, more than one space */
 @charset "UTF-8"; /* Invalid, there is a character (a space) before the declarations */
@charset UTF-8; /* Invalid, the charset is a CSS <string> and requires double-quotes */

规范

规范
CSS 语法模块第 3 级
# at-ruledef-charset

浏览器兼容性

另见