CSS

Актуальные стили CS-Cart базируются на нативных возможностях CSS. Современный CSS имеет большие возможности, например переменные и математические операции calc.

LESS

LESS —это препроцессор CSS, который расширяет возможности обычного CSS. Подробнее см. на официальном сайте LESS.

LESS-стили помечены как устаревшие; их поддержка будет удалена в будущем. Новые стили пишутся без использования возможностей, например стили для темы Nova.

На данный момент поддержка LESS стилей остается для сохранения обратной совместимости.

Рекомендации по работе с LESS

  • Используйте функциональность LESS только в специальных местах:
    • styles/data/style_name.less — использование функций LESS и присваивание их к LESS переменным;
    • css/tygh/less_functions.less — присваивание полученных ранее LESS переменных к CSS переменным для последующего его использования в других местах. Так же здесь можно использовать миксины.

Пример

// styles/data/Nova_theme.less
@menu: #fff;
@menu_hover: darken(@menu, 5%);

// css/tygh/less_functions.less
:root {
    --cs-menu: @menu;
    --cs-menu-hover: @menu_hover;
}

// css/blocks/topmenu_dropdown.less
.ty-menu__items {
    background: var(--cs-menu);
}

.ty-menu__item-active .ty-menu__item-link {
    background: var(--cs-menu-hover);
}
  • Примеры использования:
    • design/themes/nova_theme/styles/data/Nova_theme.less — использование LESS функций
    • design/themes/nova_theme/css/tygh/less_functions.less — присваивание к CSS переменным
    • design/themes/nova_theme/css/blocks/topmenu_dropdown.less — использование CSS переменных

Важно

  • Новые CSS стили в CS-Cart пишутся в .less файлах для поддержки обратной совместимости.
  • Математические операции в LESS стилях ведут себя не так, как в CSS стилях. Подробнее см. в разделе “Операции”.

В следующем разделе будет описано, как перейти с LESS на нативный CSS.

Переменные

Данная функциональность позволяет создавать переменные и использовать их для определения значений свойств в нескольких местах.

Пример:

@price: #343434;

LESS переменные в CS-Cart относятся к понятию Стилей (см. раздел “Стили и редактор тем” далее).

В директории design/themes/THEME_NAME/styles/data в папке установки CS-Cart находятся файлы .less, содержащие переменные LESS, относящиеся к Редактору тем (где THEME_NAME — имя вашей темы).

Эти значения можно отредактировать в файле или получить в Редакторе тем после сохранения стиля.

Значения переменных в файле .less в данной директории можно редактировать только в этом файле. Например, если переменная @price также определяется в файле styles.less, это значение не будет работать, т.к. значения переменных файла .../styles/data/.less включаются в последнюю очередь.

Переход на CSS

Присваивайте LESS переменные к CSS переменным и используйте их:

:root {
    --cs-menu: @menu;
}

Миксины

Миксины позволяют включать все свойства одного класса в другой класс, включив только имя класса в качестве одного из значений свойств. Это напоминает работу с переменными, но применительно к целым классам.

Миксины могут вести себя как функции и принимать аргументы, например:

rounded-corners (@radius: 5px) {
border-radius: @radius;
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
}

#header {
.rounded-corners;
}
#footer {
.rounded-corners(10px);
}

В CS-Cart используется набор миксинов Bootstrap 2.3. Они хранятся в файле mixins.less, который находится в папке design/themes/responsive/css/tygh. В этом файле находятся миксины утилит и миксины компонетов.

  • Миксины утилит - простые миксины для конкретных целей.
  • Миксины компонентов - комплексные миксины, которые используются создания сетки.

Миксины позволяют сократить количество правил и используются для свойств с префиксами в браузерах.

Переход на CSS

До:

.my-class-rounded() when (@rounded_corners = true) {
    .my-class {
        border-radius: var(--cs-base-border-radius);
    }
}

.my-class-rounded();

После:

// css/tygh/less_functions.less
.roundedCornersRadiusMixin() when (@rounded_corners = true) {
    --cs-base-rounded-corners-radius: var(--cs-base-border-radius);
}

.roundedCornersRadiusMixin() when (@rounded_corners = false) {
    --cs-base-rounded-corners-radius: 0;
}

:root {
    .roundedCornersRadiusMixin();
}
.my-class {
    border-radius: var(--cs-base-rounded-corners-radius);
}

Операции

Данная функциональность позволяет использовать в правилах математические операции: сложение, вычитание, умножение и деление.

Пример:

width: (900 / @columns)px;

Переход на CSS

Будьте внимательны при написании математических операций в .less файлах.

Вот пример частой ошибки. Если написать:

.my-class {
    width: calc(50% - 10px);
}

то в итоговом CSS можно получить следующий неожиданный результат:

.my-class {
    width: calc(40%);
}

Чтобы этого избежать, экранируйте математические операции, например:

.my-class {
    width: ~"calc(50% - 10px)";
}

В результате получаем:

.my-class {
    width: calc(50% - 10px);
}

Если вы хотите, чтобы исходный Less код был CSS-валидным, используйте следующие LESS хаки:

  1. Операции, состоящие из двух элементов, одна из которых переменная, не вызывает ошибки.
.my-class {
    width: calc(var(--foo) * 2);
}
  1. Заранее упростите выражение.

До:

.my-class {
    width: calc(var(--foo) + 10px + 20px);
}

После:

.my-class {
    width: calc(var(--foo) + 30px);
}
  1. Вынесите значение другого типа в переменную.

До:

.my-class {
    width: calc(50% + 10px);
}

После:

.my-class {
    --my-class-percent: 50%;

    width: calc(var(--my-class-percent) + 10px);
}
  1. Разбейте одно выражение на несколько.

До:

.my-class {
    width: calc(var(--foo) + var(--bar) + 10px);
}

После:

.my-class {
    --my-class-part-1: var(--foo) + var(--bar);
    --my-class-part-2: 10px;

    width: calc(var(--my-class-part-1) + var(--my-class-part-2));
}

Обязательно проверьте итоговый CSS, чтобы убедиться в корректном поведении.

Функции

LESS содержит ряд функций для работы с цветом, математические функции, функции для работы со строковыми данными.

В CS-Cart используются следующие операции:

  • lighten(@color, 10%) — возвращает цвет на 10% светлее текущего цвета.
  • darken(@color, 10%) — возвращает цвет на 10% темнее текущего цвета.

Эти операции относятся к стилям и редактору тем. Используя один основной цвет, вы можете изменить цвета других элементов, делая основной цвет светлее или темнее.

  • percentage(0.5) — конвертирует значение в проценты. Используется при создании сетки и колонок.

Переход на CSS

До:

.my-class {
    background: darken(@menu, 5%);
}

После:

// styles/data/Nova_theme.less
@menu_hover: darken(@menu, 5%);
// css/tygh/less_functions.less
:root {
    --cs-menu-hover: @menu_hover;
}
.my-class {
    background: var(--cs-menu-hover);
}

Вложенные правила

Данная функциональность позволяет вкладывать одни правила в другие. Вложенные правила используются в CS-Cart не так часто, т.к. это осложняет правило для работы с инструментами для разработчика. При поиске вложенных правил, скопированных из инструментов разработчика, необходимо учитывать родительское правило.

Переход на CSS

Не используйте вложенные правила. Вместо

#header {
    color: black;
    .navigation {
        font-size: 12px;
    }
    .logo {
        width: 300px;
    }
}

пишите обычный CSS:

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}

Подробнее о других возможностях LESS читайте на официальном сайте LESS.

Обратите внимание, что не все из них работают в CS-Cart.

Структура папок и файлов

Путь до темы в папке css: design/themes/THEME_NAME.

  • Папка css/addons — стили модулей.
  • Папка css/lib — стили сторонних разработчиков. Сюда входят стили библиотеки jquery.
  • Папка css/tygh — поддерживающие стили.
  • css/tygh/reset.less— сброс стилей. Используется normalize.css.
  • css/tygh/print.less — стили для печати.
  • ss/flags.less — стили для отображения флагов стран.
  • css/design_mode.less — стили, которые используются в шаблонах и в режиме перевода.
  • css/theme_editor.less — стили, которые используются в Редакторе тем.
  • css/grid.css — языковые переменные и миксины, которые используются для создания сетки фиксированного макета.
  • css/mixins.less — набор LESS миксинов.
  • Папка css/hooks — подключает стили с импортом:
  • styles/imports.post.less — после импорта.
  • styles/common.post.less — после общих стилей (стили тегов, кнопок, вспомогательных классов, форм и т.д.).
  • styles/main.post.less — после основных стилей (главная точка входа).
  • styles/index.post.less — после последнего импорта (простое оформление заказа, нижняя панель, средство предварительного просмотра, телефон и т.д.).
  • responsive/index.post.less — после стилей responsive.
  • rtl/index.post.less — после стилей RTL.

Следующие папки доступны только в теме Nova:

  • Папка css/blocks — стили блоков (товары, фильтры для товаров, шаблоны списков, надстройки и т.д.).
  • Папка css/common — общие стили (кнопки, поля ввода, таблицы, разбиение на страницы, сортировка и т.д.).
  • Папка css/components — стили компонентов (навигационная мобильная панель).
  • Папка css/views — стили просмотра (товары, категории, оформление заказа, компании, страницы и т.д.).

Стили, которые используются для макета Responsive:

  • css/responsive-utilities.less — классы bootstrap, которые используются для того, чтобы отобразить или скрыть содержимое на экране в зависимости от разрешения.
  • css/responsive.less — стили, которые используются для разных разрешений экрана.

Основной файл — styles.less. В нем содержатся стили темы. Файлы, которые хранятся в css/tygh, включены в styles.less с оператором @import.

Порядок включения файлов стилей (.css and .less)

  • Все файлы .css включены посредством hooks: pre (которые добавляются через модуль).
  • Все файлы .css включаются в порядке, в котором они определены в файле design/themes/basic/templates/common/styles.tpl
  • Все файлы .css включаются посредством hooks: post (которые добавляются через модуль).
  • Все файлы .less включаются посредством hooks: pre (которые добавляются через модуль).
  • Все файлы .less включаются в порядке, в котором они определены в файле design/themes/basic/templates/common/styles.tpl
  • Все файлы .less включаются посредством hooks: post (которые добавляются через модуль).
  • Все встроенные файлы, которые добавляются в шаблон design/themes/basic/templates/common/styles.tpl с тегом <style></style>.
  • Включается предустановленный файл .less.
  • Все стили, добавленные в поле Custom CSS в Редакторе тем.

Хуки, включающие стили, обрабатываются в порядке, определяемом по приоритету.

Все файлы собираются в одном css. Это делается для сокращения числа запросов.

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