Change brightness of background-image?

90,236

Solution 1

This would be an option, but it's not very practical and wouldn't work in older browsers:

body:after {
  content: "";
  position: fixed;
  top: 0; bottom: 0; left: 0; right: 0; 
  background: rgba(0,0,0,0.1);
  pointer-events: none;
}

Or for even better color control, try hsla() colors:

body:after {
  content: "";
  position: fixed;
  top: 0; bottom: 0; left: 0; right: 0; 
  background: hsla(180,0%,50%,0.25);
  pointer-events: none;
}

Really, it's better to play with the image in a image editor until you get the browser result you want.

Solution 2

background:linear-gradient(rgba(255,255,255,0.5), rgba(255,255,255,0.5)), url(myimage.png);

This will put 50% white over the original image.

Linear-gradient function has to be used, otherwise it doesn't work.


Or you can use:

.someObj:after{ content:''; background:rgba(255,255,255,.5); .... }

and this is better for code maintainability.

Solution 3

There is no way to do this that works in every browser, but if you want, you can do it in webkit browsers (Chrome, Safari, Opera), by using the filter style:

img.lessBright {
    -webkit-filter: brightness(0.8);
    filter: brightness(0.8);
}

That results in the brightness being reduced to 80% in webkit browsers. I do recommend just saving another version of your image if you want to do this though.

Solution 4

  1. Create a child div for the background image of the same dimensions.
  2. Set the child divs background colour with RGBA, which includes an alpha channel (opacity).
  3. Set the opacity accordingly between 0 and 1. 1 = Opaque, 0=Transparent, 0.5 =Translucent

HTML:

<div id="primary_feature">
    <div class="feature"></div>
</div>

CSS:

#primary_feature{
  background-image: url("../assets/images/misc/laptop.png");
}
.feature{
  background:rgba(0,0,0,0.6);
}

Solution 5

An update to the other answer.

You can also use the Backdrop Filter for a much better effect. It can use any filter, in this case, the brightness filter.

This means your background will not be washed-out with a colour over the top, rather it will affect the background directly for a sharper more natural look while retaining all detail.

The downside, it isn't currently supported in Firefox, unless experimental settings are turned on. But that should change soon and as of writing this, Firefox is only 6.5% of the market.

enter image description here

however, it is fully supported in Chrome

body {
content: "";
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    backdrop-filter: brightness(120%);
    pointer-events: none;
}
Share:
90,236
user3227878
Author by

user3227878

Updated on November 29, 2021

Comments

  • user3227878
    user3227878 over 2 years

    I am wondering if it is possible to change the brightness of:

     body{
     background-image:url();
     }
    

    Using HTML/CSS. The reason I would like to change it, is because I just spent a rather long time making the image, but when I put it on website, it is suddenly about twice as bright. I have compared the original file and the file that is input into the website and they are both very much different colours of blue.

    Is there any reason for this, and is there a way I can change the brightness?

    Thanks.

  • Louys Patrice Bessette
    Louys Patrice Bessette almost 8 years
    So if your answer is understood as : "Just photoshop the images. Forget about finding a CSS rule for it"... ?! Okay... Can be an answer.
  • Martin Zvarík
    Martin Zvarík over 6 years
    But this will dim the whole element including text and border.... it's better to use opacity() or anything else.
  • Joeytje50
    Joeytje50 over 6 years
    Opacity doesn't necessarily brighten, it just lets the background shine through. For opacity to show a similar effect you have to enforce that the parent element has a white background. Applying background:white to the image won't do, since the background will also have opacity set to the same value for the background.
  • Manuel
    Manuel about 6 years
    Thats a nice solution which works great on parallex scrolling containers with: background-image: linear-gradient(rgba(255,255,255,0.5), rgba(255,255,255,0.5)), url(myimage.png);
  • James Hubert
    James Hubert over 4 years
    A lot of the time editing the image beforehand isn't an option, which is why filters exist. For example, if you wanted to dim the background image and then remove the dimmed effect on hover... how would you do this in CSS with two separate images with your desired darknesses? For an example of this effect, hover your cursor over the images on the BBC's website, a site I'm currently cloning. bbc.com