1

我想使用 ::before 伪元素插入一些在 HTML 文件的另一个区域中找到的文本。

我的 HTML:

<html>
    <body notetext="Note">
     ...
    <p class="bodytext">Don't press the red button!</p>
    </body>

我可以使用 content:attr 来选择当前元素的属性,但是是否可以引用祖先元素的属性?就像在 XPath 中一样,例如 (//body/@notetext)

我拥有的非工作CSS:

p.bodytext::before {
    content:attr(notetext);
}

我正在为 CSS Paged Media 使用 Antennahouse Formatter。

4

3 回答 3

5

如果您可以更改 HTML,则可以考虑使用 CSS 变量,如下所示:

p.bodytext::before {
  content: var(--text);
}
<body style="--text:'Note '">

  <p class="bodytext">Don't press the red button!</p>
</body>

于 2018-05-08T12:41:14.473 回答
1

仅使用 css 是不可能引用其他元素内容的。也不能引用父元素。我建议您使用 javascript 和数据属性来解决您的问题。

Temani Afif 的回答很棒,只要您不需要支持 Internet Explorer,我就会推荐它。否则,您将需要一个 css 自定义属性 IE polyfill。

于 2018-05-08T12:46:28.360 回答
1

AH Formatter 具有-ah-attr-from()扩展功能(参见https://www.antennahouse.com/product/ahf65/ahf-ext.html#attr-from)。

函数原型与 for 相同,attr()但添加了一个指定祖先元素的参数:

-ah-attr-from( <from-name> , <attr-name> <type-or-unit>? [ , <fallback> ]? )
于 2018-05-08T14:41:39.160 回答