- From: Leif Halvard Silli <xn--mlform-iua@xn--mlform-iua.no>
- Date: Thu, 8 Mar 2012 01:58:13 +0100
- To: Boris Zbarsky <bzbarsky@MIT.EDU>
- Cc: public-html@w3.org
Boris Zbarsky, Wed, 07 Mar 2012 16:52:46 -0500:
> On 3/7/12 4:18 PM, Tab Atkins Jr. wrote:
> <div>
> <style id="a" scoped></style>
> <p><style id="b" scoped></style></p>
> <style id="c" scoped></style>
> </div>
The last <style scope> is illegal. Quoting the spec:
]] must be the first node of flow content in its parent element other
than inter-element whitespace, and the parent element's content model
must not have a transparent component. [[
Shouldn't a <style scope> that occurs somewhere else, should be without
effect? If not, why do we need these rules?
> For descendants of the <p>, I would think that the cascade order should be:
>
> 1) Global stylesheets
> 2) Styles from "a" and "c" (sorted by specificity, etc)
> 3) !important styles from "b"
> 4) !important styles from "a" and "c" (sorted by specificity)
> 5) !important global styles
>
> Thoughts?
It gives the impression that it is very important to make use of
'!important', in order to make use of <style scoped> ...
Which makes me wonder: What's the problem <style scope> is supposed to
solve? Isn't the purpose to *override* the effect of the cascade?
Examples: Imagine we have <foo-root> element as direct child of <body>.
And imagine that we have a global <style> in the <head> with the
following rule:
body foo-root {background:red}
Simultaneously, inside a <style scoped> inside the <foo-root>, we have
this rule:
foo-root{background:lime}
Problem: In this case the global style would win. Which to me is
backward. It is not true scoping. Instead, it is the same cascading
mess.
To really make <style scoped> scoped, why not consider that the scoped
selector above, is equivalent to the following, global selector, except
that it - of course - would only apply to the specific <foo-root>
element where <style scoped> occurs, and not to any other <foo-root>
elements in the document:
html body foo-root {background:lime}
As a result, the above rule in the <head>, would be equivalent to the
following <style scoped> rule inside the <foo-root> element:
foo-root {background:lime}
The latter rule above would win only because it occurs *after* the
global rule in the <head> - same as the following colors the p red,
because the last rule says so:
p{color:lime}
p{color:red}
And also, all of the following rules would be equivalent - none of them
would be more or less specific.
<style scoped>
foo-root {background:red!important}
</style>
<style scoped>
body foo-root {background:red!important}
</style>
<style scoped>
html body foo-root {background:red!important}
</style>
--
Leif Halvard Silli
Received on Thursday, 8 March 2012 00:58:47 UTC