tags:

views:

1002

answers:

4

When defining colors using "shorthand hexidecimal" (style="color: #FFF;"), is there a defined method for expanding the shorthand? (style="color: #F0F0F0;" or style="color: #FFFFFF;")

Do all browsers use the same expansion method? Is this behavior by specification (if so, where is it defined)? Does the expansion method perhaps vary between CSS 1/2/3?

I've observed that "most browsers" expand to #FFFFFF.

Are there any other places (outside of HTML/CSS) where this shorthand notation is allowed, but the expansion method is different?

I've always avoided using shorthand hex, because I've never known the answers to these questions...

+13  A: 

The CSS2 spec section 4.3.6 Colors:

The RGB color model is used in numerical color specifications. These examples all specify the same color:

em { color: #f00 }              /* #rgb */
em { color: #ff0000 }           /* #rrggbb */
em { color: rgb(255,0,0) }      
em { color: rgb(100%, 0%, 0%) }

The format of an RGB value in hexadecimal notation is a '#' immediately followed by either three or six hexadecimal characters. The three-digit RGB notation (#rgb) is converted into six-digit form (#rrggbb) by replicating digits, not by adding zeros. For example, #fb0 expands to #ffbb00. This ensures that white (#ffffff) can be specified with the short notation (#fff) and removes any dependencies on the color depth of the display.

Since all modern browsers support CSS you can assume it will work this way in your web sites and web applications.

Brian R. Bondy
+26  A: 

CSS 2.1 (http://www.w3.org/TR/CSS2/syndata.html#value-def-color):

The three-digit RGB notation (#rgb) is converted into six-digit form (#rrggbb) by replicating digits, not by adding zeros. For example, #fb0 expands to #ffbb00. This ensures that white (#ffffff) can be specified with the short notation (#fff) and removes any dependencies on the color depth of the display.

Wordings of CSS 1 and CSS 3 draft are the same.

The Internet Explorer and Firefox docs state the same method.

As a practical example, please check out http://jsbin.com/okede3, which features 3 <div>s of styles

<div style="background-color:#f0f0f0;">#f0f0f0</div>
<div style="background-color:#fff;">#fff</div>
<div style="background-color:#ffffff;">#ffffff</div>

On Mac OS X 10.6, all Firefox 3.6, Opera 10.10, Safari 4 rendered #fff as #ffffff.

You can check other results in http://browsershots.org/http://jsbin.com/okede3.

I don't see a reason why a browser or the standard wants to deviate from this expansion in the future, since the color #ffffff is far more common than #f0f0f0.

KennyTM
A: 

I've not known a browser to not expand #FFF to #FFFFFF. I'd be interested in knowing which you think doesn't - or do you mean some continue to show #FFF?

However, as I understood it, the #FFF is valid shorthand, and #F0 would also (validly) expand to #F0F0F0.

This might be of interest http://www.websiteoptimization.com/speed/tweak/hex/

grimorde
Instinctively, I have some doubt about #F0 expanding to #F0F0F0 but I could be wrong
Joe Philllips
No you're right - it doesn't. Don't know where I got that from....
grimorde
+3  A: 

Testing on IE8, Firefox 3.6, and Google Chrome 5.0 beta, all three browsers repeat the hex digit:

  • 000 produces 000000
  • FFF produces FFFFFF
  • 876 produces 887766

...and so forth.

Kevin Ivarsen
Hmm, good point. I thought #123 was rendered as #123123
HasanGursoy