を補間して、値primary-base
とし、さらに同じ変数名の値を取得しようとすると、は無効ですです。 primary-base
はすでに値であり、変数名として解釈できません。そのようなことは、多くの混乱を招く可能性があります。あなたが達成したい何のため
、あなたはそのマップでmap
を使用してkey
をチェックするのに優れている
$colours: (
'primary': red,
'primary-base': blue
);
@function variable_lookup($colour, $suffix: '') {
$value: null;
@if ($suffix != '' and map-has-key($colours, unquote($colour+'-'+$suffix))) {
$value: map-get($colours, unquote($colour+'-'+$suffix));
} @else if (map-has-key($colours, unquote($colour))) {
$value: map-get($colours, unquote($colour));
}
@return $value;
}
div {
color: variable-lookup(primary, base);
}
p {
color: variable-lookup(primary);
}
これは、次のCSS
div {
color: blue; }
p {
color: red; }
あなたのコード保存された色にコンパイル変数として使用しましたが、これらの名前はkeys
でmaps
このすべてmap-has-key
メソッドを使用してコード内の変数のチェックをシミュレートする必要があります。それがtrueを返した場合、key
が存在し、私たちはこのような場合には、あなたのコメントで提起された問題に対処するための
UPDATED ANSWER
一つの方法を定義することですmap-get
を使用して色になり値を得ることができます変数ともう一つの方法は、
$colours:();
$list: primary success warning; //map primary to blue, success to green and so on
$shades: blue green yellow;
@for $i from 1 through length($list) {
$key: nth($list, $i);
$value: nth($shades, $i);
$colours: map-merge($colours, ($key: $value));
$colours: map-merge($colours, (unquote($key+'-hover'): darken($value, 5%)));
}
@debug $colours // (primary: blue, primary-hover: #0000e6, success: green, success-hover: #006700, warning: yellow, warning-hover: #e6e600)
スタイルに二つのリストとマップの色を反復処理することですマップの値として
$primary: #fff;
$warning: yellow;
$colours: (primary: $primary,
primary-hover: darken($primary, 5%),
secondary: $warning,
secondary-hover: darken($warning, 5%));
をそれらを使用します
variable_lookup
の機能は同じです。
希望することができます。
これは私の現在の回避策ですが、理想的ではありません。 '$ map =( btn-primary-bg:#fff、 btn-primary-border:darken(map-get($ map、map))マップを定義するときに、マップ内の変数に修飾子を割り当てることはできません。 btn-primary-bg ")、5%) )' – Jake
これは、その内部の 'map'を参照しているからです。このコードを 'btn-primary-border:darken(#fff、5%)'とするとうまくいくでしょう。だから、あなたが定義したい変数がどのようなものかを見ることができます –
うん、私は知っている。しかしそれがポイントです。私は以前に書いた値を再度反復する必要があります。伝統的な変数では、私は単にコードを書くことができます: '$ btn-primary-bg:#fff; $ btn-primary-border:darken($ btn-primary-bg、5%); ' – Jake