2017-02-03 4 views
1

その(ネストされた)子の1つに親要素の値をdata-indexに設定したいとします。希望の結果:h2.headingの周りに文字列 "index"が表示されます。CSS3のattr関数を使用している子の親の属性値を使用

マークアップ:

<div class="foo" data-index="index"> 
    <div> 
     <h2 class="heading"><span>title</span></h2> 
    </div> 
</div> 

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; 
} 

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

+0

問題のようにそれを行うことは、私は考えていないということです'attr(data-index)'をCSS3の要素の親から取り出すことができます。 'data-index'プロパティを' div.foo> div'要素に入れてヘッダをラップして ':: after'疑似を付ける必要があります。 – forrestmid

+0

@forrestmid私はそれを疑っています。私はこれについて何かできることはありますか? – montrealist

+1

ええ、[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/attr)には定義があります。具体的には、「attr()CSS関数は、**選択された要素**の属性の値を取得し、スタイルシートで使用するために使用されます。私は少しの研究をしましたが、子要素で行うことができるということを何も見つけることができませんでした。 – forrestmid

答えて

0

あなたはこの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; 
} 

疑似要素の使用に注意してください。

私はこれがあなたが探していたものだと思います。

+0

いいえ - 'data-index'の値を' div.foo'の前に置くだけです - 見出しの中に必要です。 – montrealist

+0

ほとんどの場合、データインデックス属性をh2要素に追加する必要があります。それを回避する方法はありません。 –

+0

ここにコードペンが更新されましたhttp://codepen.io/anon/pen/ggzEeo –

3

更新

この問題を回避するには、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; 
 
}
<div class="foo" style="--index:'test';" data-index> 
 
    <div> 
 
    <h2 class="heading"><span>title</span></h2> 
 
    </div> 
 
</div>

が現在行わ(attrを述べたようにのみ電流素子上で動作)することができません。将来的には

attr()はCSSの変数と組み合わせcontent、ほかのプロパティに使用することができたときに、この

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; 
 
}
<div class="foo" data-index="index"> 
 
    <div> 
 
    <h2 class="heading"><span>title</span></h2> 
 
    </div> 
 
</div>

+0

変数が最新のChrome(内部でサポートする必要があるブラウザのみ)で動作するようになりますか? [caniuse.com](http://caniuse.com/#feat=css-variables)でサポートされています。 – montrealist

+0

@montrealistはい、最新のChromeで動作します。ここに更新されたペンです:http://codepen.io/gpetrioli/pen/KaedNx –

関連する問題