How to Change a CSS Background Image’s Opacity

With CSS and CSS3 you can do a lot of things, but setting an opacity on a CSS background is not one of them. However, if you get creative, there are a ton of creative work-arounds you to make it seem like you’re changing the CSS background image’s opacity. Both of the following methods have excellent browser support down to Internet Explorer 8.

Method 1: Use absolute positioning and an image

This method is exactly like it sounds. You simply use absolute positioning on an a normal img tag and make it seem like you used the CSS background-image property. All you have to do is put the image inside of a position: relative; container. Here’s what the HTML markup generally looks like:


<

div

class

=

"

my-container

"

>

<

h1

>

Scotch Scotch Scotch

</

h1

>

<

img

src

=

"

http://placekitten.com/1500/1000

"

>

</

div

>

And here’s what your CSS will look like:


.my-container

{

position

:

relative

;

overflow

:

hidden

;

}

.my-container h1

{

padding

:

200px

;

position

:

relative

;

z-index

:

2

;

}

.my-container img

{

position

:

absolute

;

left

:

0

;

top

:

0

;

width

:

100%

;

height

:

auto

;

opacity

:

0.6

;

}

Finally, here’s a nice little demo on CodePen: http://codepen.io/ncerminara/pen/tncAi

Method 2: Using CSS Pseudo-Elements

This method is seems simple once you see it, and is definitely my preferred method of doing this. Using CSS pseudo-elements of either :before or :after, you a div with a background image and set an opacity on it. Here’s what your HTML markup would roughly look like:


<

div

class

=

"

my-container

"

>

<

h1

>

Scotch Scotch Scotch

</

h1

>

</

div

>

And here’s what the CSS looks like:


.my-container

{

position

:

relative

;

background

:

#5C97FF

;

overflow

:

hidden

;

}

.my-container:before

{

content

:

' '

;

display

:

block

;

position

:

absolute

;

left

:

0

;

top

:

0

;

width

:

100%

;

height

:

100%

;

z-index

:

1

;

opacity

:

0.6

;

background-image

:

url

(

'http://placekitten.com/1500/1000'

)

;

background-repeat

:

no-repeat

;

background-position

:

50% 0

;

-ms-background-size

:

cover

;

-o-background-size

:

cover

;

-moz-background-size

:

cover

;

-webkit-background-size

:

cover

;

background-size

:

cover

;

}

Finally, here’s a nice little demo of this method:

data-theme-id=”0″ data-slug-hash=”eFzJI” data-default-tab=”result” data-user=”ncerminara” class=’codepen’>
See the Pen How to Change a CSS Background Image’s Opacity by Nicholas Cerminara (@ncerminara) on CodePen.