Расширение значков Фонтелло

Я пытаюсь расширить псевдоклассы значков, сгенерированные Fontello, в меньшем количестве.

Теперь, пока это работает:

.icon-extended:before:extend(.icon-caret-n:before) {}

Это не:

ul.checked li:before:extend(.icon-ok:before) {color: #4fa33b;}

Не понимаю, почему?

В этом случае li:before получит определение контента от .icon-ok:before, но не общие стили от [class^="icon-"]:before, [class*=" icon-"]:before.

Мне кажется баг?


person Birgit Zimmermann    schedule 27.11.2013    source источник
comment
Я не думаю, что это ошибка, максимум не реализованная функция. Extend не ищет надмножеств указанного селектора. По той же причине он не будет расширять простой селектор * (который также является надмножеством .icon-ok:before). Однако, принимая во внимание, что есть опция extend(... all), которая реализует своего рода сопоставление надмножеств (только для разных видов надмножеств), вероятно, имеет смысл хотя бы рассмотреть это новое расширение. Я рекомендую вам написать специальный отчет о проблеме/запрос функции здесь.   -  person seven-phases-max    schedule 27.11.2013


Ответы (1)


Ваш первый случай...

.icon-extended:before:extend(.icon-caret-n:before) {}

... вы расширяете что-то, что имеет класс с именем .icon-extended, так что этот класс также соответствует селекторам [class^="icon-"], [class*=" icon-"], поэтому он работает (в данном случае он не имеет ничего общего с :extend).

Ваш второй случай...

ul.checked li:before:extend(.icon-ok:before) {color: #4fa33b;}

... вы расширяете что-то, что не имеет значения a icon-, указанного в его селекторе ul.checked li, и поэтому не будет и не должно соответствовать ни [class^="icon-"], ни [class*=" icon-"]. Теперь ваше расширение не изменяет имя класса, а просто добавляет селектор в блок кода, определяющий .icon-ok:before (и только этот блок кода). Расширение LESS смотрит исключительно на строку селектора .icon-ok:before и не является «умным», зная, что такой селектор будет соответствовать другим строкам селектора [class^="icon-"], [class*=" icon-"] (по сути, это то, о чем был комментарий Seven-Phases-Max). Поэтому вы должны сделать это явно, вероятно, лучше всего так:

ul.checked li:before:extend(
  .icon-ok:before,
  [class^="icon-"]:before,
  [class*=" icon-"]:before) {
    color: #4fa33b;
}
person ScottS    schedule 29.11.2013
comment
Ваш пример приведет к ошибке ({} после &:extend(...) по какой-то причине недопустимо). Подойдет один из этих. - person seven-phases-max; 01.12.2013
comment
@семь фаз-макс: Спасибо. Сайт less2css.org не работает, и именно на нем я обычно тестирую весь свой код, поэтому у меня не было возможности это проверить. - person ScottS; 01.12.2013
comment
Вы также можете протестировать с помощью winless.org/online-less-compiler (хотя он предоставляет только последние версия компилятора LESS) - person seven-phases-max; 01.12.2013