Hola a todos,
Estoy tratando de implementar una función de paleta de colores que se ve en este artículo aquí.
http://erskinedesign.com/blog/friendlier-colour-names-sass-maps/
Este es el código resultante
// 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);
}
}
Todas las señales parecen apuntar a que esto funciona, pero obtengo este error.
Warning: /Users/xxx/xxx//styles.scss:35: argument `$map` of `map-get($map, $key)` must be a map
Estoy usando la versión de Grunt Sass - 0.16.1
¿Algunas ideas?
Muchas gracias
¡Confirmado! Recibo el siguiente error (JSON) de libsass, con la nueva API implementada en node-sass (inédita):
{
"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 , por separado; en message
de JSON, el nombre de archivo y el número de línea no deben repetirse. :)
Investigué en esto y parecía ser porque map-get($palettes, $palette)
devuelve nulo.
¿Alguna solución todavía?
Agregué esto al hito 3.0.3 que debería estar en la próxima versión.
Parece que mis pensamientos iniciales estaban equivocados. El problema es que la clave del mapa es un nombre de color. Libsass tiene algunos problemas cuando se trata de analizar cadenas que son nombres de color, es decir, https://github.com/sass/libsass/issues/558
Estuche reducido: http://sassmeister.com/gist/d2be1def3619bd6c3a54
Como aviso, parece que el usuario puede estar corriendo con el problema relacionado con sass / sass # 363 en que los colores ya que las claves del mapa no son cadenas, sino colores.
Creo que esto es cierto en cierto modo. Creo que la clave del mapa se trata como un color en lugar de una cadena, aunque no estoy seguro de por qué esto es un problema.
Vale la pena señalar que el caso de prueba reducido funciona bien en Ruby Sass.
El problema es que tratamos purple
en la clave del mapa como una cadena y purple
en la llamada de función como color
. Cuando llamamos a map-get
estamos preguntando por el valor asociado con el color violeta, pero está almacenado debajo de la cadena violeta. Estas dos cosas no son equivalentes: http://sassmeister.com/gist/77ae29d46ebecd0823ed
Tengo una solución que enviaré en un par de horas.
Comentario más útil
Parece que mis pensamientos iniciales estaban equivocados. El problema es que la clave del mapa es un nombre de color. Libsass tiene algunos problemas cuando se trata de analizar cadenas que son nombres de color, es decir, https://github.com/sass/libsass/issues/558
Estuche reducido: http://sassmeister.com/gist/d2be1def3619bd6c3a54