角度5:如何在中央文件中定义调色板

乔纳斯·普拉姆(Jonas Praem)

我想在项目的中央文件中声明我的颜色托盘。

目前,我正在使用包含贴图的Injectable来引用我所有使用过的颜色。例:

@Injectable()

export class COLOR_DICTIONARY {
private static COLOR_MAP: Map<string, string> = new Map<string, string>();

 constructor() {
    COLOR_DICTIONARY.COLOR_MAP.set('primary', '#339988');
 }

 get(key: string) {
    return COLOR_DICTIONARY.COLOR_MAP.get(key);
 }
}

但是,这迫使我使用ngStyle而不是直接在CSS中引用标记中的所有颜色。

[ngStyle]="{'color': color_dictionary.get('primary')}"

我目前正在对整个网站进行较大的重新设计,并且更改样式文件和标记文件中的样式已变得很麻烦。(甚至是用于添加/更改/删除颜色的打字稿文件)。

如何在中央文件中引用调色板,最好是在XML文件之类的更静态的文件中直接在CSS文件中引用。

我愿意将样式转换为scss文件,如果这样可以使其变得更容易,或者对目的有益。

该项目与webpack捆绑在一起,因此也欢迎任何有关如何为此捆绑解决方案的技巧。

托马斯·库拉(Tomasz Kula)

一个不错的现代方法是使用css变量。全球支持相当不错,并且已被有角社区推荐

import { Component, Renderer2 } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
    <h1> Hello </h1>
    <h2> World </h2>
  `,
  styles: [
    'h1 { color: var(--primary); }',
    'h2 { color: var(--accent); }'
  ]
})
export class AppComponent {

  constructor() { }

  ngOnInit() {
    const colors = new Map([
      ['primary', 'blue'],
      ['accent', 'red'],
    ])

    Array.from(colors.entries()).forEach(([name, value]) => {
      document.body.style.setProperty(`--${name}`, value);
    })

  }
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章