组件选择器标签上的Angular 2样式?

Posted

技术标签:

【中文标题】组件选择器标签上的Angular 2样式?【英文标题】:Angular 2 styling on component selector tags? 【发布时间】:2017-06-25 11:48:55 【问题描述】:

我一直在研究一些 Angular 2 框架,主要是 Angular Material 2 和 Ionic 2。在它们的组件样式中,有一些样式是直接将 CSS 放在标签上的。例如,对于 Card 组件,您会看到如下样式:

md-card  // some styling 

.md-card  // some styling 

最佳做法是什么?我问的主要原因是因为我正在从事一个项目,其中一些组件在标签上具有样式,而其他组件则使用经典方法。

我可以在元素方法中看到的一个好处是 html 模板的膨胀更少——不需要内部标记。另一个是使用某些装饰器,如 HostBinding 会稍微容易一些。

【问题讨论】:

我认为如果样式是特定于组件的,那么基于属性命名的样式是有意义的。 【参考方案1】:

我们可以这样做,希望它是你想要的

styles: [`
    :host 
        display: inline-block;
        border: 1px solid black;
    
`]

例如:

@Component(
    moduleId: module.id,
    selector: 'selector',
    templateUrl: 'template.html',
    styleUrls: ['template.component.css'],
    styles: [`
        :host 
            display: inline-block;
            border: 1px solid black;
        
    `]
)

【讨论】:

【参考方案2】:

虽然我找不到它明确的文档,但 Angular Material 2 似乎严格为每个带有主机元数据的组件添加了一个等效类。这就是为什么 mat-card.mat-card 选择器都能工作的原因。

类选择器的一个好处是您的 css 规则不直接绑定到 html 实现。例如MatSidenav 具有mat-drawer mat-sidenav 类see 所以.mat-drawer 规则将涵盖<mat-sidenav><mat-drawer> 实现。同样在从md- 前缀更新到mat- 前缀的过程中,我相信所有组件都会继续使用md- 前缀类以及一段时间的向后兼容性。

但是,为 Angular Material 2 使用类选择器需要暗示开发人员对类选择器将起作用有深入的了解。尽管他们似乎并没有隐藏或阻止您可以使用类选择器see这一事实。

这可能是一种取决于偏好的东西,但只要你保持一致,它就应该是可维护的。 你可以按照他们的模式来制作你的 oun 组件

【讨论】:

以上是关于组件选择器标签上的Angular 2样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在全局样式表中设置角度4组件选择器的样式?

伪类(伪类选择器)

详解CSS样式选择器都有哪些?

CSS - scoped属性/深度作用选择器/deep/及>>>

如何使用多个选择器定义 Angular 2 组件或指令

Angular 6 组件