Всем привет,
Я пытаюсь реализовать функцию цветовой палитры, описанную в этой статье здесь.
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
Любые идеи?
Большое спасибо
Подтвержденный! Я получаю следующую ошибку (JSON) от libsass с новым 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 отдельно; в message
JSON имя файла и номер строки не должны повторяться. :)
Я углубился в это, и оказалось, что map-get($palettes, $palette)
возвращает null.
Есть еще какое-нибудь решение?
Я добавил это к этапу 3.0.3, он должен войти в следующий выпуск.
Похоже, мои первоначальные мысли были неправильными. Проблема в том, что ключ карты - это название цвета. У Libsass есть некоторые проблемы, когда дело доходит до синтаксического анализа строк с именами цветов, например https://github.com/sass/libsass/issues/558.
Уменьшенный регистр: http://sassmeister.com/gist/d2be1def3619bd6c3a54
В качестве предупреждения, похоже, что пользователь может столкнуться с проблемой, связанной с sass / sass # 363, в этих цветах, поскольку ключи карты не строки, а цвета.
Я считаю, что это отчасти правда. Я думаю, что ключ карты обрабатывается как цвет, а не строка, хотя я не уверен, почему это проблема.
Стоит отметить, что сокращенный тестовый пример отлично работает на Ruby sass.
Проблема в том, что мы обрабатываем purple
в ключе карты как строку, а purple
в вызове функции как color
. Когда мы вызываем map-get
мы запрашиваем значение, связанное с фиолетовым цветом, но оно сохраняется под строкой purple. Эти две вещи не эквивалентны - http://sassmeister.com/gist/77ae29d46ebecd0823ed
У меня есть исправление, которое я отправлю через пару часов.
Самый полезный комментарий
Похоже, мои первоначальные мысли были неправильными. Проблема в том, что ключ карты - это название цвета. У Libsass есть некоторые проблемы, когда дело доходит до синтаксического анализа строк с именами цветов, например https://github.com/sass/libsass/issues/558.
Уменьшенный регистр: http://sassmeister.com/gist/d2be1def3619bd6c3a54