Cross-Platform CSS for Translucent DIVs

Had a need recently (in 2011!) to make some translucent (semi-opaque) elements on a Web page. CSS3 supports an “alpha” channel, the “a” in rgba, to provide color opaqueness, but IE 7 and 8 do not support this attribute.  So, most web developers resort to using a translucent background-image.  However, there is a pure CSS way that is compatible with all modern browsers today (IE6 ignored, of course).  This takes advantage, though, of some CSS parsing bugs, so may not satisfy the CSS purists out there, but it works for me 🙂

Demo: solid background inner-box surrounded by a translucent box, overlaying a background-image.

The markup:

background-colorrgba(255,255,255,0.5); /* CSS3 */zoom:1/* required for the filters */
 *background-colortransparent ; /* IE7 only */
 background-colortransparent\9 ; /* IE8 only */
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#80FFFFFF, endColorstr=#80FFFFFF) ; /* IE8 */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#80FFFFFF, endColorstr=#80FFFFFF); /* IE7 */

To change the opaqueness of the div, edit both the alpha value in rgba() as well as the 1st hex value in the startColor and endColor filters. Convert to hex, of course: 0.7 alpha = B2 in hex (0.7 * 255); 0.5 = 80 hex, etc.

How this Works

background-color rgba() is the correct way to specify opaqueness, for all browsers that recognize CSS3. filter and -ms-filter are recognized by their respective IE browsers. The Gradient filter, with the same starting and end color, is used instead of the Alpha filter because the Alpha filter will also apply itself to children elements. background-color transparent is required for the MS filters to work. However, specifying it would override the rgba() value, thus messing with CSS3-compatible browsers, so we take advantage of a few CSS parsing hacks: keywords starting with * are only recognized by IE7, and keyword values ending with \9 (go figure!) are only recognized by IE8. Lastly, the MS filters only work on positioned elements; the zoom element satisfies this requirement.

Published by

kevin

I'm the founder of Agoric Source, co-organizer of the Houston Python Meetup, director of technology at Newspaper Subscription Services, LP, technology advisor to InstaFuel, active board member of the Houston Area Model United Nations, and occasional volunteer to the Red Cross (during hurricanes or other local emergencies). I'm first and foremost still a software hacker, but with my economics background and business experience, I serve well as a project or program manager, technical visionary, etc.