Description
Right now we only have a single interface that exposes the CSS property names as attributes (CSSStyleDeclaration
), but no browser does it right, and the spec behavior is also not great.
In particular, the spec behavior means that you expose stuff like fontFaceRule.style.color
, which doesn't quite make sense.
WebKit and Blink (though WebKit may have changed recently) historically use named getters for this (which is also not great, see #1089).
Note also that:
- Per recent discussion with @gsnedders WebKit trunk may have changed behavior?
- Per spec there's no exposure of descriptors for the rules that have them (but Blink / WebKit expose them as part of the named getters).
Gecko does something which IMO is better. Gecko exposes them as attributes as the spec describes, but on an interface that derives from CSSStyleDeclaration
called CSS2Properties
which we use for all the "style" declarations (so, inline style declarations, CSSStyleRule.style
, getComputedStyle
, CSSPageRule.style
, and individual keyframe declarations). (link, link). I think something like what Gecko does, but with similar interfaces for the declaration blocks that should have descriptors, like @font-face
and @counter-style
, would generally be much saner.
Since there's movement around here, and the interop story here is quite sad, I think there's quite a fair amount of room for improvement, and if we can align in a model that is both consistent and useful for developers it'd be great.
Does the thing I described above seem reasonable? Other ideas?