Libsass: Benannte Farben funktionieren nicht als Kartenschlüssel

Erstellt am 17. Nov. 2014  ·  8Kommentare  ·  Quelle: sass/libsass

Hallo zusammen,

Ich versuche, eine Farbpalettenfunktion zu implementieren, die in diesem Artikel hier gezeigt wird.

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

Dies ist der resultierende Code

// 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);
    }
}

Alle Anzeichen scheinen darauf hinzuweisen, dass dies funktioniert, aber ich erhalte diesen Fehler.

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

Ich verwende Grunt Sass-Version - 0.16.1

Irgendwelche Ideen?

Vielen Dank

Bug - Confirmed Dev - Test Written

Hilfreichster Kommentar

Anscheinend waren meine ersten Gedanken falsch. Das Problem liegt daran, dass der Kartenschlüssel ein Farbname ist. Libsass hat einige Probleme beim Analysieren von Zeichenfolgen, die Farbnamen sind, z. B. https://github.com/sass/libsass/issues/558

Reduzierte Groß-/Kleinschreibung: http://sassmeister.com/gist/d2be1def3619bd6c3a54

Alle 8 Kommentare

Bestätigt! Ich erhalte den folgenden (JSON) Fehler von libsass, wobei die neue API in node-sass implementiert ist (unveröffentlicht):

{
        "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 , getrennt; in message von JSON sollten der Dateiname und die Zeilennummer nicht wiederholt werden. :)

Ich habe mich damit befasst und es schien daran zu liegen, dass map-get($palettes, $palette) null zurückgibt.

Schon eine Lösung?

Ich habe dies zum 3.0.3-Meilenstein hinzugefügt, es sollte es in die nächste Version schaffen.

Anscheinend waren meine ersten Gedanken falsch. Das Problem liegt daran, dass der Kartenschlüssel ein Farbname ist. Libsass hat einige Probleme beim Analysieren von Zeichenfolgen, die Farbnamen sind, z. B. https://github.com/sass/libsass/issues/558

Reduzierte Groß-/Kleinschreibung: http://sassmeister.com/gist/d2be1def3619bd6c3a54

Als Vorwarnung sieht es so aus, als ob der Benutzer auf das Problem im Zusammenhang mit sass/sass#363 stößt, da Farben als Kartenschlüssel keine Zeichenfolgen, sondern Farben sind.

Ich glaube, das stimmt einigermaßen. Ich denke, der Kartenschlüssel wird eher als Farbe als als Zeichenfolge behandelt, obwohl ich nicht sicher bin, warum dies ein Problem ist.

Es ist erwähnenswert, dass der reduzierte Testfall auf Ruby Sass gut funktioniert.

Das Problem ist, dass wir purple im Map-Schlüssel als String und purple im Funktionsaufruf als color . Wenn wir map-get aufrufen, fragen wir nach dem Wert, der der Farbe lila zugeordnet ist, aber er wird unter der Zeichenfolge lila gespeichert. Diese beiden Dinge sind nicht gleichwertig - http://sassmeister.com/gist/77ae29d46ebecd0823ed

Ich habe eine Lösung, die ich in ein paar Stunden versenden werde.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen