Используя LESS, как я могу сослаться на класс в отдельном файле .less с потрясающим шрифтом?

Задний план

  • Я использую Twitter Bootstrap LESS-исходник с LessJS
  • Я использую font-awesome.less (ссылка из Bootstrap.less)
  • Я удалил раздел значков из бутстрапа, чтобы они не конфликтовали.
  • У меня есть файл site.less, на который я также ссылаюсь из Bootstrap, который содержит некоторые стили, специфичные для сайта.

Цель

Я хотел бы иметь возможность сделать что-то в следующем файле site.css:

.feedbackItemIconPraise
{
    .icon-thumbs-up; //class included in font-awesome.less
    color:Green;
}

Проблема

Когда я пробую описанный выше подход, я получаю следующую ошибку:

введите здесь описание изображения

Эта ошибка имеет смысл; Я просто не уверен, как лучше всего это исправить, не создавая дополнительный импорт font-awesome.less на моем site.less (что, как я полагаю, будет отдельной проблемой).

Чтобы уточнить: Согласно комментариям ниже: у меня есть имя класса, которое я использую из модели представления Knockout. (например, если выбрано «Похвала», будет применен класс «Похвала за отзыв»). Если выбран FeedbackItemPraise, я бы хотел, чтобы он применил класс .icon-thumbs-up из font-awesome (который отображает значок с помощью веб-шрифта), а затем также сделал цвет зеленым.

Что у меня есть до сих пор

Настройка Bootstrap.less (показаны только соответствующие части):

//Sean's customizations
@import "background.less"; // Background images and colors 
@import "font-awesome.less"; // Font Awesome font (SK 2012/09/04)
@import "site.less"; // site-specific LESS

Класс внутри site.less:

.feedbackItemIconPraise
{
    .icon-thumbs-up; //class included in font-awesome.less
    color:Green;
}

person SeanKilleen    schedule 13.09.2012    source источник
comment
Вы пытаетесь вывести feedbackItemIconPraise из icon-thumbs-up   -  person Luke Duddridge    schedule 13.09.2012
comment
Привет Люк! Чтобы уточнить: у меня есть имя класса, которое я использую из модели представления Knockout. (например, если выбрана похвала, будет применен класс FeedbackItemPraise). Если выбран FeedbackItemPraise, я бы хотел, чтобы он применил класс .icon-thumbs-up из font-awesome (который отображает значок с помощью веб-шрифта), а затем также сделал цвет зеленым.   -  person SeanKilleen    schedule 13.09.2012


Ответы (2)


ОБНОВЛЕНО

Если снова взглянуть на Font-Awesome, похоже, что теперь они включили миксины для иконок. См. следующие два файла.

https://github.com/FortAwesome/Font-Awesome/blob/master/less/variables.less

https://github.com/FortAwesome/Font-Awesome/blob/master/less/mixins.less

Используйте как:

.feedbackItemIconPraise
{
    .icon(@thumbs-up-alt)
    color:Green;
}

ОРИГИНАЛ

Если вы посмотрите на font-awesome.less, вы увидите, что этого класса не существует, на самом деле это .icon-thumbs-up:before. К сожалению, вы не можете использовать псевдоклассы в качестве примесей, например .icon-thumbs-up:before;.

Вам нужно будет изменить файл font-awesome.less (или просто добавить этот класс, или просто поставить content: "\f087"; прямо туда, куда он должен идти), чтобы была версия без :before:

.icon-thumbs-up:before            { content: "\f087"; }
.icon-thumbs-up                   { content: "\f087"; }

Затем примените эту концепцию:

.feedbackItemIconPraise {
    font-family: "FontAwesome";
    font-size: 90px;
    padding-top: 7px;

    font-weight: normal;
    font-style: normal;
    display: inline-block;
    text-decoration: inherit;

    &:before {
        .icon-thumbs-up;
    }

}

Кажется, значки Font-Awesome должны использовать псевдоним :before, чтобы они отображались.

Демонстрация: http://pulse-dev.com/files/stackoverflow/fontawesomeclass/

person Patrick    schedule 13.09.2012
comment
Патрик, если я уже включил и site.less, и font-awesome.less в свой файл bootstrap.less, не будет ли контрпродуктивным включение font-awesome.less в мой файл site.less? Кажется, это приведет к конфликтам. - person SeanKilleen; 13.09.2012
comment
Я обновил свой вопрос, чтобы предоставить дополнительную информацию, чтобы вы могли видеть, как я излагаю вещи. - person SeanKilleen; 13.09.2012
comment
Извините, я лох. Это должно было быть @import "font-awesome.less"; . Плохой с+р. В любом случае смотрите мой обновленный ответ. - person Patrick; 13.09.2012
comment
Любая причина, по которой вы пытаетесь применить значок через файл LESS? Смотрите второе редактирование. - person Patrick; 13.09.2012
comment
Да, это нормально. Если вы статически примените это к любому элементу li, div или i, это сработает. Итак, что я пытаюсь сделать, так это применить класс в меньшем количестве, который также содержит этот класс, чтобы я мог поддерживать имена в соответствии с моей ViewModel (которая автоматически генерирует имя класса, которое необходимо применить на основе элемента, который выбран). Итак, мой вопрос: почему, если у меня есть все ссылки из bootstrap.less и это работает вручную, я не могу использовать синтаксис LESS для применения класса, который находится в другом меньшем файле. - person SeanKilleen; 13.09.2012
comment
@SeanKilleen - интересно, есть ли у вас лучшее решение? - person Patrick; 18.12.2012
comment
Привет, Патрик, дайте мне знать, если это сообщение в блоге, которое я сделал, отвечает на него: seankilleen.com/2012/12/ Если это так, я могу дать ссылку здесь и резюмировать. Я ответил на этот конкретный вопрос, но кажется, что ответ может быть более общим. - person SeanKilleen; 18.12.2012
comment
@SeanKilleen Нет, меня интересовал конкретный вопрос. Надеюсь, что вы, возможно, нашли лучший/более простой способ, чем мой метод! Возможно, просто нужно надеяться, что псевдоклассы станут действительными миксинами в LESS. - person Patrick; 18.12.2012
comment
Мне не приходилось вникать в это какое-то время, но, вероятно, я скоро снова открою его, и в этом случае я углублюсь и опубликую ответ, если что-то найду. - person SeanKilleen; 18.12.2012

Для этого может быть другое решение, но я объединяю свои скрипты в один файл (автоматически), прежде чем запускать его через компилятор LESS. Это позволяет мне заранее определять переменные и примеси, которые можно использовать в любом из моих LESS-файлов.

В онлайн-документации упоминается, что LESS может включать файлы @import, делая доступными переменные и примеси. Вам может потребоваться убедиться, что вы используете последнюю версию компилятора, и если файлы импорта организованы в структуру папок, вам может потребоваться указать компилятору, где искать.

var parser = new(less.Parser)({
    paths: ['.', './lib'], // Specify search paths for @import directives
    filename: 'style.less' // Specify a filename, for better error messages
});
person Fenton    schedule 13.09.2012
comment
Сони: Это то, чем я занимаюсь, вот почему это странно. Я использую файл bootstrap.less. Импортированы шрифты font-awesome.less и site.less. В site.less я имею в виду класс, являющийся частью font-awesome.less, поэтому я ожидал, что это сработает, но это не так. - person SeanKilleen; 13.09.2012
comment
@goober На самом деле я объединяю их в один физический файл, а не использую @import. - person Fenton; 17.09.2012
comment
Ааа, спасибо за разъяснение! Я слишком торопливо читал. Я обязательно рассмотрю это как возможное решение. - person SeanKilleen; 17.09.2012
comment
@goober нет проблем - добавил примечание о @import к ответу. - person Fenton; 17.09.2012