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 хаки:
- Операции, состоящие из двух элементов, одна из которых переменная, не вызывает ошибки.
.my-class { width: calc(var(--foo) * 2); }
- Заранее упростите выражение.
До:
.my-class { width: calc(var(--foo) + 10px + 20px); }После:
.my-class { width: calc(var(--foo) + 30px); }
- Вынесите значение другого типа в переменную.
До:
.my-class { width: calc(50% + 10px); }После:
.my-class { --my-class-percent: 50%; width: calc(var(--my-class-percent) + 10px); }
- Разбейте одно выражение на несколько.
До:
.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. Это делается для сокращения числа запросов.
При поиске стиля имеется одно неудобство, вызванное тем, что все файлы собираются в один: невозможно найти конкретный файл и строку, в которой находится стиль, при использовании инструментов разработчика.