更新2 ::slotted
::slotted
现在,所有新浏览器都支持该功能,并且可以与 ViewEncapsulation.ShadowDom
https://developer.mozilla.org/zh-CN/docs/Web/CSS/::slotted
更新1 :: ng-deep
/deep/
已淘汰,并由取代::ng-deep
。
::ng-deep
也已被标记为已弃用,但尚无替代品。
当ViewEncapsulation.Native
所有浏览器都正确支持并且支持跨阴影DOM边界的样式时,::ng-deep
可能会停止使用。
原版的
Angular将各种CSS类添加到HTML中,并将其添加到DOM中以模拟影子DOM CSS封装,以防止样式渗入和渗出组件。Angular还会重写您添加的CSS以匹配这些添加的类。对于使用[innerHTML]
这些类添加的HTML ,不会添加它们,并且重写的CSS不匹配。
解决方法请尝试
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(以及同等功能,/deep/
但/deep/
在SASS上效果更好),::shadow
并在2.0.0-beta.10中添加。它们类似于Shadow DOM CSS组合器(已弃用),并且仅与encapsulation: ViewEncapsulation.Emulated
Angular2中的默认组合器一起使用。它们可能也与之一起工作,ViewEncapsulation.None
但由于没有必要,因此仅被忽略。在支持跨组件样式的更高级功能之前,这些组合器只是一个中间解决方案。
另一种方法是使用
@Component({
...
encapsulation: ViewEncapsulation.None,
})
适用于所有阻止CSS的组件(取决于添加CSS的位置以及要设置HTML样式的位置-可能是应用程序中的所有组件)
更新资料
柱塞示例
index.html
?