W3C home > Mailing lists > Public > www-style@w3.org > October 2011

Re: [css-device-adapt] Accepting semi-colons as a separator for meta-viewport

From: Gray Zhang <otakustay@gmail.com>
Date: Mon, 24 Oct 2011 20:06:14 +0800
Message-ID: <CAKWkPy7fScdMOcRHsVxFYd+hREWr4CTxoRpPYPuTpqSyPWXhoQ@mail.gmail.com>
To: Peter Beverloo <beverloo@google.com>
Cc: www-style@w3.org
I don't agree with this opinion. Comma (,) should be the SINGLE separator
between *values* while Semicolon(;) should be the separator between
*components of values*.

Consider some HTTP headers:

* Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
* Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
* Cache-Control:private, max-age=0
* Content-Type:text/html; charset=UTF-8

Note that some of these HTTP headers are used in <meta> along with the
http-equiv attribute, and it's been established among Web developers that
comma (,) is the separator between *values*, not semicolon (;)

They all use comma (,) to separate 1st-level values, and semicolon (;) for
sub-level parameters (such as q=0.9 or charset=UTF-8).

Once we adopt semicolon as a valid separator between 1st-level separator, we
would be forced to introduce a new separator when we want to make a value
accept some sub-level parameters in the future, and this is not a rare case
(think of the historical 'q' parameter in Accept-* HTTP header).

On Fri, Oct 21, 2011 at 6:35 PM, Peter Beverloo <beverloo@google.com> wrote:

> On Fri, Oct 21, 2011 at 10:14 AM, Rune Lillesveen <rune@opera.com> wrote:
> > On Thu, 20 Oct 2011 19:12:01 +0200, Peter Beverloo <beverloo@google.com>
> > wrote:
> >
> >> The CSS Device Adapt specification defines a parsing algorithm[1] for
> >> the meta-element viewport content, which has been based on WebKit's
> >> implementation that shipped with iOS4. This algorithm only accepts
> >> commas as separators between properties.
> >
> > First, it's in a non-normative section, and we want UAs to move towards
> an
> > @viewport implementation. That being said, it's there to suggest a
> mapping
> > between viewport meta and @viewport in a transition phase.
> >
> >> In reality, web authors are using both commas as semi-colons. A wide
> >> range of websites, including CNN[2], Flickr[3] and Reddit[4] depend on
> >> this behavior, which has led at least Mozilla and Microsoft to
> >> implement it and, in case of the latter, write about it[5].
> >
> > Yes, and they have to add some combination of scale properties to
> compensate
> > for the fact that "width=device-width;" is the same as "width=0" in
> Safari
> > and Opera (see comments for the mentioned sites below).
>
> The fact that the numeric properties' values are being recognized are
> purely a work-around, which, in case of WebKit-based browsers, depends
> on disregarding trailing garbage for numeric values to parse these
> correctly (warnings for which are being shown in Web Inspector).
>
> >> I think the specification should adapt to reflect what authors are
> >> doing. While it's unfortunate that the divergence between commas and
> >> semi-colons happened, it's important for compatibility among mobile
> >> browsers.
> >
> > Two alternative proposed changes:
> >
> > 1. Keep the algorithm as it is and mention that some implementations
> accept
> > ';' as a separator in addition to ','.
> >
> > 2. Modify the algorithm to include ';' as a separator and say that it's
> > based on the Safari implementation with the ';' added as a recognized
> > separator.
>
> Your second alternative proposal describes the change I'm proposing,
> with the addition of a note saying that it differs there from Safari's
> implementation.
>
> >> [1] http://dev.w3.org/csswg/css-device-adapt/#parsing-algorithm
> >> [2] http://m.cnn.com
> >
> > Does not give me a viewport meta in Opera.
>
> I verified that they do give a viewport meta in WebKit, so they
> probably are sniffing for the browser. For reference:
>
> <meta xmlns="http://www.w3.org/1999/xhtml"
>      name="viewport"
>      content="initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
>
> >> [3] http://m.flickr.com
> >
> > "width=device-width; initial-scale=1.0; maximum-scale=1.0;
> user-scalable=0;"
> >
> > Works in Safari because the over-constraining scale values cause the
> width
> > to end up at device-width anyway. This would not have worked in Safari or
> > Opera: "width=device-width; user-scalable=0;".
>
> As said, this is because strtod() accepts trailing garbage, which
> applies to the numeric values. I don't expect authors to know about
> this difference.
>
> Peter
>
> >> [4] http://www.reddit.com/.compact (or http://m.reddit.com/)
> >
> > Same as for m.flickr.com.
> >
> >> [5]
> >>
> http://blogs.msdn.com/b/iemobile/archive/2010/11/22/the-ie-mobile-viewport-on-windows-phone-7.aspx
> >
> > --
> > Rune Lillesveen
> > Layout Group Manager
> > Core Technology Department
> > Opera Software ASA
> >
>
>
>
> --
> Peter Beverloo | Software Engineer | beverloo@google.com | +31-6-41000722
>
>
Received on Monday, 24 October 2011 12:06:55 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:45 GMT