W3C home > Mailing lists > Public > www-style@w3.org > August 2009

Re: Image sprites use cases

From: Alex Kaminski <activewidgets@gmail.com>
Date: Sun, 30 Aug 2009 23:10:44 +0200
Message-ID: <6328fb9a0908301410t16bcb035u8792359b07cfa8ea@mail.gmail.com>
To: Brad Kemper <brad.kemper@gmail.com>
Cc: "Tab Atkins Jr." <jackalmage@gmail.com>, www-style@w3.org
On Sun, Aug 30, 2009 at 9:26 PM, Brad Kemper<brad.kemper@gmail.com> wrote:
>
> On Aug 30, 2009, at 11:38 AM, Alex Kaminski wrote:
>
>> Maybe splitting the properties is not that bad? I agree that having
>> list-style-image-position-x is an overkill but maybe
>> background-image-region: x,y,w,h could be acceptable?
>
> So, is the advantage there that you don't have to include the image path and
> file name each time? For example, the following possible equivalent would be
> too long?
>
> "background-image:
> url(/path/to/where/images/are/stored/image.png#xywh=0,40,20,20);"
>

No, my concern is about how many rules you need to write,
not about the length of a single rule. Here is a checkbox/radio example,
which we can do with 23 rules now, assuming that all image files have
the same layout (sprite positions) -

<html>
<head>
<style>

/* value */
.true  .marker {background-position-x: 0}
.false .marker {background-position-x: -25px}
.mixed .marker {background-position-x: -50px}

/* state */
.normal .marker {background-position-y: 0}
.hover  .marker {background-position-y: -25px}
.pressed .marker {background-position-y: -50px}
.disabled .marker {background-position-y: -75px}

/* image variants */
.xp .checkbox .small {background-image: url(xp/checkbox/small.png)}
.xp .checkbox .large {background-image: url(xp/checkbox/large.png)}
.xp .radio .small {background-image: url(xp/radio/small.png)}
.xp .radio .large {background-image: url(xp/radio/large.png)}

.vista .checkbox .small {background-image: url(vista/checkbox/small.png)}
.vista .checkbox .large {background-image: url(vista/checkbox/large.png)}
.vista .radio .small {background-image: url(vista/radio/small.png)}
.vista .radio .large {background-image: url(vista/radio/large.png)}

.osx .checkbox .small {background-image: url(osx/checkbox/small.png)}
.osx .checkbox .large {background-image: url(osx/checkbox/large.png)}
.osx .radio .small {background-image: url(osx/radio/small.png)}
.osx .radio .large {background-image: url(osx/radio/large.png)}

.classic .checkbox .small {background-image: url(classic/checkbox/small.png)}
.classic .checkbox .large {background-image: url(classic/checkbox/large.png)}
.classic .radio .small {background-image: url(classic/radio/small.png)}
.classic .radio .large {background-image: url(classic/radio/large.png)}

</style>
</head>
<body class='xp'>
<div class="checkbox true disabled">
	<div class="marker small"></div>
	Checkbox1
</div>
</body>
</html>



Now using your syntax we would need 192 rules like these -

.xp .checkbox.true.normal .small {background-image:
url(xp/checkbox/small.png#0,0,10,10)}
.xp .checkbox.false.normal .small {background-image:
url(xp/checkbox/small.png#25,0,10,10)}
...

Problem here is that we must explicitly specify the sprite region for _each_
combination of parameters. With url shorthand we still need 192 rules.

However if we split image-region into the separate property - we can reduce
the number of rules to 28 (still more than original 23 but much better
than 192 :-)


/* value/state combined */
.true.normal .marker {background-region: 0, 0, 10, 10}
.true.hover  .marker {background-region: 0, 25, 10, 10}
.true.pressed .marker {background-region: 0, 50, 10, 10}
.true.disabled .marker {background-region: 0, 75, 10, 10}

.false.normal .marker {background-region: 25, 0, 10, 10}
.false.hover  .marker {background-region: 25, 25, 10, 10}
.false.pressed .marker {background-region: 25, 50, 10, 10}
.false.disabled .marker {background-region: 25, 75, 10, 10}

.mixed.normal .marker {background-region: 50, 0, 10, 10}
.mixed.hover  .marker {background-region: 50, 25, 10, 10}
.mixed.pressed .marker {background-region: 50, 50, 10, 10}
.mixed.disabled .marker {background-region: 50, 75, 10, 10}

/* image variants */
.xp .checkbox .small {background-image: url(xp/checkbox/small.png)}
.xp .checkbox .large {background-image: url(xp/checkbox/large.png)}
.xp .radio .small {background-image: url(xp/radio/small.png)}
.xp .radio .large {background-image: url(xp/radio/large.png)}

.vista .checkbox .small {background-image: url(xp/checkbox/small.png)}
.vista .checkbox .large {background-image: url(xp/checkbox/large.png)}
.vista .radio .small {background-image: url(xp/radio/small.png)}
.vista .radio .large {background-image: url(xp/radio/large.png)}

.osx .checkbox .small {background-image: url(xp/checkbox/small.png)}
.osx .checkbox .large {background-image: url(xp/checkbox/large.png)}
.osx .radio .small {background-image: url(xp/radio/small.png)}
.osx .radio .large {background-image: url(xp/radio/large.png)}

.classic .checkbox .small {background-image: url(xp/checkbox/small.png)}
.classic .checkbox .large {background-image: url(xp/checkbox/large.png)}
.classic .radio .small {background-image: url(xp/radio/small.png)}
.classic .radio .large {background-image: url(xp/radio/large.png)}


-- 
Alex Kaminski
http://www.activewidgets.com
Received on Sunday, 30 August 2009 21:11:25 GMT

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