使用attr()在css内容中使用html特殊字符

az_*_*az_ 3 html css pseudo-element css-content pug

相关代码:http://codepen.io/anon/pen/ocptF/

编辑:codepen使用Jade,因此混淆了一些东西.在开始这个问题时我没有意识到这一点.从本质上讲,我认为CSS attr()会在字面上复制HTML属性,但事实并非如此.

我想使用CSS attr函数填写content一些伪元素.然而,它打印出来004时,HTML属性设置为\f004,与08fa\f08fa.

相关专线:

HTML:

<div class="zoomfade" data-fill='\f004' data-unfill='\f08a'></div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.zoomfade:before {
  content: attr(data-unfill);
  position: absolute;
}

.zoomfade:before {
  content: attr(data-fill);
  position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Bol*_*ock 5

CSS中的转义序列仅在CSS语法中特别处理.当您在HTML属性值中指定它然后在CSS中使用该值时attr(),它是按字面意思.从CSS2.1规范:

attr(X)
此函数以字符串形式返回选择器主题的属性X的值.CSS处理器不解析该字符串.[...]

由于您在HTML属性值中指定了字符代码,因此您可以使用HTML字符引用,实体引用或Unicode字符本身.值得注意的是,您拥有的两个字符代码似乎无效,因此它们可能根本不起作用.

编辑:[...]基本上,我认为CSS attr()将字面上复制HTML属性,但事实并非如此.

它根据DOM复制属性值,这可能与它在源中的表示方式不同,例如源标记或生成元素的脚本.

例如,如果源以原始HTML标记表示,那么如上所述,您将需要使用HTML字符转义,因为HTML由HTML解析器解析.如果使用基于JS的模板引擎(如Jade)生成元素,则字符转义采用\u后跟十六进制代码点的形式.在这两种情况下,相应的解析器将转义序列转换为它们的代表性字符,并且字符本身是作为属性值的一部分存储在DOM中的字符.

当然,再次总是可以直接使用Unicode字符.如果您的源文件都编码为UTF-8,则直接使用这些字符应该没有问题.

  • @aaronz:这是同一个角色的两个不同的表示形式:一个在CSS中,另一个在HTML中. (4认同)
  • @Adrian Preuss:就像引用的文字所说的那样,字符串根本不被CSS解析.只要上下文是HTML,就可以使用特定于HTML的字符转义. (3认同)
  • @aaronz如果你真的创建一个代表你的问题的代码而不是使用jade,它确实有用:http://codepen.io/anon/pen/wcznm/ \ (2认同)