Множества
Для некоторых сущностей, например элементов списка или просто последовательности одинаковых блоков характерно множественное появление.
В CSSG это будет выглядеть так:
или так
Ключевое отличие ‘+’ и ‘’ - в специфике множества. ‘+’ указывает, что элемент появится хотя бы один раз (характерно для элементов списка - <li>) ‘’ указывает, что элемент появится 0 и более раз (относится как правило ко всем остальным элементам)
важно понимать разницу между опциональным появлением ([element]) и появлением 0 и более раз (element *) на первый взгляд отличие незначительное, но в контексте все встает на свои места
Модификаторы - больше и удобнее
Как было указано в первой части, модификаторы дополняют сущность и теоретически возможно их одновременное появление. Необходимая логика описывается дополнительным синтаксисом.
Взаимоисключение выглядит следующим образом:
и даже так:
Когда класс жестко связан с модификатором (бесполезен или не используется без него), это указывается через точку:
отбивка по правому краю для привязанного класса не нужна
Наследование
Сущность может быть прямым наследником другой сущности. Чтобы обозначить это, указывает “родителя” через @.
не обязательно перечислять модификаторы, поскольку они наследуются по умолчанию
однако если есть отличия, то необходимо перечислить все возможные классы
по умолчанию принято, что указанные модификаторы будут являться единственно возможными
Например, в этом примере post-advanced будет иметь один возможный модификатор __new, несмотря на наличие модификаторов у post
Условная шаблонизация
Наследование напрямую связано с условной шаблонизацией. Указывая в родительской сущности изменяемые части, мы упрощаем описание потомственной сущности и избегаем дублирования кода. Это не обязательная, но удобная практика, если таких сущностей как минимум две.
Например, родительская сущность выглядит так:
или так, если существует содержимое по умолчанию
потомственная сущность
когда шаблон “раскрывается”, второй символ % не пишем
В этом случае post-advanced_cnt будет находится внутри post_cnt и перепишет контент по умолчанию из второго примера. Если не использовать шаблонизацию, то же самое можно записать так:
В данном случае разницы почти нет. Но достаточно рассмотреть пример в контексте громоздкой структуры, чтобы ощутить все преимущества записи.
элемент % content % в разметке не имеет DOM-воплощения, это просто название шаблона
Динамика
Под динамикой понимается появление того или иного класса или элемента в процессе отработки скриптов и/или в результате действий пользователя.
Для обозначения динамических блоков используется дополненный существующий синтаксис опциональных частей:
It’s «omplicated
Сложные решения в CSS тоже можно иллюстрировать с помощью CSSG.
Ситуация с взаимоисключающими блоками:
Нужно указать наличие какого-либо ключевого класса где-то высоко в DOM:
CSSG как правило само-демонстративен, но в особо сложных ситуациях не обойтись без комментариев:
comments powered by Disqus