[whatwg] <imgset> responsive imgs proposition (Re: The src-N proposal)

D. Pitchford dpitchford1 at gmail.com
Wed Nov 13 10:31:01 PST 2013


On Tue, Nov 12, 2013 at 12:50 PM, Adam Barth <w3c at adambarth.com> wrote:

> On Tue, Nov 12, 2013 at 9:22 AM, Markus Ernst <derernst at gmx.ch> wrote:
> > Am 12.11.2013 17:48 schrieb Markus Lanthaler:
> >> On Tuesday, November 12, 2013 5:04 PM, Markus Ernst wrote:
> >>>>
> >>>> We could define some ways to list set of images that could be
> >>>
> >>> replaced for a given img element in HTML and then let CSS pick which
> >>> one to use for example.
> >>>
> >>> <style type="text/css">
> >>> @media (min-width: 480px) {
> >>>     img.artdirected {
> >>>       use-src: 1;
> >>>     }
> >>> }
> >>> @media (min-width: 600px) {
> >>>     img.artdirected {
> >>>       use-src: 2;
> >>>     }
> >>> }
> >>> </style>
> >>>
> >>> <img class="artdirected"
> >>>        src="small.jpg"
> >>>        src-1="medium.jpg"
> >>>        src-2="large.jpg"
> >>>        alt="Alternative text">
> >>>
> >>> [...]
> >>>
> >>>
> >>> This may be technically incorrect or incomplete; it's just a sketch of
> >>> the idea, based on my conviction that sources belong into the <img>
> >>> element, while MQs should be kept centralised.
> >>
> >> Using URL templates this could be simplified even further. For example
> by
> >> extending the meta element to allow it to set some form of global
> >> configuration variables it would be possible to define images using a
> >> simple
> >> naming convention:
> >>
> >> <head>
> >>    <meta var="img-size" content="small">
> >>    <meta var="img-size" content="medium" media="min-width: 480px">
> >>    <meta var="img-size" content="large" media="min-width: 900px">
> >> </head>
> >> <body>
> >>    <img src="teaser-fallback.jpg" src-t="teaser-{img-size}.jpg">
> >>    <img src="profile-fallback.jpg" src-t="profile-{img-size}.jpg">
> >> </body>
> >>
> >> If a variable is set multiple times as in the case above, the latest
> >> assignment wins. As soon as the closing head tag is encountered, the
> value
> >> of all variables is known and they effectively become constants that can
> >> be
> >> used to fill the URL templates of the images in the document's body.
> >
> > That looks really cool to me. Is there any reason why this kind of
> approach
> > is not part of the discussion?
>
> We might even be able to make this work without inventing anything:
>
> <style type="text/css">
> @media (min-width: 480px) {
>   .artdirected {
>     width: 30px;
>     height: 30px;
>     background-image: image-set(url(small.png) 1x, url(small-hires.png)
> 2x);
>  }
> }
> @media (min-width: 600px) {
>   .artdirected {
>     width: 60px;
>     height: 60px;
>     background-image: image-set(url(large.png) 1x, url(large-hires.png)
> 2x);
>  }
> }
> </style>
> <div class="artdirected"></div>
>

Based on the above, the "Feature" image of say an article or recipe would
be added as a background image?
>From an Authors point of view.. yikes that's ugly, but more importantly
could be a large maintenance nightmare.

Real world use case #1:
- I have a large scale corporate website that serves Articles and Recipes
through the same template(s), including the <head>.
- In order to have an Article and Recipe "feature image" responsive with
this solution I would need to now put this in the <head>:

<style type="text/css">
@media (min-width: 480px) {
  .artdirected-article {
    width: 30px;
    height: 30px;
    background-image: image-set(url(article-small.png) 1x,
url(article-small-hires.png) 2x);
    }
.artdirected-recipe {
    width: 30px;
    height: 30px;
    background-image: image-set(url(recipe-small.png) 1x,
url(recipe-small-hires.png) 2x);
    }
}
@media (min-width: 600px) {
  .artdirected-article {
    width: 60px;
    height: 60px;
    background-image: image-set(url(article-large.png) 1x,
url(article-large-hires.png) 2x);
    }
.artdirected-recipe {
    width: 60px;
    height: 60px;
    background-image: image-set(url(recipe-large.png) 1x,
url(recipe-large-hires.png) 2x);
    }
}
</style>

Then, modify templates in order to render these separately:
<div class="artdirected-article"></div>
<div class="artdirected-recipe"></div>

Now what if my templates are also used for TV Show details, Host details...
- Add 2 more entries into the <head>
- abstract the templates for more logic and/or just create separate
templates (which seems as though it may be easier to now do that, yikes)

It also seems as though we'd be adding a boatload of code to the head that
may or may not even be used, so now I would need new MasterPages to render
different <head>'s for different templates.... you get where I'm going with
this?



>
> All the information is there.  We just need to teach the preload
> scanner to parse a subset of CSS and match a subset of selectors.  If
> you stay within the "preloadable" subset, then your images will be
> loaded by the preload scanner.  Otherwise, they'll just be loaded
> normally.
>
> What's most attractive to me about this approach is that it doesn't
> require inventing anything new, which means the compatibility story
> for older user agents is solid.  You don't need a polyfill or anything
> like that.
>

Real world use case #2 (based on "Compatibility is solid"):

Based on the Content from Use Case #1 (Articles and Recipes):
- There is an overall corporate requirement to have Article and Recipe
"Feature" images print along with the Content (Directions, Ingredients
etc.) when a user prints the page. (The Recipes community is notoriously
adept at printing)
- UA's are notoriously horrible at printing css background images.
- I have a choice to make now as an Author -- Do not make Feature images
responsive (based on this solution) or add in more work-a-rounds to have an
image available for printing.


> Adam
>


I applaud the effort to try and utilize existing infrastructure with this
but use case #2 (printing) makes it a show stopper for me.

Cheers,
D.


More information about the whatwg mailing list