I have a <div>
whose transparency of its background-color (and not its contents) I'd like to change. A remote API sends me this colour:
#abcdef
and I tell jQuery (1.9) to apply this colour via .css
:
$('div').css('background-color', '#abcdef');
The resultant div has a background-color
style of not #abcdef
, but rather its RGB representation of the same colour.
background-color: rgb(171, 205, 239);
(Just an observation; not part of the problem)
The project requirement has been changed such that I will now need to change the transparency of the background as well, to a set percentage (50%). My desired background-color
attribute is thus
background-color: rgba(171, 205, 239, 0.5);
, however, I cannot find a way to set this background-color attribute using just jQuery, a hex colour code, and still apply an alpha value. opacity
affects contents of the div as well as the background, so it is not an option.
$('div').css('background-color', '#abcdef')
.css('opacity', 0.5); // undesirable opacity changes to div's content
Given the string #abcdef
, is it possible only by calculation (e.g. hex2dec) that I will be able to apply a background opacity to a div if I am given only a hex colour string?
There's no CSS property that you can use to change the opacity of only the background image. Unlike background colors, which allow you to adjust the alpha channel to control opacity, it simply doesn't exist for the background-image property.
The percentage of opacity is calculated as Opacity% = Opacity * 100 To set the opacity only to the background and not the text inside it. It can be set by using the RGBA color values instead of the opacity property because using the opacity property can make the text inside it fully transparent element.
The opacity-level describes the transparency-level, where 1 is not transparent at all, 0.5 is 50% see-through, and 0 is completely transparent.
To set the opacity of a background, image, text, or other element, you can use the CSS opacity property. Values for this property range from 0 to 1. If you set the property to 0, the styled element will be completely transparent (ie. invisible).
try parseInt(hex,16)
to convert hex string into decimal int
so in this case it'll be:
var color = '#abcdef';
var rgbaCol = 'rgba(' + parseInt(color.slice(-6,-4),16)
+ ',' + parseInt(color.slice(-4,-2),16)
+ ',' + parseInt(color.slice(-2),16)
+',0.5)';
$('div').css('background-color', rgbaCol)
you should create a function out of this to use in your application.
You may try this
function convertHex(hex,opacity){
hex = hex.replace('#','');
r = parseInt(hex.substring(0,2), 16);
g = parseInt(hex.substring(2,4), 16);
b = parseInt(hex.substring(4,6), 16);
result = 'rgba('+r+','+g+','+b+','+opacity/100+')';
return result;
}
$('h1').css('background', convertHex('#A7D136', 0.5));
An example here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With