Как настроить Twitter Bootstrap CSS с помощью переменных LESSCSS?

Я пытаюсь настроить Twitter Bootstrap CSS без изменения локальных копий кода начальной загрузки. * Поэтому я клонировал проект Twitter Bootstrap в одну папку и имел код приложения в своей собственной папке:

/html
    /bootstrap
       ...etc...
       /js
       /less
    /MyApp
       ...etc...
       /common_files
          /less
             style.less

В моем файле style.less я определяю несколько LESS-переменных, затем включаю файлы начальной загрузки:

/* custom settings that deviate from Bootstrap default values */
@sansFontFamily: Trebuchet MS, Tahoma, sans-serif, Arial;
@baseFontSize: 11px;
@baseLineHeight: 18px;

/* import bootstrap components from bootstrap-dedicated folder */
@import "../../../bootstrap/less/bootstrap.less";
@import "../../../bootstrap/less/responsive.less";

Так как переменные LESSCSS действительно являются константами, я удивлен, что мой @sansFontFamily не получает, когда я компилирую файлы LESS в CSS: lessc style.less > MyApp.css --yui-compress

Итак... что мне не хватает? Почему мои переменные заменяются переменными, определенными в файлах LAST Bootstrap?

* - Я проверил " "Рекомендации по настройке бутстрапа Twitter" , но подумать, что использование констант было бы лучшим подходом (если я могу получить его работа).

Ответ 1

Правильный подход заключается в том, чтобы сначала импортировать ресурсы начальной загрузки, а затем определить пользовательские значения с помощью переменных LESS. Итак, учитывая структуру каталогов в вопросе:

Если вы используете Bootstrap версии 2.x:

/* import bootstrap components from bootstrap-dedicated folder */
@import "../../../bootstrap/less/bootstrap.less";
@import "../../../bootstrap/less/responsive.less";

/* custom settings that deviate from Bootstrap default values */
@sansFontFamily: Trebuchet MS, Tahoma, sans-serif, Arial;
@baseFontSize: 11px;
@baseLineHeight: 18px;

Если вы используете Bootstrap версии 3.x:

/* import bootstrap components from bootstrap-dedicated folder */
@import "../../../bootstrap/less/bootstrap.less";

/* custom settings that deviate from Bootstrap default values */
@font-family-sans-serif: Trebuchet MS, Tahoma, sans-serif, Arial;
@font-size-base: 11px;
@line-height-base: 18px;

Полный список переменных можно найти в файле variables.less.

Ответ 2

Совет PeterVR для перемещения объявлений пользовательских переменных ниже инструкций бутстрапа @import корректен в соответствии с документами здесь http://lesscss.org/#-variables. Это означает:

При определении переменной дважды используется последнее определение переменной, выполняющее поиск из текущей области вверх. Например:

@var: 0;
.class1 {
    @var: 1;
    .class {
        @var: 2;
        three: @var;
        @var: 3;
    }
    one: @var;
}

Скомпилируется:

.class1 .class {
    three: 3;
}
.class1 {
    one: 1;
}

(образец кода отредактирован - есть пара опечаток в их версии!)

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

  • Обработать все @imports для создания одного фрагмента кода LESS
  • Пройдите через код LESS и соберите все объявления переменных (по блоку области)
  • Любое значение объявления переменной заменяет любой предыдущий экземпляр с тем же именем (для каждого блока)
  • Замените переменные-заполнители значениями переменных

Это объясняет, почему значение .class1 .class { three: равно 3, хотя оно было объявлено перед объявлением @var: 3;.

Ответ 3

Привет, я получил лучший способ от случайного поиска в Интернете

http://ollomedia.com/using-twitter-bootstrap-the-right-way/

Пример исходного кода, пожалуйста, скачайте и просмотрите

http://ollomedia.com/wp-content/uploads/sample.zip

Ответ 4

Я сделал что-то подобное недавно, и лучшим подходом, который я нашел, было создание моего собственного "variables_override.less" и импорт этого после импорта стандартных переменных .less в bootstrap.less и responsive.less. Затем скомпилируйте оба файла как обычно, и ваши переменные переопределяют значения по умолчанию для начальной загрузки

Этот подход подразумевает модификацию bootsrap.less и responsive.less, но очень минимальным образом