在CSS选择器中的元素ID中处理冒号
JSF将输入字段的ID设置为search_form:expression
。我需要在该元素上指定一些样式,但是冒号看起来像是浏览器伪元素的开头,因此它被标记为无效并被忽略。反正有逃脱结肠之类的东西吗?
input#search_form:expression { ///... }
解决方案
反斜杠:
input#search_form\:expression { ///...}
- 另请参见在CSS中使用命名空间(MSDN)
我们可以使用反斜杠将其转义
input#search_form\:expression { ///... }
从CSS规范
4.1.3字符和大小写
以下规则始终成立:
除不受CSS控制的部分外,所有CSS样式表均不区分大小写。例如,HTML属性" id"和" class",字体名称和URI的值区分大小写超出了本规范的范围。特别要注意的是,元素名称在HTML中不区分大小写,而在XML中则区分大小写。
在CSS中,标识符(包括选择器中的元素名称,类和ID)只能包含字符[a-z0-9]和ISO 10646字符U + 00A1及更高版本,以及连字符(-)和下划线(_) ;它们不能以数字开头,也不能以连字符后接数字开头。标识符还可以包含转义字符和任何ISO 10646字符作为数字代码(请参阅下一项)。例如,标识符" B&W?"可以写为" B \&W \?"或者" B \ 26 W \ 3F"。
请注意,Unicode是等效于ISO 10646的逐个代码(请参见[UNICODE]和[ISO10646])。
在CSS 2.1中,反斜杠()字符表示三种类型的字符转义符。
首先,在字符串中,将忽略反斜杠和换行符(即,该字符串不包含反斜杠或者换行符)。
其次,它取消了特殊CSS字符的含义。任何字符(十六进制数字除外)都可以使用反斜杠转义以删除其特殊含义。例如," ""是一个由双引号引起来的字符串。样式表预处理器不得从样式表中删除这些反斜杠,因为这会改变样式表的含义。
第三,反斜杠转义符使作者可以引用他们不容易放入文档中的字符。在这种情况下,反斜杠后面最多包含六个十六进制数字(0..9A..F),代表具有该数字的ISO 10646([ISO10646])字符,该数字不能为零。 (在CSS 2.1中未定义,如果样式表确实包含Unicode码为零的字符,会发生什么情况。)如果在[0-9a-f]范围内的字符后跟十六进制数,则必须将数字的末尾清除。有两种方法可以做到这一点:
带有空格(或者其他空格字符):" \ 26 B"("&B")。在这种情况下,用户代理应将" CR / LF"对(U + 000D / U + 000A)视为单个空格字符。
通过提供恰好6个十六进制数字:" \ 000026B"("&B")
实际上,这两种方法可以结合使用。十六进制转义后,仅忽略一个空格字符。请注意,这意味着转义序列后的"真实"空间本身必须被转义或者加倍。
如果该数字超出Unicode允许的范围(例如," \ 110000"高于当前Unicode允许的最大10FFFF),则UA可以将转义符替换为"替换字符"(U + FFFD)。如果要显示字符,则UA应该显示可见的符号,例如"缺少字符"字形(参见15.2,第5点)。
注意:如果允许,反斜杠转义符始终被认为是标识符或者字符串的一部分(即," \ 7B"不是标点符号,即使" {"是允许的,并且在符号的开头也允许" \ 32"类别名称,即使不是" 2")。
标识符" te \ st"与" test"完全相同。
在许多版本的IE(特别是6和7;可能还有其他版本)中,在冒号前使用反斜杠不起作用。
一种解决方法是对冒号使用\ 3A的十六进制代码
例子:
input#search_formA expression { }
它适用于所有浏览器:包括IE6 +(可能还更早吗?),Firefox,Chrome,Opera等。它是CSS2标准的一部分。
我在冒号上也遇到了同样的问题,但是我无法更改它们(无法访问输出冒号的代码),我想使用带有jQuery的CSS3选择器来获取它们。
我把它放在这里,因为它可能对某人有帮助
input [id =" something:something"]
在jQuery选择器中工作正常,并且在样式表中也可能工作(可能存在浏览器问题)