2016-04-12 4 views
1

x-foo私はbackground-colorを設定するカスタムCSSプロパティを--xbgと定義しました。ポリマーは "!important"を使用せずに内部要素のカスタムCSSプロパティを設定します

x-foo.outer { 
    --xbg: orange; 
} 
x-foo.outer x-foo { 
    --xbg: red; 
    /* Doesn't work, have to use !important?!?!*/ 
} 

I:

<x-foo class="outer"> 
    Outer 
    <x-foo class="inner"> 
    Inner 1 
    </x-foo> 
</x-foo> 

Iは、外側に--xbgを設定し、その値は、内側要素の値をオーバーライド:

私はように子供のような自体の要素と要素を使用しますChromeのインスペクタを使用して、子の定義が実際に親の「下位」であることがわかります。

!importantと高くなるように強制する必要があります。これには他にもさまざまな意味があります。

x-foo.outer x-foo { 
    --xbg: red !important; 
    /* Works */ 
} 

なぜ、子は親プロパティを上書きしないのですか?他のブラウザのため https://plnkr.co/edit/uZxg7G?p=preview(Chromeのみで動作します)

シンプルJSBin:ここ

は、いくつかのより多くの例で、このためplunkerだ http://jsbin.com/wuqobejeci/edit?html,output

+0

これを再現するように見えることはできません。 Plunkrはそれらの要素をスタイリングしていません...あなたにはいくつかの図書館がありませんか?編集:ああ、Chrome専用です。 – TylerH

+0

私は例2はexample3のように赤い ''を持つべきだと思います。 –

+0

@TylerHはクロムだけではないと思っていましたが、私はプランナーに何かを見逃しています。 – Bulan

答えて

1

を試してみてください、ここで

は作業Fiddle

です
+0

よろしく!それは動作します!しかし、なぜ?私たちは、漏れのない陰影DOMに住んでいると思ったのですか?すなわち、私は各インスタンスがそれ自身のホストだと思ったので、すべてのスタイリングはそのホストに暗黙的にしか影響しませんでしたか? – Bulan

+0

これは奇妙なものですが、コンテンツであるため、css selector :: contentを使用して選択することができます。.contentwrapperによってまだ捕捉されるcontentwrapper |もしあなたがそれを外に持っていたら(それは内容ではない)、それは「漏れ」ていないでしょう。 –

+0

oops :: content> .contentwrapperは私が言いたいことです –

1

要素は、クラスより優先度が低いです。この問題を解決する最良の方法は、スタイルだけで、そのホストからのクラスcontentwrapperにそのような

<style> 
    :host { 
     display: block; 
    } 

    :host > .contentwrapper { 
     padding: 1em; 
     background-color: var(--xbg, yellow); 
    } 

    </style> 

を下に適用すると言うことです

x-foo.outer { 
    --xbg: orange; 
} 
x-foo.outer x-foo.inner { 
    --xbg: red; 
} 
+0

例4をplunkerに追加したか、または 'id'セレクタが何とか干渉していると思いますか? – Bulan

1

これは、上記のAndrewの答えに基づいて試してみる価値があると思っています。ホストスタイルだけを使用するとうまくいくようです:

<style> 
    :host { 
    display: block; 
    padding: 1em; 
    background-color: var(--xbg, yellow); 
    } 
</style> 

https://jsfiddle.net/6tzoacxr/

関連する問題