在 Angular 7 运行时动态生成 CSS 类

Posted

技术标签:

【中文标题】在 Angular 7 运行时动态生成 CSS 类【英文标题】:Dynamically generating CSS classes at runtime in Angular 7 【发布时间】:2019-10-10 09:18:45 【问题描述】:

我有一个 Angular 7 应用程序,我需要在运行时在我的组件中动态生成 CSS 类。

首先:我知道[ngStyle][ngClass]!我需要使用无法生成的伪选择器来做一些事情。

现在,天真的方法:我将使用 Angular 来模板化我的 CSS!

<style *ngFor="let class of classes">
    .class.prefix-target 
        border: 1px solid maroon;
        text-align: center;
      

      .class.prefix-control:hover ~ .class.prefix-target 
          background: red;
        
  </style>

这种方法的问题:

    VS Code 抱怨我将 Angular 模板放入 CSS 类中。 Angular 不会在最终生成的 html 中插入 class.prefix - 它只是将 class.prefix 直接放在那里。

有没有办法在 Angular 中做到这一点,无论是使用为此目的的库还是我可以使用的方法?提前致谢!

【问题讨论】:

【参考方案1】:

取决于您需要组件的动态程度...

您可以在组件类之外声明前缀(或动态生成)。然后使用 javascript 模板字符串在样式被 @Component() 装饰器的元数据处理之前对其进行解释。

像这样:

const classPrefix = 'bar';

@Component(
  selector: 'app-foo',
  template: `
    <!-- Your HTML template -->
  `,
  styles: [`
    .$classPrefix-target 
        border: 1px solid maroon;
        text-align: center;
    
    .$classPrefix-control:hover ~ $classPrefix-target 
        background: red;
    
`]
)
export class FooComponent 
/* . . . */

【讨论】:

以上是关于在 Angular 7 运行时动态生成 CSS 类的主要内容,如果未能解决你的问题,请参考以下文章

Angular/CSS - 动态添加新元素时动画内容的移动

有没有办法告诉 angular-cli (for angular 2) 生成缩小版的 css?

Java运行时动态生成类几种方式

Angular 7 CSS在使用可重用组件时不起作用

CSS值不适用于Angular 4中动态注入的html div元素

如何在 Angular 2 中动态更改 :host 中的 CSS?