9

To jest dość akademickie pytanie. Zastanawiam się, w jaki sposób jest zaimplementowana przeglądarka, w jakiej strukturze danych lub algorytmie używa się do odwzorowania selektora CSS na konkretny element DOM. Czy odbywa się to poprzez tablicę haszującą? W jaki sposób węzeł podrzędny DOM wie, że styl zastosowany do elementu nadrzędnego dotyczy także samego siebie. Przeglądam centrum programistyczne Mozilli i nic nie znalazłem. Wszelkie dokumentacje lub książki na ten temat byłyby bardzo doceniane ... dzięki!W jaki sposób CSS i DOM są zaimplementowane w przeglądarce?

Odpowiedz

9

Dopasowywanie odpowiedzi na pytanie "które selektory pasują do danego węzła", a nie "które węzły pasują do selektora". Pozwala to po prostu ocenić każdą część selektora względem bieżącego węzła (porównać nazwę węzła/ID/klasę). Decydujący kombinator i dziedziczenie są wykonywane poprzez skanowanie węzłów nadrzędnych.

Jeśli jesteś zainteresowany co dzieje się dalej, WebKit blog miał ładny serii: WebCore rendering basics

1

można wymienić Mozillę. Z pewnością łatwiej jest odpowiedzieć na twoje pytanie w kontekście konkretnej konkretnej implementacji, niż abstrakcyjnego pojęcia wszystkich możliwych implementacji.

Do skonstruowania selektora CSS na konkretny element DOM używa się [...] struktury danych lub algorytmu ... czy jest to realizowane przez tablicę skrótów?

Przypuszczam, że bezpośrednia odpowiedź na twoje pytanie, dla FF2, prawdopodobnie będzie w style directory kodu źródłowego firefox. Wyszukiwanie w tym katalogu dla "hashtable" daje 111 wyników w 7 plikach.

Jestem przekonany, że hashtables są ogólnie związane z niektórymi procesami związanymi z renderowaniem stylów CSS.

Krótka odpowiedź na twoje pytanie brzmi: "Tak, ale jest w tym coś więcej niż tylko tabele mieszania".

2

Więc tutaj są rzadkie docs:

Od swoje pytanie wydaje się, że należy najpierw dowiedzieć się więcej na temat CSS ma pracować (np co jest specyfika reguły, styl obliczeniowy).

+1

Jestem bardzo świadomi tego, jak CSS działa w odniesieniu do orzekania specyfika, styl obliczeniowy. Interesowały mnie szczegóły faktycznego wdrożenia silnika renderującego. Twoja odpowiedź nie rzuca żadnego światła w tym aspekcie. – Jlam

+0

@Jlam: Dzięki, że wróciłeś 3,5 roku później, aby mi to powiedzieć! Przykro mi, jeśli cię uraziłem, ale twoje pytanie nie wyjaśniło tak dobrze i naprawdę musisz znać CSS przed zagłębieniem się w implementację. FWIW, nauczyłem się podstaw działania systemu stylu mozilli czytając te strony, a następnie poprzez implementację powiązaną z odpowiedzią Ewana. – Nickolay