トランスクルージョンに関するこのチュートリアルに従っています https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
ただし、ng-contentを置き換える要素をスタイルする方法については言及されていません。
ネストされたコンポーネントをターゲットにするときに通常使用される/deep/
キーワードが先行する場合、css内のこれらの要素のみをターゲットにできるようです。これは正しいです?
update
::slotted
はすべての新しいブラウザでサポートされるようになり、 `ViewEncapsulation.ShadowDomで使用できます
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
オリジナル
::content xxx { ... }
は同様に機能するか、:Host xxx { ... }
。シミングはそれほど厳密でも正確でもありません。私の知る限り (>>>
/deep/
old)::ng-deep
(SASSでサポート)とスペースは現在同じです。
<ng-content>
内のコンテンツは、コンポーネントから隔離されています。コンポーネントの属性やスタイルを見ることができません。
スタイルを設定する必要があり、場合によってはスタイルを設定する必要がある場合は、2つのオプションがあります。
通常のCSSファイルを作成し、そのようなコンテンツのスタイルを設定できます。ほとんど確実に、シャドウDOMポリフィルを使用しています。通常のCSSは、ポリフィルを透過して、要素のスタイルを設定します。アプリのサイドバーがあるとします。あなたは書くことができます:
app-sidebar p {
color:red;
}
Ng-cliを使用している場合、style.scssに記述したルールはすべてグローバルになります。
シャドウDOMポリフィルを使用し、style
デコレータのstyleUrls
またはComponent
属性を使用してコンポーネントのスタイルを設定する場合は、:Host
を持つ要素を選択してから、 /deep/
子セレクターを持つシャドウDOMポリフィルを無視します。
:Host
は要素を選択します。/deep/
は、ネストされたセレクターにモックシャドウDOM属性セレクターを追加せずに要素を選択します。それらをまとめると、宣言されている場所に関係なく、Hostコンポーネント要素内にネストされているすべての要素を選択できます。
そのようです:
:Host /deep/ p {
color:red;
}
これで問題が解決しました
::ng-deep {
& > * {
// styles here
}
}