【发布时间】:2017-02-15 18:30:22
【问题描述】:
在我的顶级组件的样式块中,我定义了一个/deep/ css 类,它为将出现在其 ng-content 中的任何项目设置边距。如何使该 css 类优先 - 即使子组件应用其自己的定义了不同边距的 css 类。
例如:
父组件.ts:
@Component({
selector: 'my-parent',
styles: [`
/deep/ .child-item { /* I WANT THIS TO TAKE PRECEDENCE */
margin-right: 10px;
margin-left: 10px;
}
`],
template: `
<div>
<ng-content></ng-content>
<div>
`
})
export class ParentComponent {}
子组件.ts
@Component({
selector: 'my-child',
styles: [`
.less-important-class { /* THESE MARGINS SHOULD BE IGNORED IN CONFLICTS */
margin-right: 5px;
margin-left: 5px;
background-color: rgba(255, 0, 0, 1.0);
}
`],
template: `
<button type="button" class="less-important-class child-item">My Little Button</button>
`
})
export class ChildComponent {}
我认为由于 child-item 首先出现在编译的样式表中,less-important-class 具有更高的 css 特异性,并且在两个类之间的任何冲突中胜出。如何给子项更高的优先级?
【问题讨论】:
-
与往常一样,您可以使用
!important为属于不太具体的选择器(深层)的规则赋予更高的优先级。 -
添加 !important 在这种情况下没有帮助,因为 Angular 的工作方式确保子组件样式优先于您所做的任何事情。
-
我发现在
/deep/css 类之前使用:host选择器使该类优先于子组件中定义的 css 类。只要这些组件没有使用:host选择器。
标签: css angular typescript angular2-template css-specificity