Salut tout le monde,
J'essaie d'implémenter une fonction de palette de couleurs vue dans cet article ici.
http://erskinedesign.com/blog/friendlier-colour-names-sass-maps/
Voici le code résultant
// 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);
}
}
Tous les signes semblent indiquer que cela fonctionne, mais j'obtiens cette erreur.
Warning: /Users/xxx/xxx//styles.scss:35: argument `$map` of `map-get($map, $key)` must be a map
J'utilise la version Grunt Sass - 0.16.1
Des idées?
Merci beaucoup
Confirmé! J'obtiens l'erreur (JSON) suivante de libsass, avec la nouvelle API implémentée dans node-sass (non publié):
{
"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 , séparément ; dans message
de JSON, le nom de fichier et le numéro de ligne ne doivent pas être répétés. :)
J'ai creusé cela et cela semblait être parce que map-get($palettes, $palette)
renvoie null.
Une solution encore ?
J'ai ajouté ceci au jalon 3.0.3, cela devrait être intégré à la prochaine version.
Il semble que mes premières pensées étaient fausses. Le problème est dû au fait que la clé de la carte est un nom de couleur. Libsass a quelques problèmes lorsqu'il s'agit d'analyser des chaînes qui sont des noms de couleur, c'est-à-dire https://github.com/sass/libsass/issues/558
Cas réduit : http://sassmeister.com/gist/d2be1def3619bd6c3a54
En guise d'avertissement, il semble que l'utilisateur rencontre le problème lié à sass/sass#363 dans ces couleurs, car les clés de la carte ne sont pas des chaînes, mais des couleurs.
Je crois que c'est un peu vrai. Je pense que la clé de la carte est traitée comme une couleur plutôt que comme une chaîne, bien que je ne sache pas pourquoi c'est un problème.
Il convient de noter que le cas de test réduit fonctionne bien sur Ruby sass.
Le problème est que nous traitons purple
dans la clé de carte comme une chaîne et purple
dans l'appel de fonction comme un color
. Lorsque nous appelons map-get
nous demandons la valeur associée à la couleur violet, mais elle est stockée sous la chaîne violet. Ces deux choses ne sont pas équivalentes - http://sassmeister.com/gist/77ae29d46ebecd0823ed
J'ai un correctif que je vous enverrai dans quelques heures.
Commentaire le plus utile
Il semble que mes premières pensées étaient fausses. Le problème est dû au fait que la clé de la carte est un nom de couleur. Libsass a quelques problèmes lorsqu'il s'agit d'analyser des chaînes qui sont des noms de couleur, c'est-à-dire https://github.com/sass/libsass/issues/558
Cas réduit : http://sassmeister.com/gist/d2be1def3619bd6c3a54