Как CSS и DOM реализованы в браузере? - PullRequest
11 голосов
/ 31 октября 2009

Это довольно академический вопрос. Мне интересно, как реализован браузер и какая структура данных или алгоритм используются для сопоставления селектора CSS с конкретным элементом DOM. Это достигается через хеш-таблицу? Как дочерний узел DOM знает, что стиль, примененный к родительскому узлу, применим и к самому себе и т. Д. Я просматривал центр разработчиков Mozilla и ничего не нашел. Любая документация или книги по этому вопросу будут высоко оценены ... спасибо!

Ответы [ 4 ]

10 голосов
/ 01 ноября 2009

Соответствует ответу на вопрос «какие селекторы соответствуют данному узлу», а не «какие узлы соответствуют селектору». Это позволяет просто сравнивать каждую часть селектора с текущим узлом (сравнивать имя узла / идентификатор / класс). Комбинатор и наследование потомков выполняются путем сканирования родительских узлов.

Если вам интересно, что будет дальше, в блоге WebKit была хорошая серия: Основы рендеринга WebCore

2 голосов
/ 01 ноября 2009

Итак, вот скудные документы:

Из вашего вопроса кажется, что сначала вам нужно больше узнать о том, как должен работать CSS (например, что такое специфичность правил, вычисляемый стиль).

1 голос
/ 22 августа 2013

W3C предоставляет общий подход с точки зрения определения, который я считаю информативным:

1 голос
/ 01 ноября 2009

Вы упомянули Мозиллу. Конечно, легче ответить на ваш вопрос в контексте конкретной конкретной реализации, чем абстрактное понятие всех возможных реализаций.

[W] Если структура данных или алгоритм используются для отображения селектора CSS на конкретный элемент DOM ... это выполняется с помощью хеш-таблицы?

Полагаю, что прямой ответ на ваш вопрос для FF2, скорее всего, находится в каталоге style исходного кода firefox. Поиск в этом каталоге для "hashtable" дает 111 результатов в 7 файлах.

Я уверен, что хеш-таблицы широко связаны с некоторыми процессами, используемыми при рендеринге стилей CSS.

Итак, краткий ответ на ваш вопрос: «Да, но это больше, чем просто хеш-таблицы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...