Василий Чернов, 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