Василий Чернов, Softline
Достаточно уметь писать XML и знать BEMXML-синтаксис
https://github.com/bivihoba/slcf-compiler<page>
<project>
<include href="default-semantic.xml"/>
<include href="templates.xml"/>
</project>
<default-semantic>
<b:page-title tag="h1"/>
</default-semantic>
<templates>
<p:page-title>Страница не найдена</p:page-title>
<t:main-content>
<p:page-title/>
</t:main-content>
</templates>
<page-canvas>
<p:layout/>
</page-canvas>
</page>
<page>
<project>Подключаем общие файлы
<include href="default-semantic.xml"/>
<include href="templates.xml"/>
</project>
<default-semantic>
<b:page-title tag="h1"/>
</default-semantic>
<templates>
<p:page-title>Страница не найдена</p:page-title>
<t:main-content>
<p:page-title/>
</t:main-content>
</templates>
<page-canvas>
<p:layout/>
</page-canvas>
</page>
<page>
<project>
<include href="default-semantic.xml"/>
<include href="templates.xml"/>
</project>
<default-semantic> Определяем семантику
<b:page-title tag="h1"/>
</default-semantic>
<templates>
<p:page-title>Страница не найдена</p:page-title>
<t:main-content>
<p:page-title/>
</t:main-content>
</templates>
<page-canvas>
<p:layout/>
</page-canvas>
</page>
<page>
<project>
<include href="default-semantic.xml"/>
<include href="templates.xml"/>
</project>
<default-semantic>
<b:page-title tag="h1"/>
</default-semantic>
<templates> Объявляем шаблоны
<p:page-title>Страница не найдена</p:page-title>
<t:main-content>
<p:page-title/>
</t:main-content>
</templates>
<page-canvas>
<p:layout/>
</page-canvas>
</page>
<page>
<project>
<include href="default-semantic.xml"/>
<include href="templates.xml"/>
</project>
<default-semantic>
<b:page-title tag="h1"/>
</default-semantic>
<templates>
<p:page-title>Страница не найдена</p:page-title>
<t:main-content>
<p:page-title/>
</t:main-content>
</templates>
<page-canvas> Выводим всё на страницу
<p:layout/>
</page-canvas>
</page>
<b:product>
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product> Блок
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product>
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details> Элементы блока
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product>
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section"> элементу можно назначить блок вручную
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product>
<m:viewtype val="complete"/> Модификация блока
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product>
<m:viewtype val="complete"/>
<a:article> Можно примешать блок
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
<b:product>
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/>
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/>
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/> ... или элемент блока
<a:page-title/>
<b:product>
<m:viewtype val="complete"/>
<a:article>
<m:viewtype val="s1"/> Можно добавлять модификации
<m:content val="product"/>
</a:article>
<e:details>
<a:section>
<m:viewtype val="s1-details"/> на примешанные блоки
<m:content val="product-details"/>
</a:section>
<e:header block="section">
<e:title>
<a:title block-of="article"/>
<a:page-title/>
.b-region .b-region__title {
margin-right: 20px;
}
Излишне, такая связь заложена на уровне синтаксиса
.b-list_type_simple .b-list__item {}
<ul class="b-list b-list_type_simple">
<li class="b-list__item">
<ol class="b-list b-list_type_numeric">
<li class="b-list__item">
Приемлимо, но могут быть неприятные эффекты
.b-article .b-link {...} /*«межблочный каскад»*/
.b-article .b-link {}
.b-pagination .b-link {}
.b-inline {display:inline;}
<h4 class="b-product__title b-inline"/>
Блок должен иметь ценность сам по себе.
<article class="b-article b-article_content_product b-product b-product_type_sale">
<header class="b-article__header"/>
<h3 class="b-product__title"/>Title</h3>
</header>
<div class="b-article__content b-product__description">
.b-product_type_sale .b-product__title {}
.b-article_content_product .b-article__header {}
b-span1 b-span2 b-span3
один с модификаторами b-span_size_1 b-span_size_2 b-span_size_3
.b-menu_type_main -> b-main-menu
минус связь
.b-menu_type_main .b-menu__item -> b-main-menu__item
.b-menu__item
.b-menu__item_state_selected
.b-menu_type_meta. b-menu__item_state_selected
.b-menu_viewtype_ribbon .b-menu__item_state_selected
.b-menu_content_products .b-menu__item_state_selected
.b-button.css
.b-button_state.css
.b-button_state_pressed.css
руководитель группы верстки,
департамент разработки интернет-проектов, Softline