Libsass: 名前付きの色はマップキーとして機能しません

作成日 2014年11月17日  ·  8コメント  ·  ソース: sass/libsass

こんにちは、みんな、

この記事にあるカラーパレット機能を実装しようとしています。

http://erskinedesign.com/blog/friendlier-colour-names-sass-maps/

これは結果のコードです

// config
$_color-base-grey: rgb(229,231,234);
$palettes: (
    purple: (
        base:   rgb(42,40,80),
        light:  rgb(51,46,140),
        dark:   rgb(40,38,65)
    ),
    grey: (
        base:  $_color-base-grey,
        light: lighten($_color-base-grey, 10%),
        dark: darken($_color-base-grey, 10%)
    )
);

// Palette function,
<strong i="10">@function</strong> palette($palette, $tone: 'base') {
    <strong i="11">@return</strong> map-get(map-get($palettes, $palette), $tone);
}


// in module styles
a {
    color: palette(purple);
    &:hover {
        color: palette(purple, light);
    }
}

すべての兆候はこれが機能していることを示しているようですが、このエラーが発生します。

Warning: /Users/xxx/xxx//styles.scss:35: argument `$map` of `map-get($map, $key)` must be a map

GruntSassバージョンを使用しています-0.16.1

何か案は?

どうもありがとう

Bug - Confirmed Dev - Test Written

最も参考になるコメント

私の最初の考えは間違っていたようです。 問題は、マップキーが色の名前であるためです。 Libsassには、色名である文字列の解析に関していくつかの問題があります。つまり、 https://github.com/sass/libsass/issues/558

ケースの削減: http

全てのコメント8件

確認済み! 新しいAPIがnode-sass (未リリース)にします

{
        "status": 1,
        "path": "c:/temp/foo3.scss",
        "line": 18,
        "column": 13,
        "message": "argument `$map` of `map-get($map, $key)` must be a map\nBacktrace:\n\tc:/temp/foo3.scss:18, in function `map-get`\n\tc:/temp/foo3.scss:18, in function `palette`\n\tc:/temp/foo3.scss:24"
}

@mgreter 、個別に; JSONのmessageでは、ファイル名と行番号を繰り返さないでください。 :)

これを掘り下げたところ、 map-get($palettes, $palette)がnullを返していることが原因のようです。

まだ解決策はありますか?

これを3.0.3マイルストーンに追加しました。これは、次のリリースに組み込まれるはずです。

私の最初の考えは間違っていたようです。 問題は、マップキーが色の名前であるためです。 Libsassには、色名である文字列の解析に関していくつかの問題があります。つまり、 https://github.com/sass/libsass/issues/558

ケースの削減: http

頭を上げると、マップキーは文字列ではなく色であるため、ユーザーはsass / sass#363に関連する問題に直面している可能性があります。

これはいくぶん真実だと思います。 マップキーは文字列ではなく色として扱われていると思いますが、なぜこれが問題になるのかはわかりません。

縮小されたテストケースがRubysassで正常に機能することは注目に値します。

問題は、マップキーのpurpleを文字列として扱い、関数呼び出しのpurplecolorとして扱うことです。 map-getを呼び出すと、紫色に関連付けられた値を要求しますが、これは文字列purpleの下に格納されます。 これらの2つのことは同等ではありません-http ://sassmeister.com/gist/77ae29d46ebecd0823ed

数時間以内に発送する修正があります。

このページは役に立ちましたか?
0 / 5 - 0 評価