[ELMA4] Less

Less – это динамический язык стилей, расширяющий стандартные возможности css. Этот язык позволяет создавать и использовать переменные, писать миксины (примеси), использовать функции и операции, а также писать вложенные стили.

С переходом на less старые css стили остались в тех же местах, но изменили свое расширение на less.

Замена css на less

Для замены файла css на less необходимо:

1. Переименовать расширение файла с css на less. Учтите, что при обычном переименовании история git может быть утеряна, воспользуйтесь утилитами и командами git. Переименование файла желательно делать в отдельном коммите.

2. Заменить регистрацию css файла на less в зависимости от того, как было сделано раньше:

  • если файл css регистрировался через RegisterCssSrc, то его необходимо заменить на RegisterLessSrc и вторым аргументом указать AreaName, например:
//  было:
Html.RegisterCssSrc("SomeStyles.css");
//  стало:
Html.RegisterLessSrc("SomeStyles.less", RouteProvider.AreaName);
  • если файл css регистрировался через Url.Content или Html.LinkCss, то теперь необходимо воспользоваться методом LinkLess с указанием AreaName, например:
//  было:
Url.Content("SomeStyles.css")
//  стало:
Url.LinkLess("SomeStyles.less", RouteProvider.AreaName, null);
//  или для html:
Html.LinkLess("SomeStyles.less", RouteProvider.AreaName);
  • во всех остальных случаях стоит рассмотреть существующие методы регистрации less, при этом удалив регистрацию css файла.

Регистрация файлов less

Импорт в less файлах

Вы можете импортировать less стили в другом less файле.

Пример импорта less файла:

@import "SomeStyles.less";

Если импортируемый стиль находится в другом модуле, то сначала необходимо указать его AreaName через @ перед названием файла стиля.
При этом нельзя импортировать стиль из другого модуля, если в проекте нет ссылки на другой модуль.
Пример:

@import "@EleWise.ELMA.SDK.Web/SomeStyles.less";

index.less

В папке Content web-модулей располагается файл index.less. Если необходимо зарегистрировать стили на всех страницах, стоит добавить импорт стилей в этот файл. Если данного файла не существует в проекте, то необходимо создать файл index.less в папке Content web-модулей и реализовать точку расширения ILayoutLessSourceProvider.

Хэлперы

HtmlHelper.LinkLess – создает элемент <link> для less стилей. Параметры:

  • src – путь до less файла, обязательно с указанием расширения;
  • zone – зона точки расширения, в которой располагается файл стилей.

HtmlHelper.LinkLess – создает элемент <link> для less стилей. Параметры:

  • src – путь до less файла, обязательно с указанием расширения;
  • zone – зона точки расширения, в которой располагается файл стилей;
  • htmlAttributes – html-атрибуты для элемента, может быть null.

UrlHelper.LinkLess – создает элемент <link> для less стилей. Параметры:

  • src – путь до less файла, обязательно с указанием расширения;
  • zone – зона точки расширения, в которой располагается файл стилей;
  • htmlAttributes – html-атрибуты для элемента, может быть null.

HtmlHelper.RegisterLessSrc – зарегистрировать less файл стилей на одной странице. Параметры:

  • src – путь до less файла, обязательно с указанием расширения;
  • zone – зона точки расширения, в которой располагается файл стилей.

Точки расширения

Существует несколько точек расширения, которые позволяют зарегистрировать less файлы.

ILayoutLessSourceProvider – это точка расширения, которая регистрирует less файлы на всех страницах. Эта точка расширения позволяет зарегистрировать стили для конкретных модулей. Используется для регистрации файлов index.less в модулях. Пример реализации ILayoutLessSourceProvider для регистрации стилей index.less:

/// <summary>
/// Регистрация стилей для модуля
/// </summary>
[Component]
internal class SomeModuleLessSourceProvider : ILayoutLessSourceProvider
{
   /// <summary>
   /// Зона модуля, например "EleWise.ELMA.SomeModule.Web"
   /// </summary>
   public string Area
   {
      get
      {
            return RouteProvider.AreaName;
      }
   }

   /// <summary>
   /// Путь до директории со стилями .less, например "~/Modules/" + AreaName + "/Content/"
   /// </summary>
   public string ContentPath
   {
      get
      {
            return RouteProvider.ContentFolder;
      }
   }

   /// <summary>
   /// Имя импортируемого файла
   /// </summary>
   public string FileName
   {
      get
      {
            return "index.less";
      }
   }
}

IThemeLessSourceProvider – это точка расширения, которая позволяет регистрировать файлы стилей для настройки цветовой схемы. Применяется для изменения системных цветов и задания пользовательской цветовой схемы.

Использование переменных цветовой схемы

Существует два файла с переменными цветов: Colors.less и SystemColors.less. Запрещается задавать цвета явно. В SystemColors.less расположены переменные цветовой схемы. По возможности все цвета следует задавать этими переменными. Цвета в файле сгруппированы по области и применению. Пример:

.some-style-block: {
   //  bad
   background-color: white;
   //  good
   background-color: @block-background-color;
}

В Colors.less находятся все цвета, которые можно задавать в файлах стилей. Если ни один цвет из SystemColors не подходит, то нужно объявить переменную в начале файла, присвоить ей значение переменной из Colors.less, а затем использовать объявленную переменную в качестве цвета. Пример:

@some-style-text-color: @green--400;

.some-style: {
   color: @some-style-text-color;
}

Обновление с ELMA3 на ELMA4

При обновлении с ELMA3 на ELMA4 необходимо:

  • переименовать css в less по инструкции выше;
  • заменить все цвета на переменные цветовой схемы SystemColors.less или цвета из Colors.less.