Does style="color: #FFF;" render as #F0F0F0 or #FFFFFF?

HtmlCssColorsHex

Html Problem Overview


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...

Html Solutions


Solution 1 - Html

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, CSS 3 are the same. The CSS 4 draft say similar things.

The Internet Explorer and Firefox docs state the same method.

As a practical example, please check out this snippet, which features 3 <div>s of styles

div { width: 100px; height: 100px;  }

<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.

Behavior in different browsers

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.

Solution 2 - Html

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.

Solution 3 - Html

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.

Solution 4 - Html

I feel I should encourage people to not do this, as it is equivalent to telling someone you want 15 of something and then expecting them to show up with 255. What a gross and strange way to shorthand 0xFFFFFF. This is the "r u there" of web design to me.

Solution 5 - Html

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/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDolphView Question on Stackoverflow
Solution 1 - HtmlkennytmView Answer on Stackoverflow
Solution 2 - HtmlBrian R. BondyView Answer on Stackoverflow
Solution 3 - HtmlKevin IvarsenView Answer on Stackoverflow
Solution 4 - HtmlJarynView Answer on Stackoverflow
Solution 5 - HtmlgrimordeView Answer on Stackoverflow