CSS - gradient over a cover image?
Asked Answered
N

4

5

How can I have a gradient layer over a cover image?

For instance:

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-image: url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}

h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}
<header>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>

I want this gradient over that image:

background-image: linear-gradient(to bottom right, #002f4b, #dc4225);

Is it possible?

Nonconformity answered 1/7, 2017 at 12:17 Comment(1)
In your situation, you just may replace gradient instead image. If u want over that image, u need add another block with gradient.Sashenka
M
7

Use rgba with transparency and double background-image.

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-image: linear-gradient(to bottom right, rgba(0, 47, 75, .5), rgba(220, 66, 37, .5)), url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}
h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}
<header>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>
Melany answered 1/7, 2017 at 12:32 Comment(0)
B
7

You can define multiple backgrounds and then set background-blend-mode to multiply. Something like this

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
  background-blend-mode: multiply;
  background: linear-gradient(to bottom right, #002f4b, #dc4225), url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
}

h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}
<header>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>
Bornu answered 1/7, 2017 at 12:25 Comment(0)
M
7

Use rgba with transparency and double background-image.

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-image: linear-gradient(to bottom right, rgba(0, 47, 75, .5), rgba(220, 66, 37, .5)), url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}
h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}
<header>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>
Melany answered 1/7, 2017 at 12:32 Comment(0)
S
4

You could put an overlay on the :before or :after elements

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-image: url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}

header:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: linear-gradient(to bottom right,#002f4b, #dc4225);
    opacity: .6; 
    border-bottom-left-radius: 50%;
    border-bottom-right-radius: 50%;
}

h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}
<header>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>
Sirkin answered 1/7, 2017 at 12:22 Comment(1)
Or the after selector!Chromatograph
G
1

Note: You can tweak with the opacity to change the strength of gradient.

header {
  position: relative;
  height: 300px;
  background-repeat: no-repeat;
  background-position: center bottom;
  background-image: url('http://www.planwallpaper.com/static/images/Free-Wallpaper-Nature-Scenes.jpg');
  background-size: cover;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
  z-index: -1;
}

h1 {
  margin: 0;
  padding: 100px 0;
  font: 44px "Arial";
  text-align: center;
}

header h1 {
  color: white;
}

div#gradient {
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 300px;
 background-image: linear-gradient(to bottom right, #002f4b, #dc422b);
 border-bottom-left-radius: 50%;
 border-bottom-right-radius: 50%;
 z-index: -1;
 opacity: 0.75;
}
<header>
  <div id="gradient"></div>
  <h1>Header Content</h1>
</header>

<section>
  <h1>Section Content</h1>
</section>
Gilding answered 1/7, 2017 at 16:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.