- 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