merge repo (one of these days I'll have figured this out properly)
authorcharles
Fri, 16 Nov 2012 02:52:31 +0100
changeset 21 f2fa38306c0b
parent 20 28b85df10769 (current diff)
parent 19 c3cec945d269 (diff)
child 22 bc0558bb2d98
merge repo (one of these days I'll have figured this out properly)
Binary file responsive-images/.DS_Store has changed
Binary file responsive-images/images/obama_crop.png has changed
Binary file responsive-images/images/obama_scaled.png has changed
Binary file responsive-images/images/obama_small.jpg has changed
--- a/responsive-images/responsive-images.html	Fri Nov 16 02:45:26 2012 +0100
+++ b/responsive-images/responsive-images.html	Fri Nov 16 02:52:31 2012 +0100
@@ -1,310 +1,11 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <title>The picture Element and the srcset attribute</title>
-    <meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
-    <script src='http://www.w3.org/Tools/respec/respec-w3c-common' class='remove' async></script>
-    <script type="text/javascript" class='remove'>
-	var respecConfig = {
-		specStatus:           "ED",
-		shortName:            "respimg",
-		noIDLSorting:         true,
-		edDraftURI:           "http://dvcs.w3.org/hg/html-proposals/raw-file/tip/responsive-images/responsive-images.html",
-
-		editors:  [
-		{ 
-			name: "Marcos Cáceres, current",
-			company: "Responsive Images Community Group",
-			companyURL: "http://www.w3.org/community/respimg/"
-		},
-		{ 
-			name: "Mat Marquis, current",
-			company: "Responsive Images Community Group",
-			companyURL: "http://www.w3.org/community/respimg/"
-		},
-		{
-			name: "Adrian Bateman",
-			company: "Microsoft Corporation",
-			companyURL: "http://www.microsoft.com/"
-		}],
-		wg:          "Responsive Images Community Group",
-		wgURI:       "http://www.w3.org/community/respimg/",
-		wgPublicList: "public-respimg",
-		wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
-		issueBase:   "https://github.com/Wilto/draft-prop/issues",
-		noIDLSectionTitle: true
-	};
-	</script>
-    <style type="text/css">
-.informative {
-	background-color: rgb(233, 251, 233);
-}
-ol > li {
-	margin-bottom: 1em;
-}
-#conformance dd {
-	margin-bottom: 1em;
-}
-pre {
-	tab-size: 3; /* Reduce indentation. */
-}
-.informative-subhed {
-	font-size: 120%;
-}
-  a{ color: blue}
-  a:not([href]) { color: red}
-</style>
-    </head>
-    <body>
-    <section id='abstract'>
-          <p>Through the combination of a new <code>picture</code> element and a new the <code>srcset</code> attribute for the existing <code>source</code> element, this specification adds functionality to HTML that allows authors to list a range of images which may be suitable for a range of device capabilities and different usage scenarios. The ability to adapt content to the constraints and capabilities of devices and different usage scenarios is commonly referred to as &quot;responsive design&quot;.
-        This allows user agents to be more responsive to a wide spectrum of  browsing scenarios, ranging from simple mobile devices to desktop browsers scenarios, when selecting which image resources to download and display for an end-user. This includes, but is not limited to, the selection of images most suited for either high or low density displays and screen resolutions on range of devices, are well as responsive selection of images based on  printer's dpi and color reproduction capabilities.</p>    
-    </section>
-
-   <section id="goals">
-    <h1>Goals</h1>
-    <p>The overarching goal is to  give  developers a way to provide user agents with sufficient information about each image, and applicable media, so that the user agent can select the most appropriate one for a dynamically changing browsing situations. This includes, but is not limited to, different screen pixel width/height, pixel densities, environmental lighting conditions, and potentially even situations where the network bandwith changes dymamically. By providing a graded set of image sources, UA discretion could similarly apply to situations where the network bandwith changes dymamically. Based on user settings and network latency calculated by the user agent, the UA may have the option of selecting lower density image sources.</p>
-    <p>In addition, this proposal is being worked on with the following goals in mind:</p>
-    <ul>
-          <li>Will degrade gracefully on older user agents.</li>
-          <li>Can be polyfilled.</li>
-          <li>Retains, at a minimum, the same level of accessibility as current <code>img</code> element - and we may even be able to do better! </li>
-          <li>Adhere to common conventions around for content, markup, behavior, and styling.</li>
-          <li>Provides a purely client-side solution that can rely on scripts, but doesn&rsquo;t require it. Similarly, this solution must not require the use of any server-side technologies to reliably deliver content tailored for the end user&rsquo;s browsing situation.</li>
-          <li>Supports use cases where authors need to explicitly define different image versions as opposed to simply different resolutions of the same image.</li>
-          <li>Provides a consistent and predictable pattern for delivering alternate media sources based on client context.</li>
-          <li>Supports succinct but understandable mark-up. </li>
-          <li>Don't repeat yourself: If the same image is used multiple times on a single page, it would be useful to define the resource selection in a single place in the document and have this affect all instances of the image</li>
-     </ul>
-  </section>    
-
-    
-<section id="sotd">
-      <p>This document was proposed by the <a href="http://www.w3.org/community/respimg/">Responsive Images Community Group</a> as a solution to <a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=18384">bug 18384</a>.</p>
-    </section>
-
-
-<section id="conformance">
-      <p>This specification describes the conformance criteria for <dfn title="user agent">user agents</dfn> (relevant to implementors) and <dfn title="document">documents</dfn> (relevant to authors and authoring tool implementors).</p>
-      <p>Implementations that use ECMAScript to expose the APIs defined in this specification MUST implement them in a manner consistent with the ECMAScript Bindings defined in the Web IDL specification [[!WEBIDL]].</p>
-    </section>
-<section id="definitions">
-      <h1>Definitions</h1>
-      <p>The following terms are used throughout this specification so they are gathered here for the readers convenience. The following list of terms is not exhaustive; other terms are defined throughout this specification.</p>
-      <p>The follow terms are defined by the<cite> </cite>[[!HTML5]] specification: <dfn><a href="http://www.w3.org/TR/html5/the-img-element.html#the-img-element"><code>img</code> element</a></dfn>, <dfn><a href="http://www.w3.org/TR/html5/the-source-element.html#the-source-element"><code>source</code> element</a></dfn>, <dfn><a href="http://www.w3.org/TR/html5/media-elements.html#media-resource"><code>media</code> resource</a></dfn>, <dfn><a href="http://www.w3.org/TR/html5/content-models.html#fallback-content">fallback content</a></dfn>, <dfn><a href="http://www.w3.org/TR/html5/urls.html#valid-non-empty-url-potentially-surrounded-by-spaces">valid non-empty URL potentially surrounded by spaces</a></dfn> and <dfn><a href="http://www.w3.org/TR/html5/common-microsyntaxes.html#valid-media-query">valid media query</a></dfn>.</p>
-      <p>The <dfn><a href="http://dev.w3.org/csswg/css4-images/#image-set-notation">image-set notation</a></dfn> microsyntax is defined by the<cite> CSS Image Values and Replaced Content Module Level 4 Specification</cite> [[!CSS4-IMAGES]].</p>
-      <p>The <dfn><a href="http://www.w3.org/TR/html-alt-techniques/#secm1">techniques for providing useful text alternatives for <code>img</code> elements</a></dfn> are defined by the <cite>HTML5: Techniques for providing useful text alternatives</cite> Specification [[!ALT-TECHNIQUES]].</p>
-    </section>
-<section>
-      <h1>The <code>picture</code> element</h1>
-      <dl>
-    <dt><a href="http://dev.w3.org/html5/spec/single-page.html#element-dfn-categories" title="element-dfn-categories">Categories</a>:</dt>
-    <dd><a href="http://dev.w3.org/html5/spec/single-page.html#flow-content-1">Flow content</a>.</dd>
-    <dd><a href="http://dev.w3.org/html5/spec/single-page.html#phrasing-content-1">Phrasing content</a>.</dd>
-    <dd><a href="http://dev.w3.org/html5/spec/single-page.html#embedded-content-2">Embedded content</a>.</dd>
-    <dd><a href="http://dev.w3.org/html5/spec/single-page.html#palpable-content-0">Palpable content</a>.</dd>
-    <dt><a href="http://dev.w3.org/html5/spec/single-page.html#element-dfn-contexts" title="element-dfn-contexts">Contexts in which this element can be used</a>:</dt>
-    <dd>Where <a href="http://dev.w3.org/html5/spec/single-page.html#embedded-content-2">embedded content</a> is expected.</dd>
-    <dt><a href="http://dev.w3.org/html5/spec/single-page.html#element-dfn-content-model" title="element-dfn-content-model">Content model</a>:</dt>
-    <dd>If zero descendents, then <a href="http://dev.w3.org/html5/spec/content-models.html#transparent">transparent</a>. </dd>
-    <dd>One or more <code>source</code> elements.</dd>
-    <dd>Zero or one <code>img</code> element, serving as <a>fallback content</a>.</dd>
-    <dt><a href="http://dev.w3.org/html5/spec/single-page.html#element-dfn-attributes" title="element-dfn-attributes">Content attributes</a>:</dt>
-    <dd><a href="http://dev.w3.org/html5/spec/single-page.html#global-attributes">Global attributes</a></dd>
-    <dd><code>crossorigin</code></dd>
-    <dd><code>ismap</code></dd>
-    <dd><code>width</code></dd>
-    <dd><code>height</code></dd>
-    <dt><a href="http://dev.w3.org/html5/spec/single-page.html#element-dfn-dom" title="element-dfn-dom">DOM interface</a>:</dt>
-    <dd>
-      <pre>[NamedConstructor=Picture,
- NamedConstructor=Picture(unsigned long width),
- NamedConstructor=Picture(unsigned long width, unsigned long height)]
-HTMLPictureElement : HTMLImageElement{
-   readonly attribute DOMString media; 
-}</pre>
-    
-    </dd>
-  </dl>
-  <p>The <code><dfn>picture</dfn></code> element used for displaying an image that can come from a range of sources (see <code>srcset</code> attribute). Which image the user agent displays depends on the 
-        <a>algorithm for deriving the source image</a>. </p>
-  <p>On getting the <code>media</code> attribute, the user agent MUST return the </p>
-  <p>The <a>chosen image</a> is the embedded content.  </p>
-  <p>For user agents that don't support the <code>picture</code> element, an author can provide an <code>img</code> element as <a>fallback content</a>. User agents SHOULD NOT show this content to the user: it is intended for legacy user agents that do not support <code>picture</code>, so that a legacy <code>img</code> element can be shown instead.</p>
-      <p>Authoring requirement: as with the <code>img</code> element, documents  must not use the <code>picture</code> element as a layout tool. In particular, picture elements should not be used to display transparent images, as they rarely convey meaning and rarely add anything useful to the document.      </p>
-      <section><h2>Example of usage</h2>
-      <p>Sample picture element markup:</p>
-      <pre class="example">&lt;picture width=&quot;500&quot; height=&quot;500&quot;&gt;
-   &lt;source media="(min-width: 45em)" srcset="large-1.jpg 1x, large-2.jpg 2x"&gt;
- 	&lt;source media="(min-width: 18em)" srcset="med-1.jpg 1x, med-2.jpg 2x"&gt;
- 	&lt;source srcset="small-1.jpg 1x, small-2.jpg 2x"&gt;
-  	&lt;img src="small-1.jpg" alt=""&gt;
-   &lt;p&gt;Accessible text&lt;/p&gt;
-&lt;/picture&gt;</pre></section>
-      <section>
-    <section><h2>Differences from <code>img</code> element</h2>
-    <p>Unlike the <code>img</code> element, which is limited to pointing to a single image resource, the <code>picture</code> element is intended to allow an author to reference many different image sources that the browser can then choose based on a <a>media query</a> or some other relevant browsing situation or constraint. This means that a user agent can best select an image source that is most suitable for available display size, pixel density, or possibly even network bandwidth. Or the most suitable image source may be a different version of an image that has been modified by the author to be suitable for a particular use (see: <a>art direction</a> use case). </p>
-    <p>It is RECOMMENDED that for cases where a single image source is available, and where no responsive adoption is needed, authors  use the <code>img</code> element. </p></section>
-  </section>
-      <!-- / picture permitted attributes -->
-      
-      <section>
-    <p>When used with the <code>picture</code> element, a <a>document</a> SHOULD only contain <code>source</code> elements need to represent the same subject matter, but cropping and zooming can differ.</p>
-    <div class="issue">It should be codified that this is not a mechanism by which to swap disparate images depending on screen size. See bug <a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=18384#c7">18384</a>.</div>
-  </section>
-      
-
-      
-    </section>
-
-
-    <section>
-    <h1>The <code>srcset</code> attribute </h1>
-    <p>The <dfn><code>srcset</code> attribute</dfn> of the <code>source</code> element is is used to refer to alternate <a>image resource</a> for a single image at different resolutions. The expected value of the attribute is a  comma-separated list of <a>valid non-empty URL potentially surrounded by spaces</a> that matches the <code>valid-srcset</code> production: </p>
-    <pre><dfn>valid-srcset</dfn> = [ image-set-decl &quot;,&quot; ]* [ image-set-decl ] 
-image-set-decl = <a href="http://www.w3.org/TR/2011/REC-CSS2-20110607/syndata.html#uri">uri</a> resolution</pre>
-    <p>The <code><a href="http://www.w3.org/TR/2011/REC-CSS2-20110607/syndata.html#uri">uri</a></code> component is defined in [[!CSS21]] and the <code>resolution</code> component is defined in the<cite> CSS Image Values and Replaced Content Module Level 4 Specification</cite> [[!CSS4-IMAGES]].</p>
-    <section>
-    <h2>Example</h2>
-    <p>The following is an example of a <code>valid-srcset</code>.</p>
-    <pre class="example">large-1.jpg 1x, large-2.jpg 2x </pre>
-    </section>
-    </section>
-
-
-<section id="algorithms">
-  <h1>Algorithm for deriving the source image</h1>
-  <p>The <dfn>algorithm for deriving the source image</dfn> as follows. The result is the image source to be used by the <code>picture</code> element, which reflects  the <code>picture</code> element's <a><code>src</code> IDL attribute</a>: </p>
-<div class="note">
-<p>What we want to do is have the <code>picture</code> behave exactly the same as an <code>img</code> element, but with the only difference being that it is <code>source</code> elements is used to determine the value of the <code>src</code> IDL attribute (and hence what image content is displayed). How that is determined is through  using the <code>media</code> attribute attribute of the <code>source</code> element. </p>
-<p>To avoid complexity, the <code>type</code> attribute is all child <code>source</code> elements is ignored in this context. </p>
-<p>So, to derive the <dfn>source image</dfn>: we gather all the media queries from the <code>source</code> elements' <code>media</code> attributes into a &quot;stylesheet&quot;, in document order. Any missing <code>media</code> attributes are just assumed to mean &quot;all&quot;. Any media attributes that are not valid media queries are ignored. So, given the following: </p>
-<pre>&lt;picture id=&quot;pictureElement&quot;&gt;
-<span class="example">   &lt;source media="(min-width: 45em)" srcset="large-1.jpg 1x, large-2.jpg 2x"&gt;
- 	&lt;source media="(min-width: 18em)" srcset="med-1.jpg 1x, med-2.jpg 2x"&gt;
-   
-   &lt;!-- assume media all --&gt; 
- 	&lt;source srcset="small-1.jpg 1x, small-2.jpg 2x"&gt;</span>
-   
-   &lt;!-- the following are ignored --&gt;
-<span class="example">   &lt;source media=" is the massage " srcset=&quot;&quot;&gt;
-      </span>
-&lt;/picture&gt;</pre>
-<p>Becomes the rough CSS equivalent of (a virtual stylesheet for the document?):</p>
-<pre>
-
-//assume #pictureElement is magically scoped to the corresponding element. 
[email protected] all{
-   #pictureElement{
-      background-image: image-set(<span class="example">small-1.jpg 1x, small-2.jpg 2x</span>);
-   }
-}
-
[email protected]<span class="example"> all and (min-width: 45em)</span>{
-   #pictureElement{      
-      background-image: image-set(<span class="example">large-1.jpg 1x, large-2.jpg 2x</span>);
-   }
-}
-
[email protected] <span class="example">all and </span><span class="example">(min-width: 18em)</span>{
-   #pictureElement{      
-      background-image: image-set(<span class="example">med-1.jpg 1x, med-2.jpg 2x</span>);
-   }
-}</pre>
-<p>The API then just works the same as per images. Events are fired in the same way as if the image's src IDL attribute had been set manually by the author. </p>
-<p>The resource fetching behavior of then governed by <cite>CSS Image Values and Replaced Content Module Level 4</cite>.</p>
-</div>
-
-
-
-<p>A user agent MAY  override requests for higher-resolution images based on  user preferences. For example: “always request high-resolution images,” “always request low-resolution images,” and “request high-resolution images as bandwidth permits” based on the bandwidth information available to the browser.</p>
-
-    </section>
-<!-- /algorithms -->
-
-
-
-<section id="examples" class="informative">
-    <h1>Examples</h1>
-      <p>TODO: add examples</p>
-    </section>
-<!-- examples -->
-
-<section id="use-cases" class="appendix informative">   
-  <h1>Use Cases </h1>
-Cosmetic changes and removed some attribute defs that are not inherited from HTMLImageInterface
-      <p>There are many use cases that are supported as listed below. There are two primary use cases:</p>
-      <ol>
-    <li>The need for different image sources at different viewport sizes in responsive web designs.</li>
-    <li>The need for different image sources depending on the pixel density of the display.</li>
-  </ol>
-      <p>Most of the more specific use cases fall under one of these two umbrella needs.</p>
-      <h2 class="informative-subhed">Viewport Sizes</h2>
-      <p>There are many different screen sizes that are in common daily usage, ranging from small phones to giant high-definition televisions. This change in how we access the web was the main reason for needing to make responsive websites in the first place.</p>
-      <p>A common practice in responsive design is delivering images without height and width attributes and letting the browser resize the image. This technique is commonly called flexible images or fluid images.</p>
-      <p>However, delivering an image at a size optimized for large displays to a small display is not ideal. Large images incur unnecessary download and processing time, slowing the experience for users.</p>
-      <p>To solve this problem, web authors will provide multiple sources of the same image at different resolutions and then pick the correct size image based on the viewport size. This is commonly done for CSS background images in responsive designs, but web authors lack the tools to do so for images in HTML without the use of JavaScript.</p>
-      <h2 class="informative-subhed">Display Density</h2>
-      <p>Since the high-density devices (e.g., Retina&trade; displays on Apple products) came out, the quality of images on the web has changed. Beforehand, even though we had a variety of device sizes, the DPI has always been the same. This is no longer the case and it is very likely that the current resolution/pixel density on Retina&trade; devices will not be the only one.</p>
-      <p>We should be ready and able to support the current resolutions as well as any others that manufacturers may use in the future.</p>
-      <h2 class="informative-subhed">Mobile-first and desktop-first responsive design</h2>
-      <p>A common approach in sites that cater to a wide range of devices using a single codebase is a “mobile-first” development pattern—starting with a simple, linear layout and increasing layout and functional complexity for larger screen sizes using media queries.</p>
-      <p>“Desktop-first” responsive design takes the opposite approach and starts from the desktop design and simplifies it using media queries to support small displays. Authors retrofitting existing sites often take a desktop-first approach out of necessity because changing to a mobile-first approach would be a significant undertaking.</p>
-      <p>These two approaches require that a solution for images support the following:</p>
-      <ul>
-    <li>Authors need the ability to define fallback image as the smallest image (mobile first) or the largest image (desktop first).</li>
-    <li>Authors would like to define the breakpoints for images as either minimum values (mobile first) or maximum values (desktop first) to match the media queries used in their design.</li>
-  </ul>
-      <h2 class="informative-subhed">Relative Units</h2>
-      <p>A common practice in creating flexible layouts is to specify the size values in media queries as relative units: <code>em</code>, <code>rem</code>, <code>vw</code>/<code>vh</code> etc. This is most commonly seen using ems in order to reflow layouts based on users’ zoom preferences, or to resize elements through JavaScript by dynamically altering a font-size value.</p>
-      <h2 class="informative-subhed">Matching image source breakpoints to design breakpoints</h2>
-      <p>Web authors would like to be able to optionally match the breakpoints for images to the breakpoints that they have defined in their responsive designs. Being able to match the breakpoints ensures that images are operating under the same rules that define the layout. It also helps authors verify their approach by ensuring that the same viewport measurement tests are being used in both HTML and CSS.</p>
-      <p>This desire is a facet of the two preceding use cases (mobile/desktop-first responsive design and relative units). If a breakpoint in the design is defined as:</p>
-      <p><code>@media screen (max-width: 41em) {}</code></p>
-      <p>Then web authors would like to be able to define a similar breakpoint for images at a max-width of 41em and not have to translate that measurement into another unit like pixels even if it is possible to calculate that measurement:</p>
-      <ul>
-    <li>The default font size in most browsers is 16 pixels. So 41em can be calculated to be 41 * 16 = 656 pixels. Calculating this for every breakpoint, while possible, would be tedious and potentially error-prone for authors.</li>
-    <li>Unless the image break points support both max and min values, then the image breakpoint will need to be further modified from the layout breakpoint that it was derived from. For example, if the image format only supports minimum width tests, then instead of using a maximum width of 656 pixels, the document author would need to specify 657 pixels as a minimum width for the breakpoint.</li>
-  </ul>
-      <p>When debugging a document, if the author cannot specify breakpoints for images in the same manner that they are defined for the design, authors will need to convert the breakpoints back to the values specified in the layout in order to verify that they match. This increases authoring time and the likelihood that math errors on the part of authors (possibly due to a different rounding scheme in a particular user agent) cause unexpected behavior.</p>
-      <h2 class="informative-subhed">Mobile Networks</h2>
-      <p>It should be noted that many devices are used on mobile networks which are often very slow or exhibit high latency. Often times conferences suffer from slow networks as well due to many users attempting to use a single network connection simultaneously. Many people also have very slow or erratic connections in their homes and workplaces. While it may not be possible for a solution to be based on bandwidth, anything that can be done to reduce latency and HTTP requests should be done.</p>
-      <p>Allowing authors to specify different images for different viewport sizes and display densities is one step towards providing a better experience on slow networks. In the future, user agents may be able to select different images based on network speed or user preference.</p>
-      <h2 class="informative-subhed">User Zoom</h2>
-      <p>Images blur when the user resizes the page. Users may zoom an image in order to see more detail. In these cases, user agents could select a higher-resolution version of an image to display.</p>
-      <div class="issue">It's not clear whether the picture element is prescriptive (i.e. the user agent MUST show a particular image given certain device properties) or suggestive (i.e. the user agent has control over picking the best image).</div>
-      <h2 class="informative-subhed">Art Direction</h2>
-      <p>Web authors often want to provide different versions of the same image at different sizes depending on the viewport. We refer to this as the <dfn>a rt direction</dfn> use case.</p>
-      <p>A simple example of this would be changing the crop of an image based on display area:</p>
-      <ul>
-    <li>a website wants to normally show a large image (e.g. of a figure with a broad background) on displays that are big enough.</li>
-    <li>when shown on a smaller device, simply shrinking the image may reduce its relevance, usefulness, or legibility, and thus the site may wish to show a different cropping or layout of the same image at the smaller size.</li>
-  </ul>
-      <p>Examples: <a href="http://blog.cloudfour.com/a-framework-for-discussing-responsive-images-solutions/#artdirection">Large photo of Obama at a Chrysler plant vs. tighter cropped thumbnail</a></p>
-      <p>A more complex example that changes orientation of the image, crop, and how text flows around an image based on the size of the viewport:</p>
-      <ul>
-    <li>On the Nokia Browser site where it describes the <a href="http://browser.nokia.com/smartphones.html">Meego browser</a>, the Nokia Lumia is shown <a href="http://browser.nokia.com/resources/images/home-feature.png">horizontally on wide screens</a>. As the screen narrows, the Nokia Lumia is then shown <a href="http://browser.nokia.com/resources/images/smartphones/[email protected]">vertically and cropped</a>. Bryan and Stephanie Rieger, the designers of the site, have talked about how on a wide screen, showing the full phone horizontally showed the browser best, but on small screens, changing the img to vertical made more sense because it allowed the reader to still make out the features of the browser in the image.</li>
-  </ul>
-      <h2 class="informative-subhed">Alternate Print Sources</h2>
-      <p>Printed web documents generally have pixelated images due to printers having a higher DPI than most images currently served on the web. Defining higher resolution images for printing would increase the abilities of web authors to define great printed versions of their documents. For example, a photo sharing site could provide a bandwidth-optimized image for display on screen, but a high-resolution image for print.</p>
-      <h2 class="informative-subhed">Gray Scale and High Contrast Modes</h2>
-      <p>Displaying a color image on a monochrome display does not always work well, as two different colors of similar luminosity would be impossible to distinguish in a monochrome environment.</p>
-      <p>Microsoft is proposing a media query which lets you <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465764.aspx">detect that the user agent has been put in high contrast mode</a> (for accessibility reasons), and that the content should follow along. Being able to switch images based on high contrast mode would be nice.</p>
-      <p>Extracted from <a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-August/036845.html">WhatWG mailing list thread</a>.</p>
-    </section>
-<!-- use-cases -->
-
-<section id="polyfills" class="appendix informative"></section>
-<!-- polyfills -->
-
-<section class='appendix'>
-      <h1>Open Issues</h1>
-		<p>...</p>
-		
-  <h1>Acknowledgements</h1>
-      <p>TODO: add thanks</p>
-    </section>
-<!-- appendix -->
+<title>Use Cases and Requirements for Standardizing Responsive Images</title>
+<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
+<meta http-equiv="refresh" content="0;url=http://picture.responsiveimages.org">
+</head>
+<body>
 
 </body>
 </html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/responsive-images/use-cases.html	Fri Nov 16 02:52:31 2012 +0100
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Use Cases and Requirements for Standardizing Responsive Images</title>
+<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
+<script src='http://www.w3.org/Tools/respec/respec-w3c-common' class='remove' async></script>
+<script type="text/javascript" class='remove'>
+	var respecConfig = {
+		specStatus:           "unofficial",
+		shortName:            "respimg",
+		noIDLSorting:         true,
+		edDraftURI:           "http://picture.responsiveimages.org",
+
+		editors:  [
+		{ 
+			name: "Marcos Cáceres",
+			company: "Responsive Images Community Group",
+			companyURL: "http://www.w3.org/community/respimg/"
+		},
+		{ 
+			name: "Mat Marquis",
+			company: "Responsive Images Community Group",
+			companyURL: "http://www.w3.org/community/respimg/"
+		},
+		{
+			name: "Yoav Weiss",
+			company: "Responsive Images Community Group",
+			companyURL: "http://www.w3.org/community/respimg/"
+		}],
+		wg:          "Responsive Images Community Group",
+		wgURI:       "http://www.w3.org/community/respimg/",
+		wgPublicList: "public-respimg",
+		wgPatentURI: "http://www.w3.org/2004/01/pp-impl/40318/status",
+		issueBase:   "https://github.com/ResponsiveImagesCG/ri-usecases/issues",
+		noIDLSectionTitle: true
+	};
+	</script>
+<style type="text/css">
+.informative {
+	background-color: rgb(233, 251, 233);
+}
+ol > li {
+	margin-bottom: 1em;
+}
+#conformance dd {
+	margin-bottom: 1em;
+}
+pre {
+	tab-size: 3; /* Reduce indentation. */
+}
+.informative-subhed {
+	font-size: 120%;
+}
+a {
+	color: blue
+}
+a:not([href]) {
+	color: red
+}
+#open-issues-xhr {
+	font-size: .9em;
+}
+#open-issues-xhr li {
+	padding: .25em 0;
+}
+#open-issues-xhr .meta {
+	display: block;
+	font: normal .8em/1 sans-serif;
+	padding: .35em 0 0 0;
+}
+#open-issues-xhr .meta b {
+	font-weight: normal;
+}
+#open-issues-xhr .meta span {
+	display: block;
+	float: left;
+	width: 5.5em;
+}
+</style>
+</head>
+<body>
+
+<section id='abstract'>
+  <p>This document captures the use cases and requirements for standardizing a solution for responsive images.</p>
+  
+  <p style="text-align: center; font-size: 1.5em; border: .2em dotted black; background-color: #E6E6E6; padding: 1em">Hi! If you find any bugs, typos, or issues please <a href=" https://github.com/ResponsiveImagesCG/ri-usecases/issues">file a bug on github</a> or <a href="mailto:[email protected]">email us</a>! </p>
+</section>
+
+<section id="introduction">
+  <h1>Introduction</h1>
+  <p>To visually communicate effectively, developers  require a means to explicitly control which image, from a set of images, is shown to a user  in response to the <dfn>environmental conditions</dfn> of the user agent. In a [[HTML5]] user agent, environmental conditions are expressed as CSS media features (e.g., max-width, orientation, monochrome, etc.) and CSS media types (e.g., print, screen, etc.). Many media features are dynamic in nature (e.g.,  a browser window is re-sized, a device is rotated from portrait to landscape, and so on), thus a user agent constantly responds to events that cause the properties of media features to change. These changes in media features and media type can reduce an image's ability to communicate effectively (e.g. images become blurry or pixelated).</p>
+  <p>As the number and varieties of high-density screens has increased (both on mobile and desktop devices), web developers have created custom techniques  for serving images that best match a user's browsing environment. For a list of examples of the range of techniques in use in 2012, see Chris Coyier's article "<a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">Which responsive images solution should you use?</a>". However, these techniques have a number of shortcomings, which are discussed below (and these shortcomings serve as the motivation to reach out to the <a href="http://w3.org">W3C</a> and <a href="http://whatwg.org">WHATWG</a> for standardization). </p>
+</section>
+
+<section id="sotd">
+  <p>The <a href="http://www.w3.org/community/respimg/">RICG</a>'s goal for this document is to capture a complete set of developer requirements for responsive images. The group intends to deliver the document to the HTMLWG and <a href="http://whatwg.org">WHATWG</a> for comment (see <a href="https://www.w3.org/Bugs/Public/show_bug.cgi?id=17061">bug 17061</a>). The use cases and requirements were gathered by  consultation with <a href="http://w3c.org/">W3C</a> and <a href="http://whatwg.org">WHATWG</a> participants, community group members, and the general public. The RICG's goal for this document is to make sure that developer's requirements for responsive images have been formally captured. </p>
+  <p>The RICG expects that a technical specification can be created to formally address each of the <a>requirements</a> (i.e., the <dfn>solution</dfn>). To date, two such specifications are currently under development: </p>
+  <ul>
+    <li><cite><a href="http://dvcs.w3.org/hg/html-proposals/raw-file/tip/responsive-images/responsive-images.html">The picture element: An HTML extension for responsive images</a></cite>. </li>
+    <li><cite><a href="http://dev.w3.org/html5/srcset/">The srcset attribute: An HTML extension for adaptive images</a></cite>.</li>
+  </ul>
+  <p>Proposed solutions are not mutually exclusive. They may work together to address the complete set of <a>use cases</a> and <a>requirements</a>.</p>
+</section>
+<section id="problems">
+  <h1>Problems with current techniques</h1>
+  <p>There are a number of problems with the <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">techniques</a> currently being relied on by web developers: </p>
+  <dl>
+    <dt>Reliance on  semantically neutral elements and CSS backgrounds: </dt>
+    <dd>
+      <p> Large images incur unnecessary download and processing time, slowing the experience for users. To solve this problem, web developers  provide multiple sources of the same image at different resolutions and then pick the correct size image based on the viewport size. This is commonly done for CSS background images in responsive designs, but web developers lack the markup to do so for images in HTML without hacking together a solution. This means that developers  have resorted to using <code>div</code> and other container elements to achieve the desired functionality. </p>
+      <p>In other words, developers are being forced to work around, or completely ignore, authoring requirements of [[!HTML5]].</p>
+    </dd>
+    <dt>Reliance on scripts and server side processing: </dt>
+    <dd>
+      <p>Current solutions to this &quot;responsive images&quot; problem rely on either JavaScript libraries or server-side solutions - both of which add unnecessary complexity to the development process. </p>
+    </dd>
+  </dl>
+  <p>The RICG believes that standardization of a browser-based solution can overcome these problems. </p>
+</section>
+
+<section id="usecases">
+  <h1>Use cases</h1>
+  
+    <p>The following <dfn>use cases</dfn> provide represent the techniques currently used by Web developers to achieve both repulsive designs with responsive images. </p>
+  <section>
+    <h2>Art direction</h2>
+    <p> To communicate effectively across the range of screen resolutions and device pixel ratios available on devices today, web developers often need to provide different versions of the same image. Developers do this because if an image is too small on a screen the meaning of that image cannot be properly communicated to a user - conversely, if more space is available, a developer may want to show a different image that depicts more information. Another reason developers do this is to avoid images becoming blurry when scaled too much by the browser.</p>
+    <p>For example, in the following figure it is difficult to discern the man's facial expressions on the image on the left when compared to the image on the middle. The image on the far right show the effects of scaling the image too much, which also affects the image's ability to communicate effectively:</p>
+<figure>
+<img src="images/obama_small.jpg" alt="Obama talking seriously on the phone" width="240" height="160">
+<img src="images/obama_crop.png" alt="Obama talking seriously on the phone" width="240" height="160">
+<img src="images/obama_scaled.png" alt="Obama talking seriously on the phone" width="240" height="161">
+<figcaption>Three images showing how The figure shows how different zooms and crop convey information about a man talking on the phone.</figcaption>
+</figure>
+    <p>Typically, the desired communicative effect is achieved by changing the crop of an image so it can be targetted at the features of a particular display (or set of displays):</p>
+    <ul>
+      <li>a website wants to normally show a large image (e.g. of a figure with a broad background) on displays that are big enough.</li>
+      <li>when shown on a smaller screen, simply shrinking the image may reduce its relevance, usefulness, or legibility, and thus the site may wish to show a different cropping or layout of the same image at the smaller size.</li>
+    </ul>
+    <p>This is illustrated in the figure below. </p>
+    <figure>
+      <img src="http://cdn.css-tricks.com/wp-content/uploads/2012/05/difimages.jpg">
+      <figcaption>Using different images that have been cropped to fit a particular screen's features can help in communicating a message effectively. </figcaption>  
+  </figure>
+<p>Another related use case is one where orientation determines the source of the image, the crop, and how text flows around an image based on the size of the viewport. For example, on the Nokia Browser site where it describes the <a href="http://browser.nokia.com/smartphones.html">Meego browser</a>, the Nokia Lumia is shown <a href="http://browser.nokia.com/resources/images/home-feature.png">horizontally on wide screens</a>. As the screen narrows, the Nokia Lumia is then shown <a href="http://browser.nokia.com/resources/images/smartphones/[email protected]">vertically and cropped</a>. Bryan and Stephanie Rieger, the designers of the site, have talked about how on a wide screen, showing the full phone horizontally showed the browser best, but on small screens, changing the image to vertical made more sense because it allowed the reader to still make out the features of the browser in the image.</p>
+</section>
+    
+  <section>
+    <h2>Design breakpoints</h2>
+    <p>In Web development, a <dfn>breakpoint</dfn> is one of a series of <a href="http://www.w3.org/TR/css3-mediaqueries/">CSS Media Queries</a> that update the styles of a page based on matching some media features. A single breakpoint represents a logical rule (or set of rules) determining the point at which the contents of a media query are applied to a page&rsquo;s layout.</p>
+    <p>Developers currently match specific <a>breakpoints</a> for images to the breakpoints that they have defined in the CSS of their responsive designs. Being able to match the breakpoints ensures that images are operating under the same rules that define the layout of a design. It also helps developers verify their approach by ensuring that the same viewport measurement tests are being used in both HTML and CSS.</p>
+    <p> If a breakpoint in the design is specified in [[CSS21]] as:</p>
+    <pre class="example"><code>@media screen and (max-width: 41em) {}</code></pre>
+    <p>Then web developers would like to be able to define a similar breakpoint for images at a max-width of 41em and not have to translate that measurement into another unit like pixels even if it is possible to calculate that measurement:</p>
+    <ul>
+      <li>The default font size in most browsers is 16 pixels. So 41em can be calculated to be 41 * 16 = 656 pixels. Calculating this for every breakpoint, while possible, would be tedious and potentially error-prone for developers.</li>
+      <li>Unless the image break points support both max and min values, then the image breakpoint will need to be further modified from the layout breakpoint that it was derived from. For example, if the image format only supports minimum width tests, then instead of using a maximum width of 656 pixels, the document developer would need to specify 657 pixels as a minimum width for the breakpoint.</li>
+    </ul>
+    <p>When debugging a document, if the developer cannot specify breakpoints for images in the same manner that they are defined for the design, developers will need to convert the breakpoints back to the values specified in the layout in order to verify that they match. This increases authoring time and the likelihood of errors on the part of developers.</p>
+  </section>
+ 
+  <section>
+    <h2> Media types</h2>
+    <p>Printed web documents generally have pixelated images due to printers having a higher DPI than most images currently served on the web. According to <cite>Wikipedia's</cite> article on "<a href="http://en.wikipedia.org/wiki/Dots_per_inch">Dots per inch</a>": </p>
+    <blockquote>
+      <p>&quot;An inkjet printer sprays ink through tiny nozzles, and is typically capable of 300-600 DPI. A laser printer applies toner through a controlled electrostatic charge, and may be in the range of 600 to 1,800 DPI.&quot;</p>
+    </blockquote>
+    <p>Defining higher resolution images for printing would increase the abilities of web developers to define  printed versions of their documents. For example, a photo sharing site could provide a bandwidth-optimized image for display on screen, but a high-resolution image for print. </p>
+  </section>
+  <section>
+    <h2>Monochrome and high-contrast </h2>
+    <p>Displaying a color image on monochrome media is not always ideal (e.g., on paper an e-ink displays). This is because two different colors of similar luminosity are impossible to distinguish on  monochrome media. Serving  images specifically for monochrome media can help overcome this issue. </p>
+    <p>Currently, server side solutions exist to adapt web content to e-ink displays. For example, <a href="http://kinstant.com/">http://kinstant.com/</a>. Or custom services have been created specifically for accessing popular websites, like <a href="http://www.kindletwit.com/">www.kindletwit.com</a>. </p>
+    <p>Additionally, Microsoft is <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465764.aspx">proposing a &quot;high-contrast&quot; media feature</a>, which enables developers to know if the user agent is operating in a high-contrast mode. Knowing if the user agent is operating in high-contrast mode allows  developers to serve  appropriate images, which could potentially assists visually impaired users. To be able to use such a solution with images on the Web, developers would currently need to rely on the problematic <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">techniques</a> previously discussed. </p>
+  </section>
+  <section>
+    <h2>Mobile-first and desktop-first responsive design</h2>
+    <p>A common approach in sites that cater to a wide range of devices using a single codebase is a “mobile-first” development pattern—starting with a simple, linear layout and increasing layout and functional complexity for larger screen sizes using media queries. In such designs, web developers generally serve appropriately sized images first and increase the size of images as required for the available dimensions. </p>
+    <p>“Desktop-first” responsive design takes the opposite approach and starts from the desktop design and simplifies it using media queries to support small displays. Developers retrofitting existing sites often take a desktop-first approach out of necessity because changing to a mobile-first approach would be a significant undertaking. </p>
+    <p>In such cases, providing both a range of images to match the available dimensions, as well as a fallback for legacy user agents, is desirable. Current <a href="http://css-tricks.com/which-responsive-images-solution-should-you-use/">techniques</a> are problematic in that they rely on scripting and the <code>noscript</code> element to work.</p>
+  </section>
+  <section> 	
+    <h2>Relative units</h2>
+    <p>A common practice in creating flexible layouts is to specify the size values in media queries as relative units: <code>em</code>, <code>rem</code>, <code>vw</code>/<code>vh</code> etc. See, for example, Lyza Gardner's article <a href="http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/">The EMs have it: Proportional Media Queries FTW!</a>. This approach is most commonly seen using <code>em</code>s in order to reflow layouts based on users’ zoom preferences, or to resize elements through JavaScript by dynamically altering a font-size value. </p>
+    <p>In flexible layout designs, when a user zooms into an design, images get proportionally scaled and can become blurry or pixelated potentially affecting the image's ability to communicate as the developer intended (or simply looks ugly, which is also unacceptable). Swapping to a more suitable image is used to overcome this problem. </p>
+    
+  </section>
+  
+<section>  
+    <h2>Dynamically acquired images data </h2>
+    <p>There are cases where the  image data may be dynamically generated (e.g., using <code>canvas</code> element and related APIs) or may be acquired from the device itself (e.g., from the camera). In such cases, a practical means to interface programmatically with an image or a set of images is often necessary. Without having a suitable API, it will be difficult for developers to manipulate the sources of images. </p>
+</section>
+</section>
+
+<section id="requirements">
+<h1>Requirements</h1>
+<p>The  <a>use cases</a> give rise to the following <dfn>requirements</dfn>:</p>
+<ul>
+  <li>
+    <p>The <a>solution</a> MUST afford developers the ability to match image sources with particular media features and/or media types - and have the user agent update the source of an image as the media features and media types of the browser environment change dynamically over time. </p>
+  </li>
+  <li>
+    <p>The  <a>solution</a> MUST degrade gracefully on legacy user agents by, for example, falling back on the <code>img</code> element and by relying on [[HTML5]] built-in fallback mechanisms.</p></li>
+  <li>
+    <p>The <a>solution</a> MUST allow developers to provide textual descriptions of text content for images using  [[HTML5]] markup. This helps overcome some of the limitations inherent in the image element's <code>alt</code> attribute, particularly relating to internationalization.</p></li>
+  <li>
+    <p>The <a>solution</a> MUST adhere to akin solutions already in [[HTML5]], such as those used by <code>audio</code> and <code>video</code> elements.</p></li>
+  <li><p>The <a>solution</a> MUST NOT require any server-side processing. </p></li>
+  <li>
+    <p>The <a>solution</a> MUST provide developers with a means to programmatically interface with the displayed image, as well as access relevant attributes and methods that make solution easy to work with. In addition, the solution MUST provide means to hook into relevant events (e.g., loading, errors, etc.). In any case, an API SHOULD provide a means to:</p>
+    <ul>
+      <li>
+        <p> Determine the current source of the image.</p>
+      </li>
+      <li>
+        <p>Determine what environmental condition caused the current source to be selected (reflected as, for example, a CSS Media Query). </p>
+      </li>
+      <li>
+        <p>Add, remove, and update image sources.</p>
+      </li>
+    </ul>
+  </li>
+  <li>
+    <p>The <a>solution</a> MUST afford developers the ability to explicitly define different image versions as opposed to simply different resolutions of the same image. </p>
+  </li>
+  <li>
+    <p>The <a>solution</a> MUST afford developers  the ability to define fallback image as the smallest image (mobile first) or the largest image (desktop first).</p>
+  </li>
+  <li>
+    <p> The <a>solution</a> MUST afford developers  the ability to  define the breakpoints for images as either minimum values (mobile first) or maximum values (desktop first) to match the media queries used in their design.</p>
+  </li>
+  <li>
+    <p>The <a>solution</a> MUST function in such a way that is is responsive to environmental changes in relative units (e.g., when the user increases the base font size of the browser by pressing <kbd>ctrl+</kbd> or <kbd>ctrl-</kbd>).</p>
+  </li>
+  <li>
+    <p>To provide compatibility with legacy user agents, it SHOULD be possible for developers to <a href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">polyfill</a> the <a>solution</a>.</p>
+  </li>
+</ul>
+</section>
+
+<section>
+  <h1>Open issues</h1>
+  <p>We are tracking <dfn>open issues</dfn> on Github. <a href="https://github.com/ResponsiveImagesCG/ri-usecases/issues">Please help close them</a>! </p>
+  <div id="open-issues-xhr"></div>
+</section>
+<section>
+  <h1>Acknowledgements</h1>
+  <p>We would like to thank the following people for reviewing the specification: Mike Taylor, Doug Shults. </p>
+</section>
+<script src="https://raw.github.com/ResponsiveImagesCG/meta/master/scripts/show_issues.js"></script> 
+<script src="https://api.github.com/repos/ResponsiveImagesCG/ri-usecases/issues?state=open&amp;callback=processResponse"></script>
+</body>
+</html>
\ No newline at end of file