我在Angular 2中有一个名为my-comp的组件:
<my-comp></my-comp>
在Angular 2中如何为这个组件的宿主元素设置样式?
在Polymer中,您将使用“:host”选择器。我在Angular 2中尝试过。但这并不奏效。
:host {
display: block;
width: 100%;
height: 100%;
}
我还尝试使用组件作为选择器:
my-comp {
display: block;
width: 100%;
height: 100%;
}
这两种方法似乎都不管用。
谢谢。
我已经找到了一个解决方案如何样式只是组件元素。我没有找到它是如何工作的任何文档,但你可以把属性值放在组件指令中,在'host'属性下,像这样:
@Component({
...
styles: [`
:host {
'style': 'display: table; height: 100%',
'class': 'myClass'
}`
})
export class MyComponent
{
constructor() {}
// Also you can use @HostBinding decorator
@HostBinding('style.background-color') public color: string = 'lime';
@HostBinding('class.highlighted') public highlighted: boolean = true;
}
更新:
正如Günter Zöchbauer提到的,有一个错误,现在你可以在css文件中设置host元素的样式,就像这样:
:host{ ... }
有个漏洞,但同时已经修复了。:host{}现在工作正常。
支持的还有
:host(selector) { ... } for selector to match attributes, classes, ... on the host element
:host-context(selector) { ... } for selector to match elements, classes, ...on parent components
selector /deep/ selector (alias selector >>> selector doesn't work with SASS) for styles to match across element boundaries
UPDATE: SASS is deprecating /deep/.
Angular (TS and Dart) added ::ng-deep as a replacement that's also compatible with SASS.
UPDATE2: ::slotted
::slotted is now supported by all new browsers and can be used with `ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
参见将外部css样式加载到Angular 2组件中
/deep/和>>>不受Chrome中已弃用的相同选择器组合符的影响。
Angular模拟(重写)了它们,因此不依赖于浏览器对它们的支持。
这也是为什么/deep/和>>>不能使用ViewEncapsulation的原因。本机,启用本机阴影DOM,并依赖于浏览器的支持。