如何使用CSS使背景变暗?


100

我有一个带有文本的元素。每当我降低不透明度时,我就会降低整个身体的不透明度。有什么办法可以使我变得background-image更黑,而不是其他所有?

background-image:url('http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png');

Answers:


196

只需将此代码添加到您的图像CSS

 body{
 background:
        /* top, transparent black, faked with gradient */ 
        linear-gradient(
          rgba(0, 0, 0, 0.7), 
          rgba(0, 0, 0, 0.7)
        ),
        /* bottom, image */
        url(http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png);
    }

参考:linear-gradient()-CSS | MDN

更新:并非所有浏览器都支持RGBa,因此您应该具有“后备颜色”。这种颜色很可能是纯色(完全不透明),例如:background:rgb(96, 96, 96)。请参阅此博客以获得RGBa浏览器支持。


任何跨浏览器的问题吗?
Jon P

9
如果我们要分别指定背景图像和这个,该属性是什么?
Petruza

2
@Petruza似乎我们别无选择,只能使用此语法。阅读参考资料“由于<gradient>属于<image>数据类型,因此只能在可以使用<image>的地方使用它们。因此,linear-gradient()在背景色上不起作用和使用<color>数据类型的其他属性”
Marco Panichi

18

在伪元素后使用:

.overlay {
    position: relative;
    transition: all 1s;
}

.overlay:after {
    content: '\A';
    position: absolute;
    width: 100%; 
    height:100%;
    top:0; 
    left:0;
    background:rgba(0,0,0,0.5);
    opacity: 1;
    transition: all 0.5s;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
}
.overlay:hover:after {
    opacity: 0;
}

签出我的笔>

http://codepen.io/craigocurtis/pen/KzXYad


很好,但在Windows 10上的Firefox 47.0.1中无法正常工作。但可与IE一起使用。您是否有针对Firefox的修复程序?
约翰·马克斯,

2
@JohnMax Firefox现在可以正常工作。只需等待几年。
Craig O. Curtis

9

设置background-blend-modedarken实现目标的最直接,最短的方法,但是必须首先设置background-color混合模式才能工作。
如果以后需要在javascript中操纵值,这也是最好的方法。

background: rgba(0, 0, 0, .65) url('http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png');
background-blend-mode: darken;

我可以用于背景融合


1
边缘或IE11并不是真正的浏览器
stackdave

6

可能可以这样做 box-shadow

但是,我无法真正将其应用于图像。仅在纯色背景上

body {
  background: #131418;
  color: #999;
  text-align: center;
}
.mycooldiv {
  width: 400px;
  height: 300px;
  margin: 2% auto;
  border-radius: 100%;
}
.red {
  background: red
}
.blue {
  background: blue
}
.yellow {
  background: yellow
}
.green {
  background: green
}
#darken {
  box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, .7);
  /*darkness level control - change the alpha value for the color for darken/ligheter effect */
}
Red
<div class="mycooldiv red"></div>
Darkened Red
<div class="mycooldiv red" id="darken"></div>
Blue
<div class="mycooldiv blue"></div>
Darkened Blue
<div class="mycooldiv blue" id="darken"></div>
Yellow
<div class="mycooldiv yellow"></div>
Darkened Yellow
<div class="mycooldiv yellow" id="darken"></div>
Green
<div class="mycooldiv green"></div>
Darkened Green
<div class="mycooldiv green" id="darken"></div>


2

您可以将背景作为绝对和负z-index放置在容器中:http : //jsfiddle.net/2YW7g/

的HTML

<div class="main">
    <div class="bg">         
    </div>
    Hello World!!!!
</div>

的CSS

.main{
    width:400px;
    height:400px;
    position:relative;
    color:red;
    background-color:transparent;
    font-size:18px;
}
.main .bg{
    position:absolute;
      width:400px;
    height:400px;
    background-image:url("http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png");
    z-index:-1;
}

.main:hover .bg{
    opacity:0.5;
}

2

只需添加以下内容,即可使用:

background: -moz-linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
background: -webkit-linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
background: linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
filter: unquote("progid:DXImageTransform.Microsoft.gradient( startColorstr='#b3000000', endColorstr='#b3000000',GradientType=0 )");

...用于跨浏览器支持70%的线性渐变叠加层。要增亮图像,您可以将所有都更改0,0,0255,255,255。如果70%有点高,请继续进行更改.7。并且,供将来参考,请查看以下内容:http : //www.colorzilla.com/gradient-editor/


1

当您想使背景色变亮或变暗时,可以使用此CSS代码

.brighter-span {
  filter: brightness(150%);
}

.darker-span {
  filter: brightness(50%);
}

谢谢,我对CSS 过滤器一无所知。万一它对某人有所帮助,这里是“我可以使用”状态(2020年3月)。
里德·邓克尔

0

对我来说,过滤器/渐变方法不起作用(可能是由于现有的CSS),所以我改用了:before伪样式技巧:

.eventBannerContainer {
    position: relative;
}
.eventBannerContainer:before {
    background-color: black;
    height: 100%;
    width: 100%;
    content: "";
    opacity: 0.5;
    position: absolute;
    display: block;
}
/* make any immediate child elements above our darkening mask */
.eventBannerContainer > * {
    position: relative;
}

由于默认display::beforeinline它不会接受widthheight
connexo

谢谢@connexo,看起来我在复制相关样式时错过了它。
Daniel Sokolowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.