76

How do I get the background color code of an element?

console.log($(".div").css("background-color"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="div" style="background-color: #f5b405"></div>

What I want

#f5b405 
3
  • 1
    What are you wanting to do with the value? Commented May 14, 2011 at 1:19
  • I want to animate the background colour - $(this).animate({ backgroundColor: '#f5b405' }, 'fast'); Commented May 14, 2011 at 1:36
  • 2
    But I just found out that I can use the rgb code to animate the background colour too! lol Commented May 14, 2011 at 1:37

8 Answers 8

106

Check example link below and click on the div to get the color value in hex.

var color = ''; $('div').click(function() { var x = $(this).css('backgroundColor'); hexc(x); console.log(color); }) function hexc(colorval) { var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); delete(parts[0]); for (var i = 1; i <= 3; ++i) { parts[i] = parseInt(parts[i]).toString(16); if (parts[i].length == 1) parts[i] = '0' + parts[i]; } color = '#' + parts.join(''); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='div' style='background-color: #f5b405'>Click me!</div>

Check working example at http://jsfiddle.net/DCaQb/

Sign up to request clarification or add additional context in comments.

3 Comments

Sometimes $(this).css('backgroundColor') returns rgba(n, n, n, n).
Played around a bit with your function to automatize design modernization and such... Example usage scenario jsfiddle.net/DCaQb/625 - not perfect but maybe it helps somebody so I link it here for reference
Thanks for this code example. Might want to just rewrite that hexc function as a real function that returns the string though instead of setting a global variable.
11

There's a bit of a hack for this, since the HTML5 canvas is required to parse color values when certain properties like strokeStyle and fillStyle are set:

var ctx = document.createElement('canvas').getContext('2d'); ctx.strokeStyle = 'rgb(64, 128, 192)'; var hexColor = ctx.strokeStyle; 

1 Comment

i believe this one is the best approach for new html5 browsers :)
9
function getBackgroundColor($dom) { var bgColor = ""; while ($dom[0].tagName.toLowerCase() != "html") { bgColor = $dom.css("background-color"); if (bgColor != "rgba(0, 0, 0, 0)" && bgColor != "transparent") { break; } $dom = $dom.parent(); } return bgColor; } 

working properly under Chrome and Firefox

Comments

5

You have the color you just need to convert it into the format you want.

Here's a script that should do the trick: http://www.phpied.com/rgb-color-parser-in-javascript/

Comments

5

In fact, if there is no definition of background-color under some element, Chrome will output its background-color as rgba(0, 0, 0, 0), while Firefox outputs is transparent.

Comments

4

My beautiful non-standard solution

HTML

<div style="background-color:#f5b405"></div> 

jQuery

$(this).attr("style").replace("background-color:", ""); 

Result

#f5b405 

Comments

2

Adding on @Newred solution. If your style has more than just the background-color you can use this:

$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1] 

1 Comment

I like this way
1

This Solution utilizes part of what @Newred and @Radu Diță said. But will work in less standard cases.

 $(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1].replace(/\s/g, ''); 

The issue both of them have is that neither check for a space between background-color: and the color.

All of these will match with the above code.

 background-color: #ffffff background-color: #fffff; background-color:#fffff; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.