CSS 类名中广泛支持哪些字符?

Posted

技术标签:

【中文标题】CSS 类名中广泛支持哪些字符?【英文标题】:What characters are widely supported in CSS class names? 【发布时间】:2011-02-06 17:06:15 【问题描述】:

如here 等处详述,html/css 类名中唯一有效的字符是 a-z、A-Z、0-9、连字符和下划线,并且第一个字符应该是字母。但实际上,大多数浏览器实际上支持哪些字符?更具体地说,我想知道哪些浏览器可以正确理解类名中的斜杠 (/),以及哪些浏览器支持以数字开头的类名。

我主要感兴趣的是获得 html 而不是 xhtml 的答案,以防有区别。

谢谢。

【问题讨论】:

你刚才不是说“a-z, A=Z, 0-9, =, _”吗? 这些是有效字符,但实际上至少某些浏览器也支持其他字符。我想知道除了有效字符(如果有的话)之外,哪些字符可以可靠地使用。 为什么不直接打开记事本测试一下... 为什么还要考虑使用无效的类名? 有时在开头使用数字或斜线或其他字符只是命名类的最自然方式,因此例如在开头添加字母可能会损害类的可读性标记很多。 【参考方案1】:

请注意,类名是由 HTML 而非 CSS 定义的。 HTML4 saysclass 属性是一个cdata-list,它是空格分隔的标记。因此,单个类名标记可以包含除空白字符之外的任何字符。

我想知道哪些浏览器可以正确理解类名中的斜杠 (/),以及哪些浏览器支持以数字开头的类名。

要在 CSS 类选择器中引用此类名称,您需要使用转义。例如:

<div class="1blah/bläh">

匹配:

.\31 blah\2F bläh  ... 

当前所有浏览器都支持此功能。 IE5 不支持它,但幸运的是,这不再是一个问题。 (如果您担心字符编码不匹配,您可能更愿意将 ä 编码为 \E4,但这并不是 CSS 本身的限制。)

如果您询问哪些浏览器可以让您摆脱无效的选择器

.1blah/bläh

那么,谁在乎呢?只需使用有效的。

【讨论】:

+1,我很想再给你一个单独的最后一行! 有效的类名由 CSS 定义的。但在 HTML 中也有效的只是其中的一个子集。请注意,CSS 是一种样式表语言,可用于任何结构化语言,而不仅仅是 HTML。 谢谢 bobince,这为我解决了问题!我最初将这个问题命名为“HTML 类名中广泛支持哪些字符?”但有人将“HTML”更改为“CSS”。在这种情况下,对我来说重要的是让 HTML 可读而不冒问题,所以这很有帮助。在这种情况下,IE5 中断可能不是问题。谢谢! 啊,我明白了。 [是的,XHTML 和 FWIW 基本上没有区别。] 所以class="a1&lt;2" 有效吗?【参考方案2】:

http://www.w3.org/TR/2008/REC-CSS2-20080411/syndata.html

如果你看一下语法,你就会明白标识符被定义为

ident       nmstartnmchar*
nmstart     [a-zA-Z]|nonascii|escape
nmchar      [a-z0-9-]|nonascii|escape
nonascii    [^\0-\177]
unicode     \\[0-9a-f]1,6[ \n\r\t\f]?

所以这是你的答案..

(这是针对 CSS2 的)

【讨论】:

这并没有解释实际支持哪些字符或序列。是否支持.foo\ bar.\/.\1234【参考方案3】:

Unicode 工作 http://snook.ca/archives/html_and_css/unicode_for_css_class_names

【讨论】:

【参考方案4】:

/ 和其他符号用作 选择器(尤其是在 CSS3 中),因此不能在类名中使用。支持的字符是你已经说过的。

【讨论】:

以上是关于CSS 类名中广泛支持哪些字符?的主要内容,如果未能解决你的问题,请参考以下文章

哪些字符在 CSS 类名/选择器中有效?

Node + React - 带连字符的 CSS 类名

当类名是字符串时,React 不读取 css

twitter bootstrap 支持的转换类名是啥?

CSS 类名的单词连字符:下划线还是连接符?

php 检测当前MODX资源是否在预定义的“部分”列表中,如果是,则返回字符串(例如CSS类名)。