W3C home > Mailing lists > Public > whatwg@whatwg.org > June 2011

[whatwg] Selectors within <style scoped>

From: Roland Steiner <rolandsteiner@google.com>
Date: Thu, 16 Jun 2011 21:00:55 +0900
Message-ID: <BANLkTik_YNVszzuY0F9nC4wNRH-pSr1hUg@mail.gmail.com>
On Thu, Jun 16, 2011 at 6:11 PM, Lachlan Hunt <lachlan.hunt at lachy.id.au>wrote:

> On 2011-06-15 08:40, Roland Steiner wrote:
>
>> According to the HMTL5 spec, selectors are not limited to children of the
>> scoping element (the parent element of<style scoped>). For example:
>>
>> <div class="foo">
>>     <div>
>>         <style scoped>
>>             .foo p { display: none }
>>         </style>
>>         <p>To be or not to be, that is the question.</p>
>>     </div>
>> <div>
>>
>> In above snippet, the selector in the scoped stylesheet would match,
>> causing
>> the<p>  element to be hidden...
>>
>>
>> The disadvantages:
>>
>> 1.) a scoped style may unexpectedly apply, because an arbitrary ancestor
>> of
>> the scoping element happens to partially match the scoped selector
>>
>
> This is the purpose of the :scope pseudo-class that is defined to match the
> contextual reference elemnt, which for scoped stylesheets, will be the
> parent of the style element.
>
> So you could rewrite the style above to be:
>
> :scope .foo p { display: none }
>
> Then .foo will only match elements within the div.
>

I kinda like the idea, esp. since you could specify where in the selector
the scoping element should be (".left :scope .stuff"). However, AFAICT there
is still the following case:

<div>
    <style scoped>
        ... whatever ...
    </style>
    <div class="foo">
        <div>
            <style scoped>
                :scope .foo p { display: none; }
            </style>
            <p>Defector selector attractor</p>
        </div>
    </div>
</div>

With :scope you also need to know if the first matching part is the scoping
element node (which may or may not be a problem). E.g., the following would
NOT match:

<div class="foo">
    <style scoped>
        :scope .foo p { display: none; }
    </style>
    <p>Safe for once!</p>
</div>

- Roland


>
> http://dev.w3.org/2006/webapi/**selectors-api2/#the-scope-**pseudo-class<http://dev.w3.org/2006/webapi/selectors-api2/#the-scope-pseudo-class>
>
> --
> Lachlan Hunt - Opera Software
> http://lachy.id.au/
> http://www.opera.com/
>
Received on Thursday, 16 June 2011 05:00:55 UTC

This archive was generated by hypermail 2.4.0 : Wednesday, 22 January 2020 16:59:34 UTC