Что такое CSSOM

Ответ

CSSOM (CSS Object Model) — это API, представляющее CSS в виде дерева объектов, аналогично DOM. Браузер парсит CSS и создаёт CSSOM, который используется вместе с DOM для формирования Render Tree.

Ключевые особенности:

  • CSSOM содержит стили, которые можно динамически изменять через JavaScript
  • Имеет иерархическую структуру (правила наследования)
  • Доступен через document.styleSheets

Пример работы с CSSOM:

// Получить все стили документа
const styles = document.styleSheets[0];
// Добавить новое правило
styles.insertRule('body { background: red; }', 0);
// Удалить правило
styles.deleteRule(0);

CSSOM строится параллельно с DOM, но рендеринг страницы блокируется до полного формирования CSSOM (Critical CSS).

Ответ 18+ 🔞

А, CSSOM, блядь! Ну это ж та самая штука, когда браузер твои стили разбирает и строит из них такое же дерево объектов, как DOM, только для CSS, понимаешь? Ёпта, целое дерево, как в лесу, только вместо листьев — правила, селекторы и прочая хуйня.

Короче, браузер берёт CSS, парсит его, и получается эта самая CSSOM — объектная модель. А потом, сука, он её скрещивает с DOM, и рождается Render Tree, уже готовый к отрисовке. Без этого никуда!

Что там у нас ключевое, блядь?

  • Вся эта CSSOM — она живая, её можно ебашить через JavaScript, менять стили на лету, как тебе вздумается.
  • Там тоже своя иерархия, всё наследуется, как у людей, блядь. Родительские свойства детям переходят, если не переопределить, конечно.
  • Доступ к этой красоте — через document.styleSheets. Там все твои таблицы стилей лежат, как на ладони.

Смотри, как с ней баловаться можно, чисто для примера:

// Хватаем первую попавшуюся таблицу стилей
const styles = document.styleSheets[0];
// И хуяк — добавляем новое правило, прямо в начало! Пусть фон будет красный, нахуй!
styles.insertRule('body { background: red; }', 0);
// Передумал? Да похуй, удаляем это правило обратно!
styles.deleteRule(0);

И самое главное, блядь, что надо помнить: браузер строит CSSOM параллельно с DOM, это да. Но, сука, он не начнёт рендерить страницу, пока CSSOM не будет готов! Это называется Critical CSS — пока все критические стили не проглотит, будет тебя ждать, сидя на голом DOM'е. Так что не наебывайся с большими CSS-файлами, а то пользователь будет смотреть на белый экран, а ты тут со своими правилами играешься.