- From: Kenneth Rohde Christiansen <kenneth.christiansen@gmail.com>
- Date: Wed, 14 Nov 2012 15:29:09 +0100
- To: Rune Lillesveen <rune@opera.com>
- Cc: www-style@w3.org
- Message-ID: <CAEC208vaSRqgPNZhQMiJVdQYcWKw191zKDGtcsoFi-q5pAx6-A@mail.gmail.com>
Why do we have to map it to the @viewport syntax? I believe for WebKit we will just have a separate code path for the meta element, which ensures that it keeps the same algorithm as always. Cheers Kenneth On Wed, Nov 14, 2012 at 10:27 AM, Rune Lillesveen <rune@opera.com> wrote: > On Fri, 02 Nov 2012 21:45:39 +0100, Florian Rivoal <florian@rivoal.net> > wrote: > > On Wed, 31 Oct 2012 08:58:14 +0100, Rune Lillesveen <rune@opera.com> >> wrote: >> >> The current constraining procedure has a coupling between zoom and auto >>> widths/heights (6-9) and extending widths/heights to fill the viewport for >>> a non-auto zoom (10-11). >>> >>> [...] >>> >>> I would like to decouple the zoom from width/height by letting auto >>> width/height rely on non-auto width/height and initial viewport only. >>> >>> [...] >>> >>> Proposal, rule-wise: >>> >>> Replace step 6 and 7 with: >>> >>> - If width and height are both ‘auto’, set width = initial-width >>> >>> and drop step 10 and 11. >>> >>> I have not worked out the details for the meta viewport to @viewport >>> mapping in chapter 11 to keep the same meta viewport behavior, but it looks >>> doable. I'll get back to that. >>> >> >> This makes sense to me. Assuming a semantics preserving mapping with the >> meta viewport is possible (which I don't doubt), I think we should do >> this, >> and that it is a good time to do it. The only two implementations I know >> of are Opera's, which is willing to change, and Microsoft, whose support >> is currently limited to parts not influenced by this change. >> > > I needed to add a UA-internal value which I've called 'extend-to-zoom' to > <viewport-length> to preserve the meta viewport mapping. I have implemented > this, and my 128 viewport meta tests still pass. > > > I've ended up with this constraining procedure, which should be what I > proposed (+ moved the zoom resolution steps to the beginning): > > == Resolve min-zoom and max-zoom values == > > 1. If min-zoom is not ‘auto’ and max-zoom is not ‘auto’, set max-zoom = > MAX(min-zoom, max-zoom) > > == Constrain zoom value to the [min-zoom, max-zoom] range == > > 2. If zoom is not ‘auto’, set zoom = MAX(min-zoom, MIN(max-zoom, zoom)) > > == Resolve non-‘auto’ lengths to pixel lengths == > > 3. Resolve relative and absolute lengths, percentages, and keywords > (‘device-width’, ‘device-height’) to pixel values for the ‘min-width’, > ‘max-width’, ‘min-height’ and ‘max-height’ descriptors. > > == Resolve initial width and height from min/max descriptors == > > 4. If min-width or max-width is not ‘auto’, set width = MAX(min-width, > MIN(max-width, initial-width)) > > 5. If min-height or max-height is not ‘auto’, set height = MAX(min-height, > MIN(max-height, initial-height)) > > == Resolve width value == > > 6. If width and height are both ‘auto’, set width = initial-width > > 7. If width is ‘auto’, set width = height * (initial-width / > initial-height) > > == Resolve height value == > > 8. If height is ‘auto’, set height = width * (initial-height / > initial-width) > > ------------------------- > > But there are quite a bit of changes to the meta viewport chapter: > > Changed UA styles in chapter 11: > ------------------------------**-- > > @viewport { > width: extend-to-zoom 980px; > min-zoom: 0.25; > max-zoom: 5; > } > > > Description of the new ‘extend-to-zoom’ value: > ------------------------------**---------------- > > 11.3. ‘extend-to-zoom’ > > In order to be able to implement the functionality from META viewport > where the viewport width or height is extended to fill the viewing area at > a given zoom level, we introduce a UA internal value to the list of > <viewport-length> values called ‘extend-to-zoom’ It will be used in width > and height declarations in the translation outlined in the section below. > > This new value is necessary in order to implement the mapping for two > reasons. First, whether resolving the width/height needs to extend the > pixel length to the visible width/height for a given zoom factor, depends > on the current initial width/height. <meta name="viewport" > content="width=400, initial-scale=1"> yields a width of 400px for an > initial-width of 320px, and 640px for an initial width of 640px. This can > not be expressed as normative min/max descriptors that would constrain > correctly when the initial width changes like for an orientation change. > > Secondly, the extended width/height also relies on cascading viewport > properties from different sources, including ‘min-zoom’ and ‘max-zoom’ from > the UA stylesheet. For instance, if the UA stylesheet has max-zoom: 5, and > the initial width is 320px, <meta name="viewport" content="width=10"> will > resolve to 48px. > > > How to resolve ‘extend-to-zoom’ to pixel length or auto: > ------------------------------**-------------------------- > (Since this is non-normative, I've added the description to chapter 11, > but when supported, it needs to be done as part of step 3 of the > constraining procedure.) > > > 11.3.1 Resolving ‘extend-to-zoom’ > > The ‘extend-to-zoom’ value is resolved to pixel or auto lengths as part of > step 3 of the constraining procedure. Since this is a non-normative > descriptor value, the resolution is described here. Note that > max-descriptors need to be resolved to pixel lengths before min-descriptors > when ‘extend-to-zoom’ is a valid value. > > Let extend-zoom = MIN(zoom, max-zoom) > > For non-‘auto’ extend-zoom, let: > > extend-width = initial-width / extend-zoom > extend-height = initial-height / extend-zoom > > For max-descriptors, ‘extend-to-zoom’ resolves as follows: > > - If extend-zoom is ‘auto’, set max-width = ‘auto’ or max-height = ‘auto’ > - If extend-zoom is non-‘auto’, set max-width = extend-width or > max-height = extend-height. > > For min-descriptors, ‘extend-to-zoom’ resolves as follows: > > - If extend-zoom is ‘auto’, set min-width = max-width or min-height = > max-height > - If extend-zoom is non-‘auto’, set min-width = MAX(extend-width, > max-width) or min-height = MAX(extend-height, max-height). > > > Changes in translation of viewport meta properties to width/height > descriptors: > ------------------------------**------------------------------** > ------------------- > > The width and height viewport META properties are translated into ‘width’ > and ‘height’ descriptors, setting the ‘min’ value to ‘extend-to-zoom’ and > the ‘max’ value to the pixel length from the viewport META property. > > For a viewport META element that translates into an @viewport rule with a > non-‘auto’ ‘zoom’ declaration and no ‘width’ declaration: > > - If it adds a ‘height’ descriptor, add "width: auto;" > - Otherwise, add "width: extend-to-zoom;" > > > -- > Rune Lillesveen > > -- Kenneth Rohde Christiansen Senior Engineer, WebKit, Qt, EFL Phone +45 4093 0598 / E-mail kenneth at webkit. <http://gmail.com>org ﹆﹆﹆
Received on Wednesday, 14 November 2012 14:29:58 UTC