遵循本教程关于转换https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
然而,没有提及如何设置最终替换ng-content的元素的样式。
似乎我只能在/deep/
关键字前面的css中定位那些元素,这通常在定位嵌套组件时使用。它是否正确?
答案 0 :(得分:23)
<ng-content>
内的内容与组件隔离。它无法看到组件的属性或样式。
如果您确实需要设置样式,有时您会这样做,您有两种选择:
您可以创建常规CSS文件并为其设置样式。您几乎可以肯定使用shadow DOM polyfill。常规CSS将透过polyfill来查看元素的样式。假设你有一个app-sidebar。你可以写:
app-sidebar p {
color:red;
}
如果您使用的是ng-cli,那么您在style.scss中编写的任何规则都将是全局的。
如果您想使用shadow DOM polyfill并使用style
装饰器的styleUrls
或Component
属性设置组件样式,请选择带:host
的元素,然后忽略带有/deep/
子选择器的阴影DOM polyfill。
:host
将选择该元素。/deep/
将选择元素而不将模拟影子DOM属性选择器添加到嵌套选择器。 将它们组合在一起,您可以选择嵌套在主机组件元素中的所有元素,无论它们在何处被声明。
像这样::host /deep/ p {
color:red;
}
答案 1 :(得分:12)
<强>更新强>
所有新浏览器现在都支持 ::slotted
,并且可以与`ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
<强>原始强>
::content xxx { ... }
也可以正常工作或:host xxx { ... }
。垫片不是非常严格或准确。 AFAIK(>>>
/deep/
旧)::ng-deep
(由SASS支持)和空格目前相同。
答案 2 :(得分:4)
这解决了我的问题
::ng-deep {
& > * {
// styles here
}
}
答案 3 :(得分:2)
作为上述答案的替代方法,您可以创建要应用于内容的指令,并使用该指令为内容添加样式。