[whatwg] Why is @scoped required for <style> as flow content?
Ian Hickson
ian at hixie.ch
Mon Jan 30 16:11:24 PST 2012
On Wed, 15 Jun 2011, Jukka K. Korpela wrote:
> 2011-06-15 3:26, Ian Hickson wrote:
> >
> > Styling a whole document by having style sheets in the middle of the
> > document causes flickering (as the browser updates the styles), and is
> > hard to maintain. So we make this non-conforming, to help authors
> > avoid these pitfalls. (Indeed, it's never been conforming, this is not
> > new.)
>
> If the intent is to help authors to avoid pitfalls, it would suffice to
> give a warning (and explicitly mention the problem in the specification
> or just explicitly define the meaning by saying that the time of
> applying the style sheet is in this case browser-dependent).
That's what conformance errors are.
> > > 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.
> >
> > It's trivial to work around that using ID selectors in the interim.
>
> I'm afraid few things if any are trivial when playing with selectors in
> CSS. For one thing, ID selectors have drastic effect on specificity.
> More fundamentally, if you want to use a piece of a document in another
> and copy part or all of the original style sheet, it shouldn't be
> necessary to modify the style sheet by throwing in ID selectors at
> different places.
Sure, that's why we're adding the feature. The ID thing is just a
temporary inconvenience while we are in the transition.
> The compatibility issue is rather serious when an author using a new
> construct strictly the way it has been defined (and gets no complaint
> from a validator) sees _all_ existing browsers do something global when
> it was specifically defined to apply to a small part only.
In practice, authors test with browsers long before they test with a
validator, so the validator part of this isn't really relevant.
Authors are generally quite familiar with the concept of graceful fallback
and how to make things work in legacy UAs. I don't think there's any
serious trouble here. There is a workaround that's trivial to implement,
as described above.
> > > 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.
> >
> > That wouldn't solve the main use case: syndication. In that scenario,
> > referencing external files is often a non-starter.
>
> An external CSS file can do anything an embedded one can, but if the
> pragmatic issue is that too many separate files would be needed, then we
> could define a new media type for "scoped style sheet" and use
>
> <style type="text/css-scoped">...</style>
>
> Existing user agents would ignore the elements, which is probably better
> than misapplying them (globally). Admittedly, this is somewhat hackish,
> since media types and their parameters are supposed to describe the
> data, not its usage, but this wouldn't be the first or worst deviation
> from that principle.
Indeed. A scoped="" attribute does the same thing but better -- it can be
made to work in legacy UAs, and doesn't do anything hackish with MIME
types.
> > A system that cannot do this:
> >
> > <style></style>
> > </head>
> > <body>
> >
> > but can do this:
> >
> > </head>
> > <body>
> > <style></style>
> >
> > Seems artificially limited and really should just be fixed.
>
> It's still a reality in which many people live, with no way to fix it.
Can you elaborate on which systems you are referring to?
> But unless I'm missing something, the current version allows the old
> method of starting <body> with <style>, just provided that you write
> <style scoped>. It would not matter whether browsers recognize the
> attribute scoped or not, as the scope would be the entire document,
> wouldn't it?
Sure.
> Well what _am_ I missing now, when testing with validator.w3.org,
> <body><style scoped> causes this: [...]
Please file validator bugs with the validators.
> > If you can only affect some parts of the<body>, the site probably
> > would also rather you didn't affect parts outside those parts by
> > fiddling with them via CSS.
>
> Maybe. Maybe nobody thought of it. Maybe it's just a limitation caused
> by technicalities. Anyway, when I _can_ fiddle with presentation using
> the style="..." attribute or with presentational markup, formally
> disallowing <style> doesn't help anyone.
On the contrary, I think it makes maintenance a lot easier by pushing
authors towards a better authoring style.
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list