diff --git a/css-viewport/Overview.bs b/css-viewport/Overview.bs index b2f131de0e45..ba18d3e9088d 100644 --- a/css-viewport/Overview.bs +++ b/css-viewport/Overview.bs @@ -49,9 +49,7 @@ by CSS 2.1. Users will likely need to zoom on the content to view it comfortably. This mitigation is unnecessary for sites that have been designed to work -well on small viewports. This specification describes the CSS -@viewport rule which allows authors to control and -opt-out of this behavior. +well on small viewports. Issue: This specification is written from an implementation-centric point of view, making it arguably difficult to read. @@ -65,75 +63,6 @@ Issue: Various issues about this specification and related specifications are listed in this report. -

-Motivating Scenarios

- -
- In this example, the document can be rendered without issue with any - size viewport. The author indicates this using the - @viewport rule. - -
-        <!doctype html>
-        <html>
-        <head>
-        <title>My Site</title>
-        <style>
-            @viewport { width: auto; }
-        </style>
-        </head>
-        <body>
-            Since this document is just some simple text, it can be rendered
-            at any width without issue.  The text will just re-wrap as needed
-            when viewed in a smaller viewport.
-        </body>
-        </html>
-    
-
- -
- In this example, the document can be rendered without issue for viewports - down to 384px, but smaller sizes would clip the diagram. The author - indicates this using the @viewport rule in - combination with a media query. When the viewport would be smaller than - 384px, the user agent will select 384px as the initial containing block - size and scale the resulting layout down to fit the available space. - -
-        <!doctype html>
-        <html>
-        <head>
-        <style>
-            @viewport { width: auto; }
-            @media (max-width: 384px) {
-                @viewport { width: 384px; }
-            }
-            body {
-                margin: 0;
-            }
-            img {
-                min-width: 384px;
-            }
-        </style>
-        <title>My Other Site</title>
-        </head>
-        <body>
-            <img src="diagram.png">
-        </body>
-        </html>
-    
-
- -

-Values

- -This specification follows -the CSS -property definition conventions from [[!CSS3SYN]]. - -Value types are defined in [[!CSS3VAL]]. - -

The viewport

@@ -142,9 +71,6 @@ is a feature of a user agent for [=continuous media=] and used to establish the initial containing block for [=continuous media=]. For [=paged media=], the initial containing block is based on the page area. The page area can be set through ''@page'' rules. -Hence, ''@viewport'' applies to [=continuous media=], -and ''@page'' to [=paged media=], -and they will not interact or conflict. This specification introduces a way of overriding the size of the viewport provided by the user agent (UA). Because of this, we need to introduce the @@ -159,12 +85,13 @@ difference between the ''initial viewport'' and the ''actual viewport''. size of the window or viewing area.
actual viewport
- This is the viewport you get after the cascaded viewport descriptors, - and the following constraining procedure - have been applied. + This is the viewport you get after processing the viewport + <meta> tag.
+ISSUE: Make ''actual viewport'' the layout viewport, define visual viewport. + When the ''actual viewport'' cannot fit inside the window or viewing area, either because the ''actual viewport'' is larger than the ''initial viewport'' or the zoom factor @@ -180,800 +107,20 @@ property for the first <BODY> element of an HTML or XHTML document. For other document types, it is the computed 'direction' for the root element. -

"dbaron: The question is, what does this do on the desktop -browser? (And what's a desktop browser)". Need to say that a "desktop" -browser typically have no UA styles, as opposed to the -UA stylesheet outlined for current mobile -behavior, and that no UA styles for ''@viewport'' will give "desktop" -behavior per default (actual viewport is initial viewport).

- - -

-The @viewport rule

- -
-UA vendors implementing this specification -are strongly encouraged to do so both for their mobile and desktop browsers. -The ''@viewport'' mechanism is designed to be usable and useful -on all browsers, not only mobile ones. -However, if support is only available on mobile browsers for a significant time, -there is a risk that authors would write ''@viewport'' rules that work on mobile -but do the wrong if applied by a desktop browser. -This would make it difficult to later add support for ''@viewport'' in desktop browsers. -

An example of such misguided use would be to write @viewport { width: 320px; } -instead of @viewport { width: auto; } -to make a document “mobile friendly”. -

- -The ''@viewport'' at-rule -consists of the @-keyword followed by a block of descriptors -describing the viewport. - -The descriptors inside an ''@viewport'' rule are per document and -there is no inheritance involved. Hence declarations using the -''inherit'' keyword will be dropped. They work similarly -to ''@page'' descriptors and follow the cascading order of CSS. Hence, -descriptors in ''@viewport'' rules will override descriptors from -preceding rules. The declarations allow !important which will affect -cascading of descriptors accordingly. - -''@viewport'' rules apply to top level documents only. - -
- This example sets the viewport to at least 320px, but otherwise match - window width if it is wider than 320px. Note that it is enough to set - the width as the height will be resolved from the width when auto. - -
-        @viewport {
-            width: 320px auto;
-        }
-    
-
- -

-Syntax

- -The syntax for the ''@viewport'' rule is as follows (using the -notation from -the Grammar -appendix of CSS 2.1 [[!CSS21]]): - -
-    viewport
-      : VIEWPORT_SYM S* '{' S* declaration? [ ';' S* declaration? ]* '}' S*
-      ;
-
- -with the new token: - -
@{V}{I}{E}{W}{P}{O}{R}{T} {return VIEWPORT_SYM;}
- -where: - -
-V    v|\\0{0,4}(56|76)(\r\n|[ \t\r\n\f])?|\\v
-W    w|\\0{0,4}(57|77)(\r\n|[ \t\r\n\f])?|\\w
-
- -The viewport non-terminal is added to the -stylesheet production along with the -ruleset, media, and page -non-terminals: - -
-    stylesheet
-      : [ CHARSET_SYM STRING ';' ]?
-        [S|CDO|CDC]* [ import [ CDO S* | CDC S* ]* ]*
-        [ [ ruleset | media | page | viewport ] [ CDO S* | CDC S* ]* ]*
-      ;
-
- -It is also added to the nested_statement production defined in [[!CSS3-CONDITIONAL]] -to allow ''@viewport'' rules nested inside conditional group rules -such as ''@media'' or ''@supports'': - -
-    nested_statement
-      : ruleset | media | page | font_face_rule | keyframes_rule |
-        supports_rule | viewport
-      ;
-
- - -

-Viewport descriptors

- -This section presents the descriptors that are allowed inside an -''@viewport'' rule. Other descriptors than those listed here will be -dropped. - -Relative length values are resolved against initial values. For -instance 'em's are resolved against the initial value of the -'font-size' property. Viewport lengths (''vw'', ''vh'', ''vmin'', -''vmax'') are relative to the initial viewport. - -

-The 'min-width' and 'max-width' descriptors

- -

min- and max- functionality can be achieved with media queries, should these be removed?

- -
-Name: min-width
-For: @viewport
-Value: <>
-Initial: auto
-Percentages: Refer to the width of the ''initial viewport''
-Computed value: auto, an absolute length, or a percentage as specified
-
- -
-Name: max-width
-For: @viewport
-Value: <>
-Initial: auto
-Percentages: Refer to the width of the ''initial viewport''
-Computed value: auto, an absolute length, or a percentage as specified
-
- -Specifies the minimum and maximum width of -the viewport -that is used to set the size of -the -initial containing block where - -
<viewport-length> = auto | <length> | <percentage>
- -and the values have the following meanings: - -
-
auto
-
- The used value is calculated from the other descriptors' - values according to the - constraining procedure. -
- -

The user-agent stylesheets recommended in the informative section don't adequately represent current implementation behaviors. Should there be a more explicit mechanism for switching between UA default behavior and requesting the CSS pixel?

- -
<>
-
- A non-negative absolute or relative length. -
- -
<>
-
- A percentage value relative to the width or height of the - ''initial viewport'' at zoom factor 1.0, for horizontal - and vertical lengths respectively. Must be non-negative. -
-
- -The 'min-width' and 'max-width' descriptors are inputs to the -constraining procedure. The -width will initially be set as close as possible to the ''initial -viewport'' width within the min/max constraints. - -

-The 'width' shorthand descriptor

- -
-Name: width
-For: @viewport
-Value: <>{1,2}
-Initial: See individual descriptors
-Percentages: See individual descriptors
-Computed value: See individual descriptors
-
- -This is a shorthand descriptor for setting both 'min-width' and -'max-width'. One <> value will set both 'min-width' -and 'max-width' to that value. Two <> values will -set 'min-width' to the first and 'max-width' to the second. - -

-The 'min-height' and 'max-height' descriptors

- -
-Name: min-height
-For: @viewport
-Value: <>
-Initial: auto
-Percentages: Refer to the height of the ''initial viewport''
-Computed value: auto, an absolute length, or a percentage as specified
-
- -
-Name: max-height
-For: @viewport
-Value: <>
-Initial: auto
-Percentages: Refer to the height of the ''initial viewport''
-Computed value: auto, an absolute length, or a percentage as specified
-
- -Specifies the minimum and maximum height of the -viewport -that is used to set the size of the - -initial containing block. - -The min-height and max-height descriptors are inputs to -the constraining procedure. -The height will initially be set as close as possible to the ''initial -viewport'' height within the min/max constraints. - -

-The 'height' shorthand descriptor

- -
-Name: height
-For: @viewport
-Value: <>{1,2}
-Initial: See individual descriptors
-Percentages: See individual descriptors
-Computed value: See individual descriptors
-
- -This is a shorthand descriptor for setting both min-height and max-height. -One <> value will set both min-height and max-height -to that value. Two <> values will set min-height to -the first and max-height to the second. - -

-The 'zoom' descriptor

- -
-Name: zoom
-For: @viewport
-Value: auto | <> | <>
-Initial: auto
-Percentages: The zoom factor itself
-Computed value: auto, or a non-negative number or percentage as specified
-
- -Specifies the initial zoom factor for the window or viewing area. This -is a magnifying glass type of zoom. Interactively changing the zoom -factor from the initial zoom factor does not affect the size of the -initial or the actual viewport. - -Values have the following meanings: - -
-
auto
-
- The zoom factor is UA-dependent. The UA may use the size of the area - of the canvas on which the document is rendered to find that initial - zoom factor. See this section for a - proposed way of handling ''zoom/auto'' values for 'zoom'. -
- -
<>
-
- A non-negative number used as a zoom factor. A factor of 1.0 means - that no zooming is done. Values larger than 1.0 gives a zoomed-in - effect and values smaller than 1.0 a zoomed-out effect. -
- -
<>
-
- A non-negative percentage value used as a zoom factor. A factor of - 100% means that no zooming is done. Values larger than 100% gives a - zoomed-in effect and values smaller than 100% a zoomed-out effect. -
-
- -

-The 'min-zoom' descriptor

- -
-Name: min-zoom
-For: @viewport
-Value: auto | <> | <>
-Initial: auto
-Percentages: The zoom factor itself
-Computed value: auto, or a non-negative number or percentage as specified
-
- -Specifies the smallest allowed zoom factor. It is used as input to the -constraining procedure to constrain -non-''zoom/auto'' 'zoom' values, but also to limit the allowed zoom factor -that can be set through user interaction. The UA should also use this -value as a constraint when choosing an actual zoom factor when the -used value of 'zoom' is ''zoom/auto''. - -Values have the following meanings: - -
-
auto
-
- The lower limit on zoom factor is UA dependent. There will be no minimum - value constraint on the 'zoom' descriptor used in - the constraining - procedure -
- -
<>
-
- A non-negative number limiting the minimum value of the zoom factor. -
- -
<>
-
- A non-negative percentage limiting the minimum value of the zoom factor. -
-
- -

-The 'max-zoom' descriptor

- -
-Name: max-zoom
-For: @viewport
-Value: auto | <> | <>
-Initial: auto
-Percentages: The zoom factor itself
-Computed value: auto, or a non-negative number or percentage as specified
-
- -Specifies the largest allowed zoom factor. It is used as input to the -constraining procedure to constrain -non-''zoom/auto'' 'zoom' values, but also to limit the allowed zoom factor -that can be set through user interaction. The UA may choose to ignore -this limit for accessibility/usability reasons – see the relevant note in -the 'user-zoom' section. The UA should also use this -value as a constraint when choosing an actual zoom factor when the -used value of 'zoom' is ''zoom/auto''. - -Values have the following meanings: - -
-
auto
-
- The upper limit on zoom factor is UA dependent. There will be - no maximum value constraint on the 'zoom' descriptor used in - the constraining - procedure -
- -
<>
-
- A non-negative number limiting the maximum value of the zoom factor. -
- -
<>
-
- A non-negative percentage limiting the maximum value of the zoom factor. -
-
- -

-The 'user-zoom' descriptor

- -
-Name: user-zoom
-For: @viewport
-Value: zoom | fixed
-Initial: zoom
-Percentages: N/A
-Computed value: as specified
-
- -Specifies if the zoom factor can be changed by user interaction or not. - -Values have the following meanings: - -
-
zoom
-
- The user can interactively change the zoom factor. -
-
fixed
-
- The user cannot interactively change the zoom factor. -
-
- -
- Authors should not suppress (with user-zoom: fixed) - or limit (with max-zoom) the ability of users to resize - a document, as this causes accessibility and usability issues. - - There may be specific use cases where preventing users from zooming - may be appropriate, such as map applications – where custom zoom - functionality is handled via scripting. However, in general this - practice should be avoided. - - Most user agents now allow users to always zoom, regardless - of any restrictions specified by web content – either by default, or - as a setting/option (which may however not be immediately apparent - to users). -
- -

-The 'orientation' descriptor

- -
-Name: orientation
-For: @viewport
-Value: auto | portrait | landscape
-Initial: auto
-Percentages: N/A
-Computed value: as specified
-
- -This descriptor is used to request that a document is displayed in portrait -or landscape mode. For a UA/device where the orientation is changed upon -tilting the device, an author can use this descriptor to inhibit the -orientation change. The descriptor should be respected for -standalone web applications, and when the document is displayed -in fullscreen. It is recommended that it is ignored for normal -web navigation to avoid confusing the user. - -Values have the following meanings: - -
-
auto
-
- The UA automatically chooses the orientation based on the device's - normal mode of operation. The UA may choose to change the orientation - of the presentation when the device is tilted. -
- -
portrait
-
- The document should be locked to portrait presentation. -
- -
landscape
-
- The document should be locked to landscape presentation. -
-
- - -

-Constraining viewport descriptor values

- -

-Definitions

- -For the procedure below: - -Descriptors refer to the values resolved/constrained to at that point in -the procedure. They are initially resolved to their computed values. - -width and height refer -to the resolved viewport size and not the shorthand descriptors. They -are both initially ''viewport-length/auto''. - -MIN/MAX computations where one of the arguments is -''zoom/auto'' resolve to the other argument. For instance, MIN(0.25, -''zoom/auto'') = 0.25, and MAX(5, ''zoom/auto'') = 5. - -initial-width is the width of the -''initial viewport'' in pixels at zoom factor 1.0. - -initial-height is the height of the -''initial viewport'' in pixels at zoom factor 1.0. - -

-The procedure

- -The used values are resolved from the computed values going through -the steps below. - -User agents are expected, but not required, to re-run this procedure -and re-layout the document, if necessary, in response to changes -in the user environment, for example if the device is tilted from -landscape to portrait mode or the window that forms the ''initial -viewport'' is resized. - -However, Media Queries and Device Adaption are tethered specifications. As a result, -UAs that also -support Media Queries -must re-run this procedure and re-layout the document in all cases -where changes in the user environment would cause them to re-evaluate -Media Queries. - -

-Resolve min-zoom -and max-zoom values

- -
    -
  1. - If min-zoom is not - ''zoom/auto'' and max-zoom - is not ''zoom/auto'', set max-zoom = MAX(min-zoom, - max-zoom) -
  2. -
- -

-Constrain zoom value to -the [min-zoom, max-zoom] range

- -
    -
  1. - If zoom is not ''zoom/auto'', - set zoom = MAX(min-zoom, MIN(max-zoom, - zoom)) -
  2. -
- -

-Resolve non-''viewport-length/auto'' lengths to pixel lengths

- -
    -
  1. - Resolve absolute lengths and percentages to pixel values for the - 'min-width', 'max-width', 'min-height', and 'max-height' - descriptors. -
  2. -
- -

-Resolve initial width -and height from min/max -descriptors

- -
    -
  1. - If min-width or - max-width is not - ''viewport-length/auto'', set width = MAX(min-width, MIN(max-width, - initial-width)) -
  2. - -
  3. - If min-height or - max-height is not - ''viewport-length/auto'', set height = MAX(min-height, MIN(max-height, - initial-height)) -
  4. -
- -

-Resolve width value

- -
    -
  1. - If width and - height are both - ''viewport-length/auto'', set width = initial-width -
  2. - -
  3. - Otherwise, if width is - ''viewport-length/auto'', set width = height * (initial-width / - initial-height), or width = initial-width - if initial-height is 0. -
  4. -
- -

-Resolve height value

- -
    -
  1. - If height is ''viewport-length/auto'', - set height = width * (initial-height / - initial-width), or height = initial-height - if initial-width is 0. -
  2. -
- - -

-Media Queries

- -For several media features, the size of the initial containing block and -the orientation of the device affects the result of a media query -evaluation, which means that the effect of ''@viewport'' rules on -media queries needs extra attention. - -From the Media Queries specification [[!MEDIAQ]]: - -
-

- “To avoid circular dependencies, it is never necessary - to apply the style sheet in order to evaluate expressions. For example, - the aspect ratio of a printed document may be influenced by a style sheet, - but expressions involving 'device-aspect-ratio' will be based - on the default aspect ratio of the user agent.” -

-
- -The UA must however cascade ''@viewport'' rules separately with the -''initial viewport'' size used for evaluating media feature -expressions and other values that depend on the viewport size to avoid -circular dependencies, but use the actual viewport size when cascading all other rules. - -Procedure for applying CSS rules: - -
    -
  1. - Cascade all ''@viewport'' rules using the ''initial viewport'' - size for values and evaluations which rely on viewport size -
  2. -
  3. - Compute the ''actual viewport'' from the cascaded viewport - descriptors -
  4. -
  5. - Cascade all other rules using the ''actual viewport'' size -
  6. -
- -

- The rationale for using the viewport descriptors obtained from applying - the ''@viewport'' rules for evaluating media queries for style - rules, is that media queries should match the ''actual viewport'' - that the document will be laid out in and not the initial or the - one specified in the UA stylesheet. Consider the example below - given that the UA stylesheet has a viewport width of 980px, but an - ''initial viewport'' width of 320px. The author has made separate - styles to make the document look good for initial containing block - widths above or below 400px. The ''actual viewport'' used will be - 320px wide, and in order to match the styles with the ''actual - viewport'' width, the viewport resulting from applying the - ''@viewport'' rules should be used to evaluate the media queries. -

- -
- Given an initial viewport width of 320px and a UA stylesheet viewport - width of 980px, the first media query will not match, but the second will. - -
-        @viewport {
-            width: auto;
-        }
-
-        @media screen and (min-width: 400px) {
-            div { color: red; }
-        }
-
-        @media screen and (max-width: 400px) {
-            div { color: green; }
-        }
-    
-
- -Another example: - -
- The media query below should match because the ''@viewport'' rule - is applied before the media query is evaluated. - -
-        @media screen and (width: 397px) {
-            div { color: green; }
-        }
-
-        @viewport {
-            width: 397px;
-        }
-    
-
- -Below is an example where an ''@viewport'' rule relies on a media -query affected by the viewport descriptors. - -
- The green color should be applied to a div because the - ''initial viewport'' width is used to evaluate the media query - for the second ''@viewport'' rule, but the ''actual viewport'' - is used for evaluating the media query when applying style rules. - -
-        @viewport {
-            width: 397px;
-        }
-
-        @media screen and (width: 397px) {
-            @viewport {
-                width: 500px;
-            }
-        }
-
-        @media screen and (width: 397px) {
-            div { color: green; }
-        }
-    
-
- -It is recommended that authors do not write ''@viewport'' rules that -rely on media queries whose evaluation is affected by viewport -descriptors. It is also recommended that the ''@viewport'' rule(s) is -placed as early in the document as possible to avoid unnecessary -re-evaluation of media queries or reflows. - - -

-CSSOM

- -The ''@viewport'' rule is exposed to the CSSOM through a new CSSRule -interface. - -

-Interface CSSRule

- -The following rule type is added to the CSSRule -interface. It provides identification for the new viewport rule. - -
-partial interface CSSRule {
-    const unsigned short VIEWPORT_RULE = 15;
-};
-
- -

-Interface CSSViewportRule

- -The CSSViewportRule interface represents the -style rule for an ''@viewport'' rule. - -
-[Exposed=Window]
-interface CSSViewportRule : CSSRule {
-    readonly attribute CSSStyleDeclaration style;
-};
-
- -
-
style
-
- This attribute represents the viewport descriptors associated - with this ''@viewport'' rule. -
-
-

-Viewport <META> element

- -This section is not normative. - -This section describes a mapping from the content attribute of the -viewport <META> element, first -implemented by Apple in the iPhone Safari browser, to the descriptors -of the ''@viewport'' rule described in this -specification. +Viewport <meta> element -In order to match the Safari implementation, the following parsing -algorithm and translation rules rely on the UA stylesheet below. See the -section on UA stylesheets for an elaborate -description. - -
-@viewport {
-    width: extend-to-zoom 980px;
-    min-zoom: 0.25;
-    max-zoom: 5;
-}
-
- -

- Note that these values might not fit well with all UAs. For - instance, with a min-zoom of 0.25 you will be able to fit the whole width - of the document inside the window for widths up to 1280px on a 320px wide - device like the original iPhone, but only 960px if you have a 240px - display (all widths being given in CSS pixel units). -

+Issue: Specify me

Properties

The recognized properties in the viewport -<META> element are: +<meta> element are:
    -
  • width
  • -
  • height
  • +
  • width
  • +
  • height
  • initial-scale
  • minimum-scale
  • maximum-scale
  • @@ -984,7 +131,7 @@ The recognized properties in the viewport Parsing algorithm Below is an algorithm for parsing the content -attribute of the <META> tag produced +attribute of the <meta> tag produced from testing Safari on the iPhone. The testing was done on an iPod touch running iPhone OS 4. The UA string of the browser: "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_0 like Mac OS X; @@ -1100,8 +247,8 @@ as follows: the whole property-value string will be matched with the following strings case-insensitively: yes, - no, device-width, - device-height + no, device-width, + device-height
  • If the string did not match any of the known strings, the @@ -1111,391 +258,7 @@ as follows:

    ''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 <> -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 64px. - -

    -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-''zoom/auto'' extend-zoom, let: - -
    -    extend-width = initial-width / extend-zoom
    -    extend-height = initial-height / extend-zoom
    -
    - -Then, resolve for ''extend-to-zoom'' as follows: - -
      -
    • If extend-zoom is ''zoom/auto'': -
        -
      1. - If max-width is - 'extend-to-zoom', set - max-width = ''viewport-length/auto'' -
      2. -
      3. - If max-height is - 'extend-to-zoom', set - max-height = ''viewport-length/auto'' -
      4. -
      5. - If min-width is - 'extend-to-zoom', set - min-width = max-width -
      6. -
      7. - If min-height is - 'extend-to-zoom', set - min-height = max-height -
      8. -
      -
    • - -
    • - If extend-zoom is non-''zoom/auto'': -
        -
      1. - If max-width is - 'extend-to-zoom', set - max-width = extend-width -
      2. -
      3. - If max-height is - 'extend-to-zoom', set - max-height = extend-height -
      4. -
      5. - If min-width is - 'extend-to-zoom', set - min-width = MAX(extend-width, max-width) -
      6. -
      7. - If min-height is - 'extend-to-zoom', set - min-height = MAX(extend-height, max-height) -
      8. -
      -
    • -
    - -

    -Translation into ''@viewport'' descriptors

    - -The Viewport <META> element is placed -in the cascade as if it was a <STYLE> element, -in the exact same place in the dom, that only contains a single -''@viewport'' rule. - -Each of the property/value pair from the parsing in the -previous section are translated, and added to that single at-rule -as follows: - -

    -Unknown properties

    - -Unknown properties are dropped. - -

    -The width -and height -properties

    - -The width and -height -viewport <META> properties are -translated into 'width' and 'height' descriptors, setting the -'min-width'/'min-height' value to ''extend-to-zoom'' and the -'max-width'/'max-height' value to the length from the -viewport <META> property as follows: - -
      -
    1. - Non-negative number values are translated to pixel lengths, clamped to - the range: [1px, 10000px] -
    2. -
    3. - Negative number values are dropped -
    4. -
    5. - device-width - and device-height - translate to 100vw and 100vh respectively -
    6. -
    7. - Other keywords and unknown values translate to 1px -
    8. -
    - -

    - Some existing UA implementations use device dimensions in CSS - pixels, and some use the window dimensions (CSS pixels) for device-width / - device-height. Above, we translate to 100vw / 100vh which are the window - dimensions. The rationale is that the device dimensions would not be what - the author intended for UAs where the window is resizable or does not fill - the screen of the device. -

    - -
    - - This <META> element: - -
    -        <meta name="viewport" content="width=500, height=600">
    -    
    - - translates into: - -
    -        @viewport {
    -            width: extend-to-zoom 500px;
    -            height: extend-to-zoom 600px;
    -        }
    -    
    -
    - -For a viewport <META> element that -translates into an ''@viewport'' rule with a non-''zoom/auto'' 'zoom' -declaration and no 'width' declaration: - -
      -
    • - If it adds a 'height' - descriptor, add:
      width: auto;
      -
    • -
    • - Otherwise, add:
      width: extend-to-zoom;
      -
    • -
    - -to the ''@viewport'' rule. - -
    - This <META> element: - -
    -        <meta name="viewport" content="initial-scale=1.0">
    -    
    - - translates into: - -
    -        @viewport {
    -            zoom: 1.0;
    -            width: extend-to-zoom;
    -        }
    -    
    -
    - -
    - This <META> element: - -
    -        <meta name="viewport" content="initial-scale=2.0,
    -        height=device-width">
    -    
    - - translates into: - -
    -        @viewport {
    -            zoom: 2.0;
    -            width: auto;
    -            height: extend-to-zoom 100%;
    -        }
    -    
    -
    - -

    -The initial-scale, minimum-scale, and maximum-scale properties

    - -The properties are translated into -'zoom', -'min-zoom', -and 'max-zoom' -respectively with the following translations of values. - -
      -
    1. - Non-negative number values are translated to <number> values, - clamped to the range [0.1, 10] -
    2. -
    3. - Negative number values are dropped -
    4. -
    5. - yes is translated to 1 -
    6. -
    7. - device-width - and device-height - are translated to 10 -
    8. -
    9. - no and unknown values are - translated to 0.1 -
    10. -
    - -For a viewport <META> element that translates -into an ''@viewport'' rule with no 'max-zoom' declaration and a -non-auto 'min-zoom' value that is larger than the 'max-zoom' value of -the UA stylesheet, the 'min-zoom' declaration value is clamped to the -UA stylesheet 'max-zoom' value. - -

    -The user-scalable property

    - -The user-scalable property is translated into -'user-zoom' with the following value translations. - -
      -
    1. - yes and no are - translated into ''zoom'' and ''fixed'' respectively. -
    2. -
    3. - Numbers ≥ 1, numbers ≤ -1, device-width - and device-height are mapped to ''zoom'' -
    4. -
    5. - Numbers in the range <-1, 1>, and unknown values, - are mapped to ''fixed'' -
    6. -
    - -
    - This <META> element: - -
    -        <meta name="viewport" content="width=480, initial-scale=2.0, user-scalable=1">
    -    
    - - will translate into this ''@viewport'' block: - -
    -        @viewport {
    -            width: 480px;
    -            zoom: 2.0;
    -            user-zoom: zoom;
    -        }
    -    
    -
    - -

    -Handling ''zoom/auto'' for 'zoom'

    - -This section is not normative. - -This section presents one way of picking an actual value for the -'zoom' descriptor when the used value is ''zoom/auto''. - -Given an ''initial viewport'' with size (initial-width, -initial-height), and a finite region within the -canvas -where the formatting structure is rendered (rendered-width, -rendered-height). That region is at least as large as the -''actual viewport''. - -Then, if the used value of 'zoom' is ''zoom/auto'', let the actual zoom factor be: - -
    -    zoom = MAX(initial-width / rendered-width, initial-height / rendered-height)
    -
    - -The actual zoom factor should also be further limited by the -[min-zoom, max-zoom] range. - -

    -UA stylesheets

    - -This section is informative - -Traditional user agents, used mostly on desktop and laptop computers, can -easily be resized to fit most websites inside the initial viewport without -breaking the layout. Using the recommendations below, sites not adding any -''@viewport'' rules themselves will continue to look and function like -they always have. - -

    -Large screen UA styles

    - -If a user agent has an initial viewport size large enough to fit common documents without breaking the layout, -or which can easily to resized to do so, -the recommendation is to have no UA styles. -That means that it will have all descriptors initially set to ''viewport-length/auto'', -and behave as it would have without support for viewport descriptors. - -If a user agent supports changing orientation, -and the landscape mode's size fits common documents as described above -but the portrait mode's size does not, -it is recommended to set a minimum layout width -equal to that of the width in landscape mode. - -
    -
    -        @viewport {
    -            min-width: 1024px;
    -        }
    -    
    -
    - -

    -Small screen UA styles

    - -For smaller screen UAs, the UA could set the minimum viewport width to -typically used as an initial viewport width of a traditional user -agent (as described above). - -
    -
    -        @viewport {
    -            min-width: 980px;
    -        }
    -    
    -
    - -It is recommended that limitations in zooming capabilities are not -reflected in the UA styles but rather only affect the used values for -zoom. The min-zoom/max-zoom UA styles mentioned in -the Viewport META section are there to -give an accurate description of how the Safari browser behaves, not as -part of a recommended UA stylesheet. +Issue: Specify extend-to-zoom behavior by the viewport meta tag
     {
    @@ -1518,9 +281,9 @@ This appendix describes changes from the
     
     
    • Made various editorial improvements and clarifications. -
    • Added OM Interfaces. +
    • Added OM Interfaces.
    • Added semi-colon as separator in meta viewport. -
    • Created UA stylesheets section. +
    • Created UA stylesheets section.
    • Added recommendation for when to respect orientation property.
    • Dropped support for the resolution descriptor.
    • Decouple width/height and zoom, introducing ''extend-to-zoom'' value for meta viewport translation. @@ -1529,4 +292,5 @@ This appendix describes changes from the
    • Removed support for device-width/height.
    • Apply @viewport to top level document only.
    • Extend [[!CSS3-CONDITIONAL]] rather than CSS21 for nesting in @media. +
    • Removed @viewport