我有一个href
属性的链接,其值有回车符(HTML无法更改):
<a href="
http://google.com
">Testing</a>
我原本以为在字符串中使用时可以使用反斜杠来转义回车字符(U + 000D),但是在CSS规范中读取它:
任何字符(除了十六进制数字,换行符,回车符或换页符)都可以使用反斜杠进行转义,以消除其特殊含义。例如,“\”“是由一个双引号组成的字符串。
这可能吗?我尝试过使用\a
和\n
,但没有任何运气。
答案 0 :(得分:7)
您拥有的选择器不起作用的原因:
a[href="\
http://google.com\
"]
是因为:
首先,在字符串中,将忽略后跟换行符的反斜杠(即,该字符串被认为不包含反斜杠或换行符。)在字符串外,反斜杠后跟换行代表自己(即DELIM后跟换行符)。
上面的段落中提到了section 4.1.3引用的段落,以及为什么它表示换行是无法使用反斜杠转义的字符之一。
这使它等同于以下选择器:
a[href=" http://google.com"]
如果其元素值不包含任何换行符,则只匹配您的元素。
也就是说, 实际上可以通过包含换行符的属性值来匹配元素。但是,CSS使这有点复杂:
要在CSS字符串中表示换行符,您需要使用\a
转义序列(不区分大小写,最多6个十六进制数字)。这在section 4.3.7中说明了字符串(无论是在属性值还是属性选择器中都被视为相同):
字符串不能直接包含换行符。要在字符串中包含换行符,请使用表示ISO-10646(U + 000A)中换行符的转义符,例如“\ A”或“\ 00000a”。这个字符代表CSS中“newline”的一般概念。
\n
在CSS中没有特殊含义;事实上,它与n
相同。
如果空格直接跟随转义序列(如\a
),则该空格必须加倍,以便可以使用直接跟在转义序列后面的空格字符。再次参阅4.1.3节,其中说明:
十六进制转义后,只会忽略一个空格字符。请注意,这意味着转义序列之后的“真实”空格必须加倍。
这可能就是为什么即使使用\a
也无法让它工作的原因。可以理解,这是一个令人难以置信的模糊规则,尤其是在使用空格字符时。
这会产生以下选择器with the styles applying correctly:
a[href="\a http://google.com\a"]
请注意,第一个\a
和网址之间有五个空格字符,而相比之下,HTML中的换行符后面只有四个空格。
答案 1 :(得分:3)
您可以使用~
([attr~=value]
):
表示属性名称为
attr
的元素,其值为以空格分隔的单词列表,其中一个单词恰好是“value”。
a[href~="http://google.com"] {
text-decoration: none;
padding-left: 50px;
}