背景图像上的半透明颜色层?

Mar*_*arc 188 css background-image background-color

我有一个DIV,我想把一个模式作为背景.这种模式是灰色的.所以为了让它更好一点,我想把一个透明的浅色"层"放在上面.以下是我尝试但不起作用的内容.有没有办法将彩色图层放在背景图像上?

这是我的CSS:

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

Bev*_*ign 272

我知道这是一个非常古老的主题,但它在谷歌的顶部显示,所以这是另一种选择.

这个是纯CSS,不需要任何额外的HTML.

box-shadow: inset 0 0 0 1000px rgba(0,0,0,.2);
Run Code Online (Sandbox Code Playgroud)

盒子阴影功能的使用数量惊人.

  • 不错的黑客,但一个性能杀手.这将减慢每个移动设备的速度.Box shadow会导致移动设备出现性能问题.如果还有其他方法,最好避免使用它. (13认同)
  • 我个人这样使用它:`box-shadow:inset 0 0 0 100vmax rgba(0,0,0,.2)`. (6认同)
  • 几年之后只是一次更新:我目前在kotulas.com上使用这种方法,而且我注意到没有明显的减速.如果你在数百个元素上使用它可能会成为一个问题,但即使在包含150多个图像的页面上,这对我来说也不是问题.(这是在工作计算机上.)当然,你需要提前测试它以确保它适合你.至于旧的浏览器兼容性,因为后备是用户没有看到悬停效果(没有其他问题),我很好. (5认同)
  • 非常好!这是一个表现明智的好主意吗?没有看过box-shadow的表现 (3认同)
  • 你是天才先生! (3认同)

Joh*_*auß 196

这里是:

.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%;
}
Run Code Online (Sandbox Code Playgroud)

这个HTML:

<div class="background">
    <div class="layer">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

当然.background,如果内部没有其他元素,则需要为类定义宽度和高度

  • 绝对没有理由相对和绝对定位. (9认同)
  • 啊,是的,当然,我有点进入模态弹出窗口,不知道为什么.你的答案当然更清洁,更容易. (2认同)
  • 我认为这更清洁了.如果内容不超过bg等,则盒子阴影会出现问题. (2认同)
  • 这不是我最喜欢的答案。Josh Crozier 的答案将帮助您在没有额外元素的情况下完成任务,而 BevansDesign 可以帮助您在没有任何伪元素的情况下实现一切(如果您想出于 CMS 原因使用内联 css,则这是必要的)。 (2认同)

小智 111

从CSS-Tricks ...有一个步骤,没有z索引和添加伪元素这样做 - 需要线性渐变,我认为这意味着你需要CSS3支持

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

  • 我是唯一一个足以获得汤姆参考的人吗? (4认同)
  • 我在这个元素上设置了“background-size:cover;”和“background-position:center center;”。这似乎抵消了这种效果。 (2认同)

Tor*_*ott 41

您还可以使用线性渐变和图像:http: //codepen.io/anon/pen/RPweox

.background{
  background: linear-gradient(rgba(0,0,0,.5), rgba(0,0,0,.5)),
    url('http://www.imageurl.com');
}
Run Code Online (Sandbox Code Playgroud)

这是因为线性渐变函数会创建一个添加到背景堆栈的Image.https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient


Sve*_*der 26

然后你需要一个带有bg图像的包装元素,其中包含带有bg颜色的content元素:

<div id="Wrapper">
  <div id="Content">
    <!-- content here -->
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

和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%;
}
Run Code Online (Sandbox Code Playgroud)


小智 22

试试这个.适合我.

.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;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,不需要其他HTML元素。谢谢! (2认同)

d4n*_*cer 13

我已经使用它作为一种方法,既可以将颜色色调和渐变应用于图像,也可以在无法控制图像颜色配置文件时使动态叠加文本更易于设置.您不必担心z-index.

HTML

<div class="background-image"></div>
Run Code Online (Sandbox Code Playgroud)

上海社会科学院

.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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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);
  }
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Kev*_* C. 6

有关可能的解决方案的全面概述,请参阅/sf/answers/1293038561/上的答案:

  1. 使用具有线性渐变的多个背景,
  2. 具有生成的PNG的多个背景,或
  3. 样式化:在伪元素之后充当辅助背景层.

  • 请不要将链接发布为答案.将相关代码放在此处,但链接到您从中复制它的源. (4认同)

Hex*_*dus 6

为什么这么复杂?您的解决方案几乎是正确的,只是它更容易使图案透明且背景颜色为纯色。PNG 可以包含透明胶片。因此,使用 photoshop 通过将图层设置为 70% 并重新保存图像来使图案透明。那么你只需要一个选择器。跨浏览器工作。

CSS:

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

HTML:

<div class="background">
   ...
</div> 
Run Code Online (Sandbox Code Playgroud)

这是基本的。下面是我从backgroundto切换到的用法示例,background-image但两个属性的工作方式相同。

.background {
   background: url('../img/bg/diagonalnoise.png');/* transparent png image*/
   background-color: rgb(248, 247, 216);
}
Run Code Online (Sandbox Code Playgroud)
<div class="background">
   ...
</div> 
Run Code Online (Sandbox Code Playgroud)

请等一分钟!加载外部模式需要一些时间。

这个网站好像有点慢...


Zor*_*ext 5

这是一个更简单的技巧,只有 css。

<div class="background"> </div>
    <style>
    .background {
      position:relative;
      height:50px;
      background-color: rgba(248, 247, 216, 0.7);
      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAJElEQVQYV2NctWrVfwYkEBYWxojMZ6SDAmT7QGx0K1EcRBsFAADeG/3M/HteAAAAAElFTkSuQmCC); 
    }

    .background:after {
        content:" ";
        background-color:inherit;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%; 
    }

    </style>
Run Code Online (Sandbox Code Playgroud)


G-C*_*Cyr 5

来自我的回答:如何向背景图像添加颜色叠加?标记为该问题的重复项,其中不需要伪元素,也不需要额外元素

就在这里和几年后,该副本仍然缺少background-blend-mode当今广泛实施的属性(它位于多个背景和插图阴影示例下方)

这是我的答案,它为您提供了 3 种简单的方法,无需额外的标记或伪代码:

起初,我当时看到了两个简单的选项(2016年,这两个选项也在此处的答案之内,所以关于这些没有什么真正新的内容要添加,...如果您已经阅读了有关 bg 和 的其他答案,请注意第三个选项盒子阴影):

  • 来自我的旧代码笔的图像上带有半透明单渐变的多个背景,其中有几个例子。

  • 巨大的嵌入阴影,其作用与渐变叠加大致相同

那里给出的例子:

渐变选项:

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Images/Using_CSS_gradients

CSS 渐变由数据类型表示<gradient>,这是一种由<image>两种或多种颜色之间的渐进过渡组成的特殊类型。您可以选择三种类型的渐变:线性(使用linear-gradient()函数创建)、径向(使用radial-gradient()函数创建)和圆锥曲线(使用conic-gradient()函数创建)。您还可以使用repeating-linear-gradient()repeating-radial-gradient()、 和repeating-conic-gradient()函数创建重复渐变。

渐变可以用在任何需要使用的地方<image>,例如背景。由于渐变是动态生成的,因此它们可以消除传统上用于实现类似效果的光栅图像文件的需要。此外,由于渐变是由浏览器生成的,因此放大时它们看起来比光栅图像更好,并且可以动态调整大小。

    html {
      min-height:100%;
      background:linear-gradient(0deg, rgba(255, 0, 150, 0.3), rgba(255, 0, 150, 0.3)), url(https://picsum.photos/id/100/2500/1656);
      background-size:cover;
    }
Run Code Online (Sandbox Code Playgroud)

阴影选项:

https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow

CSS属性box-shadow在元素框架周围添加阴影效果。您可以设置多个效果,以逗号分隔。盒子阴影由相对于元素的 X 和 Y 偏移、模糊和扩散半径以及颜色来描述。

插图

如果未指定(默认),则假定阴影为投影(就好像框在内容上方凸起)。inset 关键字的存在将阴影更改为框架内的阴影(就好像内容被压在框内一样)。嵌入阴影绘制在边框内(甚至是透明边框)、背景上方、内容下方。

html {
  min-height: 100%;
  background: url(https://picsum.photos/id/100/2500/1656);
  background-size: cover;
  box-shadow: inset 0 0 0 2000px rgba(255, 0, 150, 0.3);
}
Run Code Online (Sandbox Code Playgroud)

我的一个旧代码笔,有几个例子


现在,这里缺少第三个选项

CSSbackground-blend-mode属性设置元素的背景图像应如何相互混合以及与元素的背景颜色混合。

html {
  min-height: 100%;
  background: url(https://picsum.photos/id/100/2500/1656) rgba(255, 0, 150, 0.3);
  background-size: cover;
  background-blend-mode: multiply;
}
Run Code Online (Sandbox Code Playgroud)


当然,还有其他有价值的方法可以做到这一点,具体取决于您的项目、使用的 CSS 库以及您现有的选项。几乎从来没有单一的方式/方法,而是不同的方式。重要的是找到最适合您的需求且最有效的选项,您理解/掌握的方法,浏览器的特殊性,已使用的选项留下的选项如果您对或已经拥有可以/完成这项工作的 javascript 或服务器端函数有信心,请使用它(如果它已经存在)。轮子就是轮子。