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
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.
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