2014-02-02 4 views
4

У меня есть список классов в паре с цветами, я хотел бы задать разные свойства (color, background, border-color, ...) с определенными цветами внутри mixin.Stylus mixins block

Пример

colorHome = #FFF 
colorParam = #999 
colorDash = #000 

links = { 
    'home': colorHome, 
    'param': colorParam, 
    'dash': colorDash 
} 

.dashboard-menu li 
    border 1px solid 
    +addLinks() 
    color clr 
    background clr 
    border-color clr 

выведет на

.dashboard-menu li { 
    border: 1px solid; 
} 
.dashboard-menu li.home { 
    color: #fff; 
    background: #fff; 
    border-color: #fff; 
} 
.dashboard-menu li.param { 
    color: #999; 
    background: #999; 
    border-color: #999; 
} 
.dashboard-menu li.dash { 
    color: #000; 
    background: #000; 
    border-color: #000; 
} 

Mixin я сейчас, используя блок.

addLinks() 
    for key, value in links 
    clr = value 
    &.{key} 
     {block} 


.dashboard-menu li 
    border 1px solid 
    +addLinks() 
     color clr 
     background clr 
     border-color clr 

Но по какой-то причине, clr устанавливается в первый цвет (colorHome/#FFF) для background и border-color, и устанавливается на последний цвет (colorDash/# 000) для color.

Выход

.dashboard-menu li { 
    border: 1px solid; 
} 
.dashboard-menu li.home { 
    color: #000; 
    background: #fff; 
    border-color: #fff; 
} 
.dashboard-menu li.param { 
    color: #000; 
    background: #fff; 
    border-color: #fff; 
} 
.dashboard-menu li.dash { 
    color: #000; 
    background: #fff; 
    border-color: #fff; 
} 

Учитывая блок Примеси относительно новостей, они могут быть использованы для достижения того, что я хочу? Или я должен использовать использование совершенно другого решения?

Thanks

+0

выглядит хорошо для меня. это не работает? – floww

+0

Если вы посмотрите на вывод, фон и цвет границы всегда одинаковы (#FFF), когда они должны быть #FFF для .home, # 999 для .param и # 000 для .dash. Я установил вывод, который хотел бы (сразу после примера) – sayam

ответ

4

Вам следует рассмотреть возможность использования другого решения. Содержимое, которое вы передаете блочному mixin, оценивается перед кодом mixin, поэтому всегда будет одинаковым от запуска для запуска.

Я не уверен, что именно вы пытаетесь достичь, но вот один пример того, как вы могли бы делать то, что вы уже пробовали:

addLinks(hash) 
    for key, value in links 
    new_hash = clone(hash) 
    for hash_key, hash_value in new_hash 
     if hash_value == clr 
     new_hash[hash_key] = value 

    &.{key} 
     {new_hash} 
     {block} 

.dashboard-menu li 
    border 1px solid 
    addLinks({ 
    color: clr 
    background: clr 
    border-color: clr 
    }) 

Вы можете использовать неблочный подмешать для любых свойств, которые вы хотите применить с цветом от вашего links объекта, и, если вам нужно что-то еще, вы можете использовать блок подмешать обозначения в целом:

.dashboard-menu li 
    border 1px solid 
    +addLinks({ 
     color: clr 
     background: clr 
     border-color: clr 
    }) 
    padding: 10px 

Мы думаем о добавлении способа изменить переданный блок как хэш, но мы еще не здесь :)

+1

Спасибо, что кажется, работает. Я хотел бы добавить функцию в этот цвет: darken (clr, 10), например. Есть ли функция замены в стилусе? Или, по крайней мере, функция для итерации символа символом на строке? (например, строка [index]?) – sayam

+0

Я не уверен, понял ли я ваш комментарий. 1. Вы можете использовать функции в цветах из хэша, как обычно: 'new_hash [hash_key] = darken (значение, 10)', и есть функция replace (работает только с idents или строками), еще не отмеченная. Вы можете увидеть пример использования при тестах: [до] (https://github.com/LearnBoost/stylus/blob/1366361af0a1be55a8ff5324fd2c0de424c43462/test/cases/bifs.replace.styl) и [после] (https: // github. ком/LearnBoost/стилус/BLOB/1366361af0a1be55a8ff5324fd2c0de424c43462/тест/случаи/bifs.replace.css). – kizu

+0

Когда вы планируете добавить способ изменения переданного блока как хэш? Это очень полезная функция. – raciasolvo