CSS属性选择器:如何在属性值中转义换行符?

时间:2013-12-02 21:44:47

标签: css escaping css-selectors

我有一个href属性的链接,其值有回车符(HTML无法更改):

<a href="
    http://google.com
">Testing</a> 

我原本以为在字符串中使用时可以使用反斜杠来转义回车字符(U + 000D),但是在CSS规范中读取它:

  

任何字符(除了十六进制数字,换行符,回车符或换页符)都可以使用反斜杠进行转义,以消除其特殊含义。例如,“\”“是由一个双引号组成的字符串。

这可能吗?我尝试过使用\a\n,但没有任何运气。

http://jsfiddle.net/AHuvh/1/

2 个答案:

答案 0 :(得分:7)

您拥有的选择器不起作用的原因:

a[href="\
    http://google.com\
"]

是因为:

  

首先,在字符串中,将忽略后跟换行符的反斜杠(即,该字符串被认为不包含反斜杠或换行符。)在字符串外,反斜杠后跟换行代表自己(即DELIM后跟换行符)。

上面的段落中提到了section 4.1.3引用的段落,以及为什么它表示换行是无法使用反斜杠转义的字符之一。

这使它等同于以下选择器:

a[href="    http://google.com"]

如果其元素值不包含任何换行符,则只匹配您的元素。

也就是说, 实际上可以通过包含换行符的属性值来匹配元素。但是,CSS使这有点复杂:

  1. 要在CSS字符串中表示换行符,您需要使用\a转义序列(不区分大小写,最多6个十六进制数字)。这在section 4.3.7中说明了字符串(无论是在属性值还是属性选择器中都被视为相同):

      

    字符串不能直接包含换行符。要在字符串中包含换行符,请使用表示ISO-10646(U + 000A)中换行符的转义符,例如“\ A”或“\ 00000a”。这个字符代表CSS中“newline”的一般概念。

    \n在CSS中没有特殊含义;事实上,它与n相同。

  2. 如果空格直接跟随转义序列(如\a),则该空格必须加倍,以便可以使用直接跟在转义序列后面的空格字符。再次参阅4.1.3节,其中说明:

      

    十六进制转义后,只会忽略一个空格字符。请注意,这意味着转义序列之后的“真实”空格必须加倍。

    这可能就是为什么即使使用\a也无法让它工作的原因。可以理解,这是一个令人难以置信的模糊规则,尤其是在使用空格字符时。

  3. 这会产生以下选择器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;
}

jsFiddle example