Libsass: Los colores con nombre no funcionan como teclas de mapa

Creado en 17 nov. 2014  ·  8Comentarios  ·  Fuente: sass/libsass

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

Bug - Confirmed Dev - Test Written

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

Todos 8 comentarios

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

¿Fue útil esta página
0 / 5 - 0 calificaciones