[whatwg] Why is @scoped required for <style> as flow content?

Jukka K. Korpela jkorpela at cs.tut.fi
Fri Mar 25 02:17:50 PDT 2011


Boris Zbarsky wrote:

> On 3/24/11 9:29 PM, Nicholas Zakas wrote:
[...]
>> Fixing the issue results in:
>>
>> <div>
>>      <style scoped>.foo { color: red; }</div>
>> </div>
>
> The correct fix for this issue is to put this <style> in the <head>,
> isn't it?  Why would would you fix it by adding @scoped?

There is nothing wrong with the markup as far as current HTML5 drafts are 
considered, but it has a meaning different from the intended one.

The obvious use case for <style scoped> is in situations where you insert 
elements taken from an external source into, say, a blockquote or article 
element and wish to preserve their formatting as in the original (more or 
less). Modification of the style sheet would be another way of doing it, but 
often rather awkward.

By the way, W3C Markup Validator currently has its own views on where <style 
scoped> is allowed. For example, it does not allow it as the first child of 
<body>.

The use case for <style> inside the document body without the scoped 
attribute is quite different, typically in situations where the document is 
being generated programmatically and when generating content, some style 
settings should be inserted (perhaps something that cannot be handled using 
style="..." attributes). There are even situations - more often than many 
people would want - where an author can only affect the <body> element.

So putting a <style>, meant to be global, in the <head> simply isn't an 
option in many cases. Maybe such cases shouldn't exist, but they do.

There's a fundamental compatibility issue with <style scoped>. Existing 
browsers simply ignore the scoped attribute and apply the styles to the 
entire document. This is surely not what an author means when he uses <style 
scoped> as per HTML5.

Suggestion: Drop <style scoped>. Instead, introduce a new attribute, say 
styleref, which is permitted for elements that allow flow content, or for 
any element (whichever is easier). The attribute would specify a 
space-separated list of CSS stylesheet URLs, to be applied inside the 
element. Benefits:
- old browsers ignore it, instead of wrongly applying styles globally
- the <style> element preserves its semantics unchanged; whether it is to be 
allowed inside <body> can be decided separately (my suggestion would be that 
it be described as conforming but obsolete feature)
- the typical use case of <style scoped> involves external documents with 
their own stylesheets rather than something you can conveniently cut and 
paste
- external stylesheets should generally be favored over embedded, and at 
least there should be an option of using an external stylesheet.

-- 
Yucca, http://www.cs.tut.fi/~jkorpela/ 




More information about the whatwg mailing list