CSSG описывает конструкцию сущности привычным каскадом CSS классов. Наименование классов происходит в соответствии с принятыми в компании стандартами. Сторонние проектные классы указываются рядом с основными. Вспомогательные (косметические) классы как правило не указываются, за исключением особенных случаев (рассматриваются во второй части).
Далее в документации в качестве примера рассматривается вымышленная сущность “post”. Предположим, что это пост в блоге или любая другая запись, у которой есть шапка, тело, футер и прочие элементы.
Ваша первая CSSG
Предположим, HTML выглядит примерно так:
CSS примерно так:
CSSG иллюстрирует структуру HTML в терминологии CSS и располагается в документе до правил:
Если вы работали с HAML или имеете представление о его синтаксисе, конструкция более чем привычна. По умолчанию все элементы конструкии не имеют определенного DOM-представления, т.е. класс первичнее тэга. Когда необходимо подчеркнуть связь конкретного тэга с классом, используется привычная запись zen-coding:
Несколько правил:
потомки элементов отбиваются табами
соседние элементы разделяютс дополнительной строкой в случае наличия потомков
конструкция CSSG для удобства прочтения не должна превышать высоту экрана
Ключевой контент
Ключевой контент обозначается троеточием - …, прочий контент игнорируется. Троеточие подразумевает что вложенность отсутствует, или она не имеет отношения к описываемой структуре. Пример некорректной CSSG:
Ключевой контент может располагаться рядом с другой важной частью структуры:
Сторонняя сущность, связанная с проектом, обозначается фигурными скобками. Контент, дополненный сторонней сущностью обозначается рядом троеточием.
Ссылки
В случае громоздкой конструкции удобнее в начале CSS описать скелет конструкции со ссылками на составные части по ходу документа.
ссылка на составную часть конструкции обозначается через привычный символ - #
Модификаторы и проектные классы
Наш HTML меняется - в зависимости от контекста или сам по себе. Модификаторы в CSS позволяют видоизменять сущность. Модификатор представляет из себя класс типа .post__new или .__compact, который указывается рядом с основным классом. Проектный класс (микс-ин) позволяет переиспользовать сущность и указывается самостоятельно или отдельно от основного класса, например - .post-featured.
В CSSG возможные модификаторы описываются справа на одном уровне (вне зависимости от уровня вложенности) с целевым классом. Расстояние выбирается произвольно, исходя из величины диаграммы и удобства прочтения. Если предполагается возможность проектного заимствования сущности (микс-ина), указываем это перед списком модификаторов.
перечисление модификаторов в таком виде указывает на возможность их одновременного присутствия, без дополнительной логики
подробнее о модификаторах во второй части
Опциональные части
Если в сущности присутствуют части, которые могу отсутствовать (не обязательные для данной сущности), заключаем их в квадратные скобки. Если класс один, скобки на этой же строке, в противном случае переносим для удобства прочтения.
Если опциональная часть является оберткой, используем следующий синтаксис:
синтаксис переносов и пробелов в данном случае не является догмой. Здесь на первом месте выступает удобство прочтения и чистота кода
однако при работе в коллективе необходимо выбрать единый синтаксис, одинаковый для всех членов команды
Неизменяемые блоки
Как правило в крупном проекте или фрэймворке существуют конструкции, которые остаются неизменными вне зависимости от контекста. Пример таких конструкций - кнопка, простая форма, виджет социальных сетей и т.д.
Когда нельзя их игнорировать или наоборот - необходимо проиллютрировать их наличие применяется следующий синтаксис:
comments powered by Disqusважно составить и периодически дополнять список неизменяемых, переиспользуемых блоков
в большой команде разработчиков список должен быть один