Компоненты и шаблоны компонентов могут иметь таблицы стилей CSS для использования в режимах просмотра и редактирования. Привязка стилей к шаблонам компонентов позволяет облегчить внедрение их вёрстки и их перенос (экспорт и последующий импорт) на другие сайты, избежать дублирования стилей шаблонов компонентов в разных макетах дизайна.
Обратите внимание, что все компоненты для поддержки стилей компонентов выводятся с добавлением дополнительной разметки, что необходимо учитывать при вёрстке и внедрении макетов дизайна. Значение по умолчанию для параметра «отключить дополнительную разметку» для создаваемых компонентов можно указать в настройках системы в блоке «Компоненты».
В режиме просмотра сайта (но не в режиме редактирования или администрирования) для страниц, запрошенных с параметром isNaked=1 ("не выводить хедер и футер макета дизайна"), дополнительная разметка не добавляется.
Стили шаблона компонента можно изменить:
SiteStyles.css.При выводе на сайте (в режиме просмотра или редактирования, но не в режиме администрирования) ряд блоков оборачиваются в дополнительный блок <div>.
Служебный блок <div> имеет следующие CSS-классы:
tpl-block-тип-блока:
tpl-block-listtpl-block-fulltpl-block-add-formtpl-block-edit-formtpl-block-search-formtpl-component-ключевое-слово-компонента (см. ниже);tpl-template-ключевое-слово-шаблона (при использовании шаблона компонента).Для блоков основной части страницы в режиме вывода списка объектов в начале блока-обёртки также добавляется <div> с идентификатором, равным ключевому слову инфоблока (для hash-ссылок на эти блоки).
Название CSS-класса, соответствующего компоненту, формируется из префикса tpl-component- и ключевого слова компонента (или, если ключевое слово компонента не задано, его идентификатора).
Название CSS-класса, соответствующего шаблону, формируется из префикса tpl-template- и ключевого слова шаблона компонента (или его идентификатора).
При использовании ключевых слов в названиях CSS-классов они преобразуются в dash-case, то есть части названия разделены символом «-». Например, ключевые слова mysite_news и MysiteNews будут преобразованы в mysite-news.
При использовании «основного» шаблона компонента (самого компонента) блок будет иметь класс типа блока и класс tpl-component-ключевое-слово-компонента. При использовании шаблона компонента блок будет иметь также класс tpl-template-ключевое-слово-шаблона.
В шаблонах списков объектов, полного вывода объектов, формах добавления и изменения, доступны следующие дополнительные переменные:
$nc_component_css_class — классы, соответствующие компоненту, например «tpl-component-mysite-news tpl-template-frontpage»$nc_component_selector — CSS-селектор, соответствующий классам компонента, например «.tpl-component-mysite-news.tpl-template-frontpage».Там, где данные переменные недоступны, для получения CSS-классов шаблона компонента можно использовать метод $nc_core->component->get_css_class_name($component_template_id), где $component_template_id — идентификатор шаблона или его компонента.
Блок-обёртка также содержит атрибут id, содержащий уникальный идентификатор данного блока в DOM. Идентификатор доступен в шаблоне компонента в переменной $nc_block_id. Этот идентификатор удобно использовать для инициализации JavaScript-кода, относящегося к данному блоку, например:
<script>
// в данном примере используется jQuery
$(function() {
$('#<?= $nc_block_id ?>').click(my_click_handler);
});
</script>
Пример разметки, добавляемой при выводе списка объектов из инфоблока с ключевым словом «ключевое_слово_инфоблока» из компонента «mysite_news» с использованием шаблона с ключевым словом «frontpage»:
<div class="tpl-block-list tpl-component-mysite-news tpl-template-frontpage">
<div id="ключевое_слово_инфоблока" style="display: none"></div>
… префикс списка объектов …
… объекты …
… суффикс списка объектов …
</div>
При использовании шаблона в любой части сайта его стили автоматически добавляются в общий CSS-файл со стилями шаблонов компонента (отдельный для каждого сайта). При изменении стилей шаблона они автоматически обновляются в общем CSS-файле.
Если вы хотите удалить из общего CSS-файла стили шаблонов, которые более не используются, просто удалите общий CSS-файл, и он будет пересобран для используемых на сайте шаблонов. Общий CSS-файл находится в папке /netcat_template/css/<идентификатор_сайта>/components.css.
Общий CSS-файл добавляется автоматически перед закрывающим тегом </head>, дополнительных действий для его подключения не требуется.
Если необходимо вставить подключение общего CSS-файла в другую часть страницы, используйте в макете дизайна метод:
<?= $nc_core->page->get_site_component_styles_tag(); ?>
В общем CSS-файле будут убраны все имеющиеся в исходных стилях комментарии и дополнительные пробелы.
Ко всем селекторам в CSS-правилах стилей шаблонов компонентов при сборке общего CSS-файла добавляется в виде префикса соответствующий класс, соответствующий шаблону компонента (далее — «префикс»). Благодаря этому стили распространяются только на данный шаблон.
Для стилей компонента данный префикс будет равен .tpl-component-ключевое-слово-компонента, для стилей шаблонов компонента — .tpl-component-ключевое-слово-компонента.tpl-template-ключевое-слово-шаблона. Правила формирования названий CSS-классов указаны выше.
При необходимости можно вставить префикс в любую часть селектора при помощи символа «&».
При использовании в CSS-правилах функциональной нотации url() с указанием относительного пути он будет преобразован в абсолютный путь к папке шаблона компонента. Это позволяет разместить необходимые дополнительные файлы (фоновые изображения, шрифты и т. п.) непосредственно в папке компонента или его шаблона.
Рекомендуем при сохранении дополнительных ресурсов (таких как изображения или шрифты) использовать для них подпапки со стандартными названиями: images, fonts, assets, styles, css, scripts, js.
Поддерживаются @-правила со вложенными блоками: @media, @supports, @document.
Стили, заданные в настройках компонента, действуют для всех его шаблонов.
Для краткости в примерах предполагается, что компонент имеет ключевое слово «x», а шаблон — ключевое слово «y».
| Правило в стилях шаблона компонента | Результирующий CSS в общем файле стилей |
|---|---|
a { text-decoration: none; } |
.tpl-component-x.tpl-template-y a { text-decoration: none; } |
p .highlight { background: yellow } |
.tpl-component-x.tpl-template-y p .highlight { background: yellow; } |
h1, h2 { margin-bottom: 10px } |
.tpl-component-x.tpl-template-y h1, .tpl-component-x.tpl-template-y h2 { margin-bottom: 10px; } |
.site1 & a { color: red; } |
.site1 .tpl-component-x.tpl-template-y a { color: red; } |
& { float: left; } |
.tpl-component-x.tpl-template-y { float: left; } |
&.tpl-block-full img { |
.tpl-component-x.tpl-template-y.tpl-block-full img { cursor: zoom-in; } |
@media (max-width: 640px) { |
@media (max-width: 640px) { |
.cover { |
.tpl-component-x.tpl-template-y .cover { background-image: url('/netcat_template/class/x/y/images/bg.png'); } |
button { |
.tpl-component-x.tpl-template-y button { background: url('/netcat_template/class/x/images/btn.png'); } |
.fancy-divider { |
.tpl-component-x.tpl-template-y .fancy-divider { background-image: url('/img/hr.png'); } |
Стили, заданные в компоненте (не в его шаблоне), преобразуются аналогично стилям шаблонов компонента, но в качестве префикса используется только CSS-класс tpl-component-x. Как следствие, стили, заданные в настройках компонента, распространяются на все шаблоны данного компонента.
| Правило в стилях шаблона компонента | Результирующий CSS в общем файле стилей |
|---|---|
a { text-decoration: none; } |
.tpl-component-x a { text-decoration: none; } |
p .highlight { background: yellow } |
.tpl-component-x p .highlight { background: yellow; } |
&.tpl-block-full img { |
.tpl-component-x.tpl-block-full img { cursor: zoom-in; } |