gecko-dev/lib/libdom/STYLE_NOTES

66 lines
1.8 KiB
Plaintext
Raw Normal View History

Notes on DOM style support, or: Everything you ever wanted to know
about Perignon, but managed to avoid asking.
Data Structures:
----------------
Style data is represented by sets of disjoint trees, rooted on the
innermost element type (simple selector). The sets are stored in a
hash table. It's easier to understand with a picture, so here goes.
Legend:
-- ``enclosing''
| ``sibling''
(=...) ``rule''
Style data:
H1 { color:blue }
H1 A { color:red }
H1 B A { color:green }
B A { color:purple }
A:link { color:orange }
.A { color:forclassA }
A -- B (=color:purple) -- H1 (=color:green)
| |
| H1 (=color:red)
|
A:link (=color:orange)
|
|
.A (=color:forclassA)
H1 (=color:blue)
Note that there are no rules on the ``A'' selector. If the only rule
in the sheet for ``A'' was the ``A:visited'' one, a dummy selector
would be added, since the hash table is keyed on the pseudo-less
selector.
Classes (".H1") and IDs ("#H1") are chained in the sibling list with
their like-named tags.
A selector can correspond to a tag, class or id, depending on the
value of the type field. If a class selector applies to the magic
``all'' class, it will have no extra field. Otherwise, the extra
field will be the tag selector. If a tag selector has an ID as well,
it will be found in the extra field.
JSSS:
-----
Perignon currently depends on JSSS to populate it, but someday I should
implement DOM_StyleParseRule for the heathens that just use CSS.
CSS2:
-----
I don't do CSS2 selectors yet. I don't yet know how much I care about
that, because I don't yet know what CSS2 selectors are. =)
Questions:
----------
- Do visited links get A:link properties as well? They don't appear to in
the current implementation, but to my mind they should (unless, of course,
such properties are overridden by A:visited rules).