私はAngular 6を使用していて、単純なdiv
があり、テンプレートの内側からこのdiv
の背景色を設定したいと思っています。これは、通常の色ですが、これはCSS変数では機能しません。
この例は機能します
<div [style.background]="'red'">...</div>
この例は機能しません
<div [style.background]="'var(--some-css-var)'">...</div>
あなたはngStyleを使用する必要があります
<some-element [ngStyle]="{'background-color': styleExp}">...</some-element>
HTMLテンプレートのCSS変数にスタイルプロパティをバインドするには、CSS変数式var(...)
をサニタイズする必要があります。カスタムパイプを定義できます。
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
@Pipe({
name: 'safeStyle'
})
export class SafeStylePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) { }
transform(value: string): SafeStyle {
return this.sanitizer.bypassSecurityTrustStyle(value);
}
}
hTMLテンプレートで使用します。
<div [style.background-color]="'var(--some-css-var)' | safeStyle"></div>
<div [style.background-color]="bkColor | safeStyle"></div>
bkColor = "var(--some-css-var)";
デモについては this stackblitz を参照してください。
あなたは2つの方法でそれを行うことができます
文字列を取得し、いくつかのカラーコードコードを返すパイプを使用します。
<div [style.background-color]="someString | colorSetter"></div>
たとえば、htmlタグに動的クラスを追加します。
<div class="my-div" [class]="someClassName"></div>
とscssにオプションを追加します
scss:
.my-div{
&.optoin1{
background-color:red;
}
&.optoin2{
background-color:black;
}
&.optoin3{
background-color:green;
}
&.optoin4{
background-color:yellow;
}
}