使用CSS3 attr函数使用子节点中父节点的属性值

mon*_*ist 2 css css3

我想data-index在其(嵌套)子节点之一上设置父元素的值.期望的结果:字符串"index"应该出现在h2.heading.

标记:

<div class="foo" data-index="index">
    <div>
        <h2 class="heading"><span>title</span></h2>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS(第一条data-index规则有效 - 但不是在正确的地方):

div.foo[data-index] .heading span {
    display: none;
}

div.foo[data-index]::after { 
    content: attr(data-index);
    color: green;
}

div.foo[data-index] .heading::after { 
    content: attr(data-index);
    color: red;
    border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)

http://codepen.io/anon/pen/jyxdoz

Gab*_*oli 7

更新

解决方法可能是直接在html元素上设置CSS变量并使用它.

div.foo[data-index] .heading span {
    display: none;
}

div.foo[data-index] .heading::after { 
    content: var(--index);
    color: red;
    border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="foo" style="--index:'test';" data-index>
  <div>
    <h2 class="heading"><span>title</span></h2>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


原版的

它目前无法完成(如上所述attr仅适用于当前元素).

将来,attr()除了可以用于属性之外content,结合css变量你可以这样做

div.foo[data-index] .heading span {
  display: none;
}
div.foo[data-index] {
  --index: attr(data-index);
}
div.foo[data-index] .heading::after {
  content: var(--index);
  color: red;
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<div class="foo" data-index="index">
  <div>
    <h2 class="heading"><span>title</span></h2>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 非常优雅的黑客,如果我可以这么说。 (2认同)
  • 未来你可以在 css 变量中使用 attr() 。第二个片段仍然不起作用,因为 css 变量实际上包含 attr() 函数,因此它将在当前目标 (.heading) 上进行计算。 (2认同)

Web*_*Guy -2

你可以使用这个CSS。

div.foo[data-index]::after, div.foo[data-index]::before { 
    content: attr(data-index);
    color: green;
}

div.foo[data-index] .heading::after { 
    content: attr(data-index);
    border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)

请注意伪元素的使用:before

我想这就是你正在寻找的。