2012-02-07 174 views
119

我有一个DIV,我想把一个模式作为背景。这种模式是灰色的。所以为了让它更好看一些,我想把一个透明的颜色“层”放在上面。以下是我尝试过的但没有奏效的。有没有办法将彩色图层放在背景图片上?预先感谢您的回复。干杯。马克。背景图像上的半透明颜色层?

这里是我的CSS:

background: url('../img/bg/diagonalnoise.png'); 
background-color: rgba(248, 247, 216, 0.7); 

回答

135

这就是:

.background { 
    background:url('../img/bg/diagonalnoise.png'); 
    position: relative; 
} 

.layer { 
    background-color: rgba(248, 247, 216, 0.7); 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
} 

HTML此:

<div class="background"> 
    <div class="layer"> 
    </div> 
</div> 

当然,你需要定义的宽度和高度与.background类,如果里面没有其他元素的话

+5

绝对没有理由相对和绝对定位。 – 2012-02-07 20:08:31

+2

啊,是的,当然,我有点进入模式弹出,不知道为什么。你的答案当然更清洁,更容易。 – 2012-02-07 20:11:42

+0

@JohannesKlauß他的答案如何更清晰和更容易?它不起作用,至少对我来说是这样。 – DannyG 2015-06-04 18:53:52

20

然后,您需要使用bg图像和它与背景颜色的内容元素的包装元素:

<div id="Wrapper"> 
    <div id="Content"> 
    <!-- content here --> 
    </div> 
</div> 

和CSS:

#Wrapper{ 
    background:url(../img/bg/diagonalnoise.png); 
    width:300px; 
    height:300px; 
} 

#Content{ 
    background-color:rgba(248,247,216,0.7); 
    width:100%; 
    height:100%; 
} 
5

见我的答案在https://stackoverflow.com/a/18471979/193494进行了全面的概述可能的解决方案:

  1. 使用多个背景的线性梯度,
  2. 带有生成的PNG的多个背景,或
  3. 样式:在伪元素之后充当辅助背景层。
+3

请不要张贴链接作为答案。把相关代码放在这里,但链接到你复制它的源代码。 – Blazemonger 2014-12-17 16:14:26

11

试试这个。适用于我。

.background { 
    background-image: url(images/images.jpg); 
    display: block; 
    position: relative; 
} 

.background::after { 
    content: ""; 
    background: rgba(45, 88, 35, 0.7); 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    bottom: 0; 
    z-index: 1; 
} 

.background > * { 
    z-index: 10; 
} 
+0

这是一个非常好的答案,不需要额外的HTML元素。谢谢! – patr1ck 2014-02-23 21:15:59

181

我知道这是一个非常古老的线程,但它显示在谷歌的顶部,所以这里有另一种选择。

这是纯粹的CSS,不需要任何额外的HTML。

box-shadow: inset 0 0 0 1000px rgba(0,0,0,.2); 

有针对的box-shadow功能使用数量惊人的。

+1

尽管这是一个惊人的可能性,但它仅支持IE 9+,这意味着截至2014年10月,1,8%的网络用户无视。 – 2014-11-14 00:54:17

+3

非常好!这是一个好主意性能明智吗?还没有研究过box-shadow – Notflip 2014-11-25 15:03:26

+1

@Notflip&others的性能,它是在有限的使用情况下,它绝对不是如果你有超过100个元素的这个集合。渲染过载。来源:个人经验。 – Tyblitz 2014-12-23 14:40:56

68

从CSS-技巧...有一个一步到位的方式来做到这一点没有Z-索引和添加伪elements--需要线性渐变,我觉得意味着你需要支持CSS3

.tinted-image { 
    background: 
    /* top, transparent red */ 
    linear-gradient(
     rgba(255, 0, 0, 0.45), 
     rgba(255, 0, 0, 0.45) 
    ), 
    /* your image */ 
    url(image.jpg); 
} 
+0

这个效果很好,但是如果你想脉冲一种颜色,你不能创建渐变效果,不要以为这是可能的任何方法。 – sricks 2015-09-09 21:48:45

+1

我在这个元素上设置了'background-size:cover;'和'background-position:center center;'。这似乎取消了这种效果。 – Solace 2015-11-03 13:39:01

+0

使用背景大小:封面;后。至少在铬上。 – davidbonachera 2016-11-07 03:38:00

9

我我已经使用这种方法将颜色色调以及渐变应用于图像,以便在无法控制图像颜色配置文件时使动态重叠文本更容易识别。你不必担心z-index。

HTML

<div class="background-image"></div> 

SASS

.background-image { 
    background: url('../img/bg/diagonalnoise.png') repeat; 
    &:before { 
    content: ''; 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    bottom: 0; 
    background: rgba(248, 247, 216, 0.7); 
    } 
} 

CSS

.background-image { 
    background: url('../img/bg/diagonalnoise.png') repeat; 
} 

.background-image:before { 
    content: ''; 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    right: 0; 
    left: 0; 
    background: rgba(248, 247, 216, 0.7); 
    } 

希望它可以帮助

+0

这有效,但你需要改变第二个“left:0;”到“底部:0” – 2015-10-13 08:49:49

+1

这应该是公认的答案,因为它避免了不必要的元素创建。只要确保你的.background-image'div'至少有一个位置:relative – mjsarfatti 2016-09-05 08:52:33

3

为什么这么复杂?你的解决方案几乎是正确的,除了这是一种更容易的方式使图案透明和背景色固体。 PNG可以包含透明胶片。因此,使用photoshop将图案设置为70%并保留图片以使图案透明。那么你只需要一个选择器。作品跨浏览器。

CSS:

.background { 
    background: url('../img/bg/diagonalnoise.png');/* transparent png image*/ 
    background-color: rgb(248, 247, 216); 
} 

HTML:

<div class="background"> 
    ... 
</div> 
+0

你可以应用背景色,例如':hover',并且它会叠加在背景图片的顶部吗? – Sir 2015-10-20 03:23:34

+0

启动Photoshop并执行此操作需要更长的时间,而不是添加几行代码。 – nihiser 2017-02-02 20:20:30

2
.background 
{ 
    background: linear-gradient(rgba(248, 247, 216, 0.7), rgba(248, 247, 216, 0.7)), url('../img/bg/diagonalnoise.png') no-repeat center fixed; 
    background-size:cover; 
} 
+2

你能再解释一下这是怎么回事? – patrick 2017-08-22 17:09:44

+0

虽然答案总是值得赞赏的,但是这个问题在5 **年前被问过,并且已经有了一个可以接受的解决方案。请尽量避免将问题顶到问题的顶端,除非问题还没有被标记为已解决,或者您发现了一个新的改进的问题解决方案。还请记住提供一些[**代码围绕您的代码**](https://meta.stackexchange.com/questions/114762)来帮助解释它。查看关于如何让你的答案数的一些技巧的[**写出很好的答案**](http://stackoverflow.com/help/how-to-answer)上的文档:) – 2017-08-23 02:17:51

0

可以使用半透明像素,它可以生成例如here,甚至用base64 下面是白色的50%为例:

background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=), 
url(../img/leftpanel/intro1.png); 
background-size: cover, cover; 
  • 而不上传

  • 没有额外的html

  • 我想加载应该比盒子阴影或线性渐变更快