- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Thu, 08 Mar 2012 01:34:05 -0500
- To: Roland Steiner <rolandsteiner@chromium.org>
- CC: www-style@w3.org
On 3/8/12 1:25 AM, Roland Steiner wrote:
> Just to clarify, I mean this case:
>
> <div class="bound">
> <style scoped>
> pre { color: green; }
> </style>
> <pre> Text </pre>
> </div>
>
> where the <div> is bound to:
>
> #ShadowRoot
> <style scoped>
> pre { color: blue; }
> </style scoped>
> <content apply-binding-sheets/>
I think the simplest way to think of this case is that for each element,
we walk up the parent chain in the flattened to collect the scoped
stylesheets (those being the scoped sheets whose parents in the DOM, not
in the flattened tree, are on the element's flattened tree parent
chain). Every time you walk up on node on the parent chain, that's a
different cascade level.
> <div class="bound">
> <style scoped>
> pre { color: green; }
> </style>
> #ShadowRoot
> <style scoped>
> pre { color: blue; }
> </style scoped>
> <content apply-binding-sheets>
> <pre> Text </pre>
So in this case the <pre> has the following ancestors in the flattened tree:
<content>
#ShadowRoot
<div class="bound">
The second and third of these have associated scoped stylesheets, and
those are in different cascade levels, with the one on #ShadowRoot
having higher precedence.
> So the text would be blue.
Yes, agreed.
> The caveat here being that <style> elements
> need to be considered exempt from being "captured" by <content> elements
> - i.e., not moved in the final flattened tree (not having a renderer,
> that may go without saying).
That depends on whether there are exposed APIs for traversing the
flattened tree. I would expect <style> elements to be "captured" like
everything else, honestly. My proposed algorithm above has the same
effect as them not being captured; you just have to be careful about
when you're using the DOM and when you're using the flattened tree.
-Boris
Received on Thursday, 8 March 2012 06:34:35 UTC