75

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
double-beep
  • 5,031
  • 17
  • 33
  • 41
Run
  • 54,938
  • 169
  • 450
  • 748

8 Answers8

105

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/

double-beep
  • 5,031
  • 17
  • 33
  • 41
Hussein
  • 42,480
  • 25
  • 113
  • 143
  • 5
    Sometimes `$(this).css('backgroundColor')` returns `rgba(n, n, n, n)`. – hippietrail Jun 23 '13 at 03:18
  • 2
    Played around a bit with your function to automatize design modernization and such... Example usage scenario http://jsfiddle.net/DCaQb/625/ - not perfect but maybe it helps somebody so I link it here for reference – Chris S. Mar 12 '15 at 15:17
  • 3
    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. – Johncl May 11 '16 at 08:18
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;
Nathan Ryan
  • 12,893
  • 4
  • 26
  • 37
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

coderz
  • 4,847
  • 11
  • 47
  • 70
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.

coderz
  • 4,847
  • 11
  • 47
  • 70
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/

generalhenry
  • 17,227
  • 4
  • 48
  • 63
4

My beautiful non-standard solution

HTML

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

jQuery

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

Result

#f5b405
Newred
  • 699
  • 8
  • 8
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]
Radu Diță
  • 13,476
  • 2
  • 30
  • 34
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;
Case
  • 4,244
  • 5
  • 35
  • 53