W3C home > Mailing lists > Public > www-style@w3.org > July 2008

Re: Opera's Proposal for :context Selector

From: Tab Atkins Jr. <jackalmage@gmail.com>
Date: Mon, 14 Jul 2008 15:45:37 -0500
Message-ID: <dd0fbad0807141345w124ff618g38f584d569e38402@mail.gmail.com>
To: "Andrew Fedoniouk" <news@terrainformatica.com>
Cc: "Lachlan Hunt" <lachlan.hunt@lachy.id.au>, www-style <www-style@w3.org>

Grr, misused the tab key.  Continuing message...



 On Mon, Jul 14, 2008 at 2:50 PM, Andrew Fedoniouk
<news@terrainformatica.com> wrote:
>
> Thanks for your answers, your intention is more clear now but see below...
>
> Lachlan Hunt wrote:
>
>> As a proof of concept, consider this example:
>>
>> <body class="foo">
>>  <section>
>>    <style scoped>
>>    .foo h1 { color: green; }
>>    .bar h1 { color: blue; }
>>    </style>
>>    <h1>Example</h1>
>>    <p>Hello world!</p>
>>  </section>
>> </body>
>> This allows styles to be changed dynamically by changing the class name on the body element from "foo" to bar", which would change the heading from green to blue.
>
> You already can do that. Simply write:
>
>  body.foo h1 { color: green; }
>  body.bar h1 { color: blue; }
>
> and it will work for you already. Why do you need <style scoped> then?

 The two work quite a bit differently.  Your selectors will match (and
change the color of) *all* <h1>s in body.foo or body.bar.  The scoped
stylesheet *only* changes those <h1>s that appear within the <style>'s
scope.  <h1>s that appear elsewhere will not be affected, even though
they may match a naive application of the selector.

The same applies to the querySelector, but you already get that (you
said exactly what is meant - that it's a global selector but against a
limited set of elements).  The two are meant to work the same.

>
> As far as I understand intention is to have:
>  <style scoped src="style-system-for-my-component.css" />
> and to be able to use that style-system-for-my-component.css in various places/pages?
> Modularity implies that declarations in style-system-for-my-component.css are
> independent from the position of scope/root element on the page - rooted to the element
> this style set is applied to. So you could share your libraries/components.
> Too bad if this is not the intent.

I agree here, though, that *without* a :scope or :context pseudoclass,
it can be difficult to achieve proper modularity.  Frex, in this
fragment:

<section>
  <style scoped>
    div span { color: red }
  </style>
  <span>span content</span>
  <div>
    <span>some more span content</span>
  </div>
</section>

The second span will definitely be red, but the first will be red
depending on whether or not there is a div somewhere further up the
ancestor chain.

In other words, I *really like* having querySelector and scoped
<style>s do a global match (but only apply to a limited set of
elements), but one needs, I think, a way to specify that you *really*
want a section of the selector to *only* apply to the scoped area.
Allowing :scope/:context would do wonders here, as well as make it
easy to define the stricter forms of scoped matching that Andrew likes
- as written earlier in the thread, the stricter forms would just
auto-prepend :scope/:context to the passed selector.

~TJ
Received on Monday, 14 July 2008 20:46:21 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:55:10 GMT