# Вёрстка графических компонентов При создании графических компонент ("виджетов") в первую очередь придумывается их HTML/CSS-структура. Как будет выглядеть виджет в обычном состоянии? Как будет меняться в процессе взаимодействия с посетителем? Чтобы разработка виджета была удобной, при вёрстке полезно соблюдать несколько простых, но очень важных соглашений. [cut] ## Семантическая вёрстка **HTML-разметка и названия CSS-классов должны отражать не оформление, а смысл.** Например, сообщение об ошибке можно сверстать так: ```html
Плохая вёрстка сообщения об ошибке: атрибут style!
``` ...Или так: ```html
Плохая вёрстка сообщения об ошибке: несемантический class!
``` В обоих случаях вёрстка не является семантической. В первом случае -- стиль, а во втором -- класс содержат информацию об *оформлении*. **При семантической вёрстке классы описывают смысл ("что это?" -- меню, кнопка...) и состояние (открыто, закрыто, отключено...) компонента.** Например: ```html
Сообщение об ошибке (error), правильная вёрстка!
``` У предупреждения будет класс `message` и так далее, по смыслу. ```html
Предупреждение (warning), правильная вёрстка!
``` **Семантическая верстка упрощает поддержку и развитие CSS, упрощает взаимодействие между членами команды.** Такая верстка удобна для организации JS-кода. В коде мы просто ставим нужный класс, остальное делает CSS. ## Состояние виджета -- класс на элементе Зачастую компонент может иметь несколько состояний. Например, меню может быть открыто или закрыто. **Состояние должно добавляться CSS-классом не на тот элемент, который нужно скрыть/показать/..., а на тот, к которому оно "по смыслу" относится, обычно -- на корневой элемент.** Например, меню в закрытом состоянии скрывает свой список элементов. Класс `open` нужно добавлять не к списку опций `