Re: [css-scoping] Shadow Cascading

On Fri, Feb 6, 2015 at 12:30 AM, Rune Lillesveen <rune@opera.com> wrote:
> On Thu, Feb 5, 2015 at 12:33 AM, Rune Lillesveen <rune@opera.com> wrote:
>> On Wed, Feb 4, 2015 at 11:52 PM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
>>> On Thu, Feb 5, 2015 at 9:38 AM, Hayato Ito <hayato@google.com> wrote:
>>>> Looks like the current spec wants to say:
>>>>
>>>> 1. The Origin and Importance matters
>>>> 2. [Shadow Tree] The outer wins the inner (only when there is an
>>>> ancestor/descendant relationship between two node trees)
>>>> 3. [Shadow Tree] The younger wins the older (only when they are hosted by
>>>> the same shadow host)
>>>> 4. Specificity matters
>>>> 5. Order of Appearance in tree-of-trees matters
>>>
>>> Yes.  As far as I can tell, that's *exactly* what the spec is saying.
>>> Is there anything unclear?
>>
>> No, it's clear now.
>
> I'm sorry, but I'm afraid it isn't. There seems to be a circularity
> here. Consider:
>
> <!DOCTYPE html>
> <div id="outerHost">
>     <div id="innerHost">
>         <div id="t" class="t">Which color do I have?</div>
>     </div>
> </div>
> <script>
> var outerRoot = outerHost.createShadowRoot();
> var innerRootOld = innerHost.createShadowRoot();
> var innerRoot = innerHost.createShadowRoot();
>
> outerRoot.innerHTML = "<style>::content #t { color: red
> }</style><content></content>";
> innerRootOld.innerHTML = "<style>::content #t.t { color: green
> }</style><content></content>";
> innerRoot.innerHTML = "<style>::content .t { color: blue
> }</style><shadow></shadow>";
> </script>
>
> Given rules in outerRoot(1), innerRootOld(2), and innerRoot(3) respectively.
>
> - None of the scopes has a parent-child relationship in the tree-of-trees.
> - (2) beats (1) due to specificity
> - (1) beats (3) due to specificity
> - (3) beats (2) because it's younger

No, you're misusing the cascade.  It produces an ordering by applying
the rules in the order specified.  The Shadow Tree rules produce only
a partial ordering, but still.

In this example, then:

1. Origin doesn't matter.  All three are still unsorted.
2. Shadow Tree Ancestor doesn't matter.  All three are still unsorted.
3. Shadow Tree Age sorts #3 ahead of #2.  #1 is still unsorted relative to them.
4. Specificity sorts #1 ahead of #3. You now have a total ordering.

~TJ

Received on Thursday, 5 February 2015 21:03:01 UTC