如何应用伪 classes 像 :hover 到 ng2 伪 class :host
How to apply pseudo classes like :hover to ng2 pseudo class :host
我知道我们可以将 class 样式应用于 CSS 中的主机组件,如下所示:
:host(.active) {
...
}
有什么方法可以像 :hover 一样以类似的方式应用伪 classes 吗?
:host(:hover) 似乎不起作用。 :host:hover 也没有。我知道我可以在 JS 中使用主机侦听器来应用 classes,但在这种情况下做这样的事情很奇怪。
编辑:我正在使用 Angular 2.2.0
EDIT2:我的问题是我没有将 :host 设置为显示:块,所以无法将鼠标悬停在它上面。
这对我来说很好
:host{ display: block}
:host:hover { background: yellow;}
or
:host(:hover) { background: yellow;}
:host(:hover) { ... }
应该有效,但是否有效取决于 @Component({ encapsulation: ViewEncapsulation.??? })
。
ViewEncapsulation
你有三个选项:
ViewEncapsulation.None
- 您的组件样式将合并到全局样式中
ViewEncapsulation.Emulated
- 重命名样式并向元素添加独特的属性以防止全局样式冲突。这模拟阴影 DOM.
ViewEncapsulation.Native
- 使用阴影 DOM。这个需要浏览器支持。
请注意 :host(:hover)
是正确的,应该适用于所有情况。 :host:hover
将与 None
和 Emulated
一起使用,但不是 Native
的正确写法。因此,为了合规,请尝试使用 :host(:hover)
.
因此,由于缺乏支持(检查can i use),确保encapsulation
设置为ViewEncapsulation.Emulated
。这应该是默认选项。
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hover me please</h2>
</div>
`,
styles: [`
:host(:hover) {
color: Cyan;
}
`],
encapsulation: ViewEncapsulation.Emulated
})
export class App {
constructor() {
}
}
生成的 HTML 将如下所示:
<my-app _nghost-c0="" ng-version="4.2.4">
<div _ngcontent-c0="">
<h2 _ngcontent-c0="">Hover me please</h2>
</div>
</my-app>
样式如下:
[_nghost-c0]:hover {
color: Cyan;
}
我知道我们可以将 class 样式应用于 CSS 中的主机组件,如下所示:
:host(.active) {
...
}
有什么方法可以像 :hover 一样以类似的方式应用伪 classes 吗? :host(:hover) 似乎不起作用。 :host:hover 也没有。我知道我可以在 JS 中使用主机侦听器来应用 classes,但在这种情况下做这样的事情很奇怪。
编辑:我正在使用 Angular 2.2.0
EDIT2:我的问题是我没有将 :host 设置为显示:块,所以无法将鼠标悬停在它上面。
这对我来说很好
:host{ display: block}
:host:hover { background: yellow;}
or
:host(:hover) { background: yellow;}
:host(:hover) { ... }
应该有效,但是否有效取决于 @Component({ encapsulation: ViewEncapsulation.??? })
。
ViewEncapsulation
你有三个选项:
ViewEncapsulation.None
- 您的组件样式将合并到全局样式中ViewEncapsulation.Emulated
- 重命名样式并向元素添加独特的属性以防止全局样式冲突。这模拟阴影 DOM.ViewEncapsulation.Native
- 使用阴影 DOM。这个需要浏览器支持。
请注意 :host(:hover)
是正确的,应该适用于所有情况。 :host:hover
将与 None
和 Emulated
一起使用,但不是 Native
的正确写法。因此,为了合规,请尝试使用 :host(:hover)
.
因此,由于缺乏支持(检查can i use),确保encapsulation
设置为ViewEncapsulation.Emulated
。这应该是默认选项。
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hover me please</h2>
</div>
`,
styles: [`
:host(:hover) {
color: Cyan;
}
`],
encapsulation: ViewEncapsulation.Emulated
})
export class App {
constructor() {
}
}
生成的 HTML 将如下所示:
<my-app _nghost-c0="" ng-version="4.2.4">
<div _ngcontent-c0="">
<h2 _ngcontent-c0="">Hover me please</h2>
</div>
</my-app>
样式如下:
[_nghost-c0]:hover {
color: Cyan;
}