我们正在制作一个Angular2 application,并且我们希望能够以某种方式创建一个全局CSS变量(当变量被赋值时,无论何时更改,都可以更新属性值).

We had used Polymer for a while (now we are switching to Angular2 components) and we had used CSS properties (Polymer has some polyfill) and we had just update styles using 100.

我们有没有办法实现类似的功能?

EDIT:

我们想要类似于Sass color: $g-main-color或CSS定制属性color: var(--g-main-color)的东西,每当我们决定更改属性的值时,例如updateVariable('g-main-color', '#112a4f')之类的东西,它都会在任何地方动态更新值.所有这些都是在应用程序运行时发生的.

EDIT 2:

我想在不同的部分使用一些全局CSS变量(主机、子元素…)我的CSS,并能够立即改变值-所以,如果我改变我的 colored颜色 变量,它在应用程序中的任何地方都会改变.

我将使用Sass语法,例如:

:host { border: 2px solid $my-color }
:host .some-label { color: $my-color }

有可能使用像角形管道这样的东西吗?(But it supposedly only works in HTML)

:host { border: 2px solid {{ 'my-color' | cssvariable }} }
:host .some-label { color: {{ 'my-color' | cssvariable }} }

推荐答案

Just use standard CSS variables:

您的全局CSS(例如:style es.css)

body {
  --my-var: #000
}

在组件的css或其他内容中:

span {
  color: var(--my-var)
}

然后,通过将inline style设置为html元素,可以直接使用TS/JS更改变量的值:

document.querySelector("body").style.cssText = "--my-var: #000";

否则,您可以使用jQuery:

$("body").css("--my-var", "#fff");

Angular相关问答推荐

根据Angular中的构建来卸载独立组件

如何从Angular TS文件传递$Events对象?

无法执行CanDeactivateFn Karma Test Angular 16

如何在每次Angular 编译之前执行脚本(esbuild)

更改图表上的光标以进行zoom

对Angular 为17的路径使用AuthGuard

Angular 16模块中未使用的组件是否从Bundle 包中删除(树摇动)?

如何解决在StackBlitz中使用SPARTIER时出现无法解析解析器错误(&C)?

Angular 迁移 14 到 15 / 16:angular universal 是否停止将 <!-- this page was prerendered with angular universal --> 用于预渲染页面?

如何在 Angular 库中将依赖项声明为可选?

有条件地取消所有内部可观察对象或切换到仅发出一个值的新对象

Angular 2 中的 ChangeDetectionStrategy.OnPush 和 Observable.subscribe

如何在 bootstrap Angular 2 应用程序时调用休息 api

无法绑定到matMenuTriggerFor,因为它不是 button的已知属性

Angular 2 应用程序中没有Access-Control-Allow-Origin标头

交替行 colored颜色 angular material表

单元测试错误:无法从同步测试中调用 Promise.then

如何在 Angular 2 中链接 HTTP 调用?

在angular-cli中创建模块时生成路由模块

此类通过 SomeModule -> SomeComponent 对消费者可见,但不会从顶级库入口点导出