【发布时间】:2021-01-15 02:37:41
【问题描述】:
我们网站的很多结构都是这样的:
- 组件
- 组件 CSS
- 组件模板
- 子组件
我们经常需要根据子组件所在的父组件来设置不同的样式。这当然很烦人,但是当我们使用全局 CSS 时是可以管理的,因为我们可以简单地针对具有唯一 ID 和类的特定实例CSS 选择器。
我们现在正试图停止使用全局样式并将我们的 CSS 封装在每个组件中。问题在于,据我所见,封装 Angular CSS 将限定您的 CSS,使其仅适用于该组件……这意味着它也不适用于任何子组件。
一种解决方案似乎是在我们的组件 CSS 中使用 ::ng-deep 选择器来定位子级。不过,这遇到了一些阻力,因为有人告诉我,这通常也会破坏封装,并可能影响不同组件中网站的其他部分。
这就是我感到困惑的地方。一些问题:
是否有任何以::ng-deep 为目标的样式被取消作用域以便它是全局应用程序范围的?或者它只是在那个父组件中的“全局”?
如果是前者,仍然使用 ::ng-deep 是否可行,但还要确保使用额外的唯一 css 选择器,使其仅适用于您所定位的子组件?
或者有没有更合适的方式给特定的子组件实例添加样式?
【问题讨论】:
-
::ng-deep在从父级到最深子级的方向上有效,因此没有其他副作用。但我建议在针对深孩子时要小心。也可以考虑this -
@Eldar 不确定这是否正确,从您的链接中它说 ::ng-deep 中的样式是全局的,并且可能会渗入其他样式如果在没有 :host 的情况下使用
标签: css angular encapsulation ng-deep