CSS类选择器中允许使用哪些字符或符号?
我知道以下字符是无效的,但是哪些字符是有效的?
~ ! @ $ % ^ & * ( ) + = , . / ' ; : " ? > < [ ] \ { } | ` #
CSS类选择器中允许使用哪些字符或符号?
我知道以下字符是无效的,但是哪些字符是有效的?
~ ! @ $ % ^ & * ( ) + = , . / ' ; : " ? > < [ ] \ { } | ` #
你可以直接查看CSS语法。
基本上1,名称必须以下划线(_
),连字符(-
)或字母(a
–z
)开头,然后可以是任意数量的连字符、下划线、字母或数字。有一个要注意的地方: 如果第一个字符是连字符,则第二个字符必须是字母或下划线,并且名称长度必须至少为2个字符。
-?[_a-zA-Z]+[_a-zA-Z0-9-]*
简而言之,上一个规则可以被翻译为以下内容,提取自W3C规范:.css
规则的选择器中)定义为“。”+标识符,并且标识符的词法扫描器规则明确允许在初始[_A-Za-z]
字符之后的类名中使用除0x00-0x7F
以外的任何字符,因此此处发布的[_a-zA-Z0-9-]*
模式是不正确的。 - DaiMathias Bynens' answer 链接到 解释 和 演示,展示如何使用这些名称。在 CSS 代码中书写时,类名可能需要转义,但这并不会改变类名。例如,一个过度转义的表示法看起来与该名称的其他表示法不同,但仍然指代相同的类名。
大多数其他(编程)语言没有转义变量名(“标识符”)的概念,因此变量的所有表示形式都必须看起来相同。但在 CSS 中不是这样的。
因此,如果您需要将随机字符串转换为 CSS 类名:注意 NUL 和空格,并进行适当的转义(针对 CSS 或 HTML)。完成。
我已经在CSS字符转义序列的文章中详细回答了你的问题。 该文章还解释了如何在CSS(和JavaScript)中转义任何字符,我还制作了一个方便的工具。 来自那个页面:
如果您给一个元素ID值为
~!@ $%^&*()_ +-=,./';:“?>< [] {} | `#
,选择器将如下所示:CSS:
<style> #\~\!\@\$\%\^\&\*\(\)\_\+-\=\,\.\/\'\;\:\"\?\>\<\[\]\\\{\}\|\`\# { background: hotpink; } </style>
JavaScript:
->JavaScript:
<script> // document.getElementById or similar document.getElementById('~!@$%^&*()_+-=,./\';:"?><[]\\{}|`#'); // document.querySelector or similar $('#\\~\\!\\@\\$\\%\\^\\&\\*\\(\\)\\_\\+-\\=\\,\\.\\/\\\'\\;\\:\\"\\?\\>\\<\\[\\]\\\\\\{\\}\\|\\`\\#'); </script>
'-' + vendor identifier + '-' + meaningful name
'_' + vendor identifier + '-' + meaningful name
示例:
例如,如果XYZ组织添加了一个属性来描述显示器东侧边框的颜色,他们可能会称其为-xyz-border-east-color。
其他已知示例:
-moz-box-sizing
-moz-border-radius
-wap-accesskey
在任何当前或未来的CSS级别中,初始破折号或下划线都保证不会用于属性或关键字。因此,典型的CSS实现可能无法识别此类属性,并根据处理解析错误的规则忽略它们。然而,由于初始破折号或下划线是语法的一部分,因此CSS 2.1实现者应始终能够使用符合CSS标准的解析器,无论它们是否支持任何供应商特定的扩展。
作者应避免使用供应商特定的扩展。
完整的正则表达式为:
-?(?:[_a-z]|[\200-\377]|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])(?:[_a-z0-9-]|[\200-\377]|\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?|\\[^\r\n\f0-9a-f])*
除了“-
”和“_
”以外,您列出的所有字符如果直接使用将不被允许。但是您可以使用反斜杠进行编码foo\~bar
或使用Unicode符号foo\7E bar
。
.000000-8{background:url(../../images/common/000000-0.8.png);} /* DOESN'T WORK!! */
转换为:
[class="000000-8"]{background:url(../../images/common/000000-0.8.png);} /* WORKS :) */
如果有多个类,您需要在选择器中指定它们或使用~=
运算符:
[class~="000000-8"]{background:url(../../images/common/000000-0.8.png);}
参考来源:
注:本文介绍了如何在ID和class名称中使用数字,以及如何使用属性选择器来选择以数字开头的类名。同时提供了一些相关的参考链接。#
和.
这样的字符。我们只需要用\
(反斜杠)进行转义即可。
.test\.123 {
color: red;
}
.test\#123 {
color: blue;
}
.test\@123 {
color: green;
}
.test\<123 {
color: brown;
}
.test\`123 {
color: purple;
}
.test\~123 {
color: tomato;
}
<div class="test.123">test.123</div>
<div class="test#123">test#123</div>
<div class="test@123">test@123</div>
<div class="test<123">test<123</div>
<div class="test`123">test`123</div>
<div class="test~123">test~123</div>
.hello/world
类:.hello\2fworld
,hello\2f world
或hello\/world
。 - wyqydsyq