Множества
Для некоторых сущностей, например элементов списка или просто последовательности одинаковых блоков характерно множественное появление.
В CSSG это будет выглядеть так:
/*
    post_cnt
    	post_cnt_ul
    		post_cnt_li +
*/или так
/*
    post_cnt
    	post_cnt_i *
*/Ключевое отличие ‘+’ и ‘’ - в специфике множества. ‘+’ указывает, что элемент появится хотя бы один раз (характерно для элементов списка - <li>) ‘’ указывает, что элемент появится 0 и более раз (относится как правило ко всем остальным элементам)
важно понимать разницу между опциональным появлением ([element]) и появлением 0 и более раз (element *) на первый взгляд отличие незначительное, но в контексте все встает на свои места
Модификаторы - больше и удобнее
Как было указано в первой части, модификаторы дополняют сущность и теоретически возможно их одновременное появление. Необходимая логика описывается дополнительным синтаксисом.
Взаимоисключение выглядит следующим образом:
/*
    post                            ( __current | __regular ) __deleted
*/и даже так:
/*
    post                            ( ( __current | __regular ) | __compact ) __deleted
*/Когда класс жестко связан с модификатором (бесполезен или не используется без него), это указывается через точку:
/*
	post 							__compact __featured
		post_h
			post_h_tx . __bold
		post_b
			post_b_cnt
				...
*/отбивка по правому краю для привязанного класса не нужна
Наследование
Сущность может быть прямым наследником другой сущности. Чтобы обозначить это, указывает “родителя” через @.
/*
   	post-advanced @ post
   		post-advanced_h
   		post-advanced_b
*/не обязательно перечислять модификаторы, поскольку они наследуются по умолчанию
однако если есть отличия, то необходимо перечислить все возможные классы
по умолчанию принято, что указанные модификаторы будут являться единственно возможными
Например, в этом примере post-advanced будет иметь один возможный модификатор __new, несмотря на наличие модификаторов у post
/*
    post-advanced @ post                __new
   		post-advanced_h
   		post-advanced_b
*/Условная шаблонизация
Наследование напрямую связано с условной шаблонизацией. Указывая в родительской сущности изменяемые части, мы упрощаем описание потомственной сущности и избегаем дублирования кода. Это не обязательная, но удобная практика, если таких сущностей как минимум две.
Например, родительская сущность выглядит так:
/*
    post
        post_cnt
            % content %
*/или так, если существует содержимое по умолчанию
/*
    post
        post_cnt
            % content %
                post_cnt_i
*/потомственная сущность
/*
    post-advanced @ post
    % content
        post-advanced_cnt
            post-advanced_cnt_i
*/когда шаблон “раскрывается”, второй символ % не пишем
В этом случае post-advanced_cnt будет находится внутри post_cnt и перепишет контент по умолчанию из второго примера. Если не использовать шаблонизацию, то же самое можно записать так:
/*
    post-advanced @ post
	    post_cnt
	        post-advanced_cnt
	            post-advanced_cnt_i
*/В данном случае разницы почти нет. Но достаточно рассмотреть пример в контексте громоздкой структуры, чтобы ощутить все преимущества записи.
элемент % content % в разметке не имеет DOM-воплощения, это просто название шаблона
Динамика
Под динамикой понимается появление того или иного класса или элемента в процессе отработки скриптов и/или в результате действий пользователя.
	/*
	    post 					$__disabled | $__active
	        post_h
	        post_b
	            post_cnt
	*/Для обозначения динамических блоков используется дополненный существующий синтаксис опциональных частей:
/*
    post
    	$[post_msg]
        post_h
        post_b
            post_cnt
            	$[post_cnt_msg]
            		post_cnt_tx
            	$[/post_cnt_msg]
*/It’s «omplicated
Сложные решения в CSS тоже можно иллюстрировать с помощью CSSG.
Ситуация с взаимоисключающими блоками:
/*
    post
        post_b
            [1]
            post_cnt
            	post_cnt_lst
            [2]
            post_cnt2
            	...
*/Нужно указать наличие какого-либо ключевого класса где-то высоко в DOM:
/*
	blog . __complex
	///
    post
        post_b
            post_cnt
*/CSSG как правило само-демонстративен, но в особо сложных ситуациях не обойтись без комментариев:
/*
    post
        post_h (1)
        post_b
            post_cnt (2)
    _______________________________________________
    (1) comment on post_h
    (2) another comment
*/