大家好,
我正在尝试在这里实现本文中看到的调色板功能。
http://erskinedesign.com/blog/friendlier-colour-names-sass-maps/
这是结果代码
// 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);
}
}
所有迹象似乎都指向此工作,但我收到此错误。
Warning: /Users/xxx/xxx//styles.scss:35: argument `$map` of `map-get($map, $key)` must be a map
我正在使用 Grunt Sass 版本 - 0.16.1
有任何想法吗?
非常感谢
确认的! 我从 libsass 得到以下(JSON)错误,新的API 在 node-sass (未发布)中实现:
{
"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 ,分开; 在 JSON 的message
中,文件名和行号不应重复。 :)
我对此进行了深入研究,似乎是因为 map-get($palettes, $palette)
返回 null。
有什么解决办法吗?
我已将此添加到 3.0.3 里程碑中,它应该会进入下一个版本。
看来我最初的想法是错误的。 问题是因为地图键是颜色名称。 Libsass 在解析颜色名称的字符串时存在一些问题,即https://github.com/sass/libsass/issues/558
简化案例: http :
作为提醒,看起来用户可能会遇到与 sass/sass#363 相关的问题,因为地图键不是字符串,而是颜色。
我相信这是有一定道理的。 我认为地图键被视为颜色而不是字符串,尽管我不确定为什么这是一个问题。
值得注意的是,简化的测试用例在 Ruby sass 上运行良好。
问题是,我们对待purple
在地图键为一个字符串, purple
函数调用的color
。 当我们调用map-get
我们请求的是与紫色相关的值,但它存储在字符串紫色下。 这两件事是不等价的 - http://sassmeister.com/gist/77ae29d46ebecd0823ed
我有一个修复程序,我将在几个小时内发货。
最有用的评论
看来我最初的想法是错误的。 问题是因为地图键是颜色名称。 Libsass 在解析颜色名称的字符串时存在一些问题,即https://github.com/sass/libsass/issues/558
简化案例: http :