:host
的{{3}}并没有提到我们可以一次设置 all 宿主元素的样式。我在“全局”级别添加了此CSS:
:host {
width: 100%;
}
但没有效果。但是,这在组件级别的CSS中可以正常工作:
:host(app-search) {
width: 100%;
}
其中app-search
是组成部分app-search.component.ts
。
是否可以为所有组件编写一个:host
选择器,或者必须在组件级别多次声明该选择器?
答案 0 :(得分:1)
在您的app-search.component.ts文件中,您可以设置:
encapsulation: ViewEncapsulation.None
像这样
@Component({
templateUrl: 'app-search.component.html',
styleUrls: ['app-search.component.css'],
encapsulation: ViewEncapsulation.None
})
这避免了您不得不重写样式并在全局级别启用样式。
您还可以尝试将样式直接应用到index.html文件中。这些样式也将是全局样式,以防止您在组件级别重写样式。
答案 1 :(得分:1)
根据其定义(或规范),:host
永远不能在全局级别使用。创建它是为了从组件级别使用,并从子组件中选择父组件(称为shadow host
)(被称为shadow tree
)。
为进一步说明,Angular的:host
选择器是 shadow DOM样式范围(在CSS Scoping Module Level 1的W3C site页中进行了介绍)的特殊选择器)。
Angular文档明确指定您应该使用此选择器从子组件中选择父组件。但是,如果您对影子树的工作原理一无所知,可能对您似乎还不清楚。 see the documentation。
如果您需要为全局样式表中的任何组件设置样式,则在Angular的全局范围内会自动添加一个style.css
文件。只需将CSS放入该文件中,即可在所有组件中全局找到它。
组件级CSS文件使您的CSS模块化。这是一个很棒的功能,因为:
尽管它是可配置的,但我强烈建议不要使用ViewEncapsulation.None
。它将杀死所有CSS模块化,您可以使用全局CSS文件轻松使用它们,而不会影响作用域限制。