Перечисления / Документация с LESS Mixins

Я создаю набор LESS-миксинов с Visual Studio / Web Essentials.

Можно ли написать XML-документацию для LESS-миксинов? Или, возможно, есть перечисление для ограничения вводимых параметров?

Например, с этим миксином:

.background-clip(@value)
{
    -webkit-background-clip: @value;
       -moz-background-clip: @value;
            background-clip: @value;
}

Было бы неплохо иметь некоторую документацию, описывающую три возможных значения, точно так же, как когда вы создаете обычный селектор CSS для background-clip -


person William    schedule 06.01.2014    source источник


Ответы (1)


Список допустимых значений "Enum"

Это можно сделать с помощью параметрического вызова миксина, например:

.background-clip(@value) when (@value = border-box),
                              (@value = padding-box),
                              (@value = content-box),
                              (@value = inherit)
{
    -webkit-background-clip: @value;
       -moz-background-clip: @value;
            background-clip: @value;
}

Это позволяет передать только четыре заданных значения для активации. Итак, это:

.test1 {
  .background-clip(border-box);
}

.test2 {
  .background-clip(something);
}

Дает такой результат (игнорируя второй вызов, потому что он недействителен):

.test1 {
  -webkit-background-clip: border-box;
  -moz-background-clip: border-box;
  background-clip: border-box;
}

Прокомментированный отзыв

Если требуется обратная связь с пользователем, то второй параметрический миксин может предложить это в виде комментария.

ВАРИАНТ 1 - чистый комментарий

.background-clip(@value) when not (@value = border-box) and
                              not (@value = padding-box) and
                              not (@value = content-box) and
                              not (@value = inherit)
{
  /* WARNING - INVALID INPUT
     CSS output for backbround-clip property given in
     LESS .background-clip() call has been suppressed
     due to invalid input.

     VALID INPUT is one of:
       border-box
       padding-box
       content-box
       inherit
  */
}

Тогда приведенный выше тестовый пример будет иметь следующий дополнительный вывод:

.test2 {
  /* WARNING - INVALID INPUT
     CSS output for backbround-clip property given in
     LESS .background-clip() call has been suppressed
     due to invalid input.

     VALID INPUT is one of:
       border-box
       padding-box
       content-box
       inherit
  */
}

ВАРИАНТ 2 включает фиктивное значение свойства, чтобы показать неправильный ввод @value:

.background-clip(@value) when not (@value = border-box) and
                              not (@value = padding-box) and
                              not (@value = content-box) and
                              not (@value = inherit)
{
  /* WARNING - INVALID INPUT */
  invalid-background-clip-input-equals: @value;
  /* CSS output for backbround-clip property given in
     LESS .background-clip() call has been suppressed
     due to invalid input.

     VALID INPUT is one of:
       border-box
       padding-box
       content-box
       inherit
  */
}

Что выводит этот дополнительный тестовый пример CSS:

.test2 {
  /* WARNING - INVALID INPUT */
  invalid-background-clip-input-equals: something;
  /* CSS output for backbround-clip property given in
         LESS .background-clip() call has been suppressed
         due to invalid input.

         VALID INPUT is one of:
           border-box
           padding-box
           content-box
           inherit
      */
}

Браузеры проигнорируют нераспознанное «свойство» invalid-background-clip-input-equals, но предупредят человека, просматривающего скомпилированный CSS, о недопустимости переданного значения.

ВАРИАНТ 3 включает фиктивный (т.е. неопределенный) миксин, который потенциально может вызвать ошибку компиляции (разные компиляторы могут обрабатывать неопределенные миксины по-разному):

.background-clip(@value) when not (@value = border-box) and
                              not (@value = padding-box) and
                              not (@value = content-box) and
                              not (@value = inherit)
{
   .background-clip-undefined();
}

Что выводит в этот компилятор эту информацию:

SyntaxError: .background-clip-undefined is undefined on line 24, column 3:

23 .test2 {
24   .background-clip(something);
25 }

Это может быть способом «заставить» менее программиста ввести допустимое значение, выдав ошибку. Обратите внимание, что в этом случае фактический неопределенный миксин, дающий ошибку, - это .background-clip-undefined(), но этот компилятор фактически предоставляет "вызывающую" информацию .background-clip(something), которая на самом деле является ошибкой.

Можно комбинировать варианты 2 и 3, чтобы, если компилятор не выдает ошибку, по крайней мере, обратная связь с комментарием видна.

person ScottS    schedule 10.01.2014
comment
Идеально! Спасибо за такой отличный ответ! - person William; 12.01.2014
comment
ScottS, это хороший ответ, но можно ли сделать так, чтобы компиляция less не удалась вместо того, чтобы игнорировать использование плохой примеси ??? - person Sebastien Lorber; 03.12.2015
comment
@SebastienLorber: обновлен Вариант 3, который может работать, чтобы выполнить то, что вы просили (хотя это может зависеть от компилятора, какой будет эффект и какая информация будет возвращена). - person ScottS; 03.12.2015
comment
ScottS, который, вероятно, работает :), однако это немного хакерско и требует слишком большого количества шаблонов, создавая предложения when not, которые будут мне полезны. Я создал эту проблему и, вероятно, скоро создам плагин меньшего размера: github .com / less / less.js / issues / 2747 # issuecomment-161789791. - person Sebastien Lorber; 04.12.2015