- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Mon, 14 Jul 2008 15:45:37 -0500
- 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 UTC