Libsass: Именованные цвета не работают как ключи карты

Созданный на 17 нояб. 2014  ·  8Комментарии  ·  Источник: sass/libsass

Всем привет,

Я пытаюсь реализовать функцию цветовой палитры, описанную в этой статье здесь.

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

Любые идеи?

Большое спасибо

Bug - Confirmed Dev - Test Written

Самый полезный комментарий

Похоже, мои первоначальные мысли были неправильными. Проблема в том, что ключ карты - это название цвета. У Libsass есть некоторые проблемы, когда дело доходит до синтаксического анализа строк с именами цветов, например https://github.com/sass/libsass/issues/558.

Уменьшенный регистр: http://sassmeister.com/gist/d2be1def3619bd6c3a54

Все 8 Комментарий

Подтвержденный! Я получаю следующую ошибку (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

У меня есть исправление, которое я отправлю через пару часов.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги