2014-03-11 6 views
0

РЕДАКТИРОВАТЬ: Проблема может быть с ошибкой в ​​бесцеремонном, что мы и используем.Меньше Mixin, используя переменную в селекторе атрибутов

Я пытаюсь написать метод Less Mixin для написания множества стилей CSS. Общий формат метода:

.icon-styles(@name) { 

    [email protected]{name}-icon { 
     background-image: url('../images/[email protected]{name}.png'); 
     display: none; 
    } 

    [[email protected]{name}="true"] [email protected]{name}-icon { 
     display: inline-block; 
    } 
} 

Такое, что является видимым только, если содержащий объект имеет соответствующий набор атрибутов.

Однако я получаю сообщение об ошибке на селектор атрибута, говоря:

Expected ']' but found '{' 

Указав на @ в квадратных скобках.

Я нашел этот пост:

LESS mix variable into attribute name in an attribute selector expression

С подобным вопросом, и ответ предполагает, что это может быть ошибка, но, к сожалению, обходной путь не работает для меня. Я получаю ту же ошибку при попытке записать attr внутри скобок.

Я также пытался писать так:

[~'[email protected]{name}'="true"] [email protected]{name}-icon { 

Что избавляется от ошибки, но затем @ {имя} не будет решена в результате CSS.

Кто-нибудь знает, есть ли способ достичь того, чего я хочу?

ответ

1

Трюк такой же, как предлагается в LESS mix variable into attribute name in an attribute selector expression. Вы просто отсутствует главный пункт этого: «конкатенация интерполяцией переменных не поддерживается внутри [attr] блоков», так что вам нужно, чтобы выйти из него:

.icon-styles(@name) { 

    [email protected]{name}-icon { 
     background-image: url('../images/[email protected]{name}.png'); 
     display: none; 
    } 

    @data-name: ~'[email protected]{name}'; 
    [@{data-name}="true"] [email protected]{name}-icon { 
     display: inline-block; 
    } 
} 
+0

Это то, что я пробовал. Попробовал это снова, просто вырезал-в-вставку из вашего ответа, и я до сих пор получаю: «Ожидаемый»), но нашел «{» '... –

+0

Я также попытался (просто посмотреть, что произойдет):' [icon-name = @ {name}] 'и я получаю ту же ошибку. –

+1

@SvendHansen: Это должен быть ваш конкретный процессор LESS, который вы используете, поскольку приведенный выше код работает на [less2css.org] (http://less2css.org/) до версии 1.4. – ScottS

Смежные вопросы