我有一个带文本的元素。每当我降低透明度时,整个页面的透明度都会降低。有没有办法只能让background-image
变暗,而不影响其他任何东西?
background-image:url('http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png');
只需将此代码添加到您的图像 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(https://images.unsplash.com/photo-1614030424754-24d0eebd46b2);
}
参考资料:linear-gradient() - CSS | MDN
更新:并非所有浏览器都支持RGBa,因此您应该设置一个“备用颜色”。该颜色很可能是纯色(完全不透明),例如:background:rgb(96, 96, 96)
。有关RGBa浏览器支持,请参见本博客。
2023年更新:现代浏览器都支持RGBa: caniuse链接
将 background-blend-mode
设为 darken
将是实现目的最为直接和最短的方式,然而您必须先设置一个 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;
background
或 background-image
),那么这个方案是完美的:background-color: #0005; background-blend-mode: darken;
。 - Krzysztof Przygoda使用:after伪元素:
.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;
}
看看我的钢笔 >
使用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>
backdrop-filter: brightness(50%);
。在已有内容的基础上,补充以下信息:
使用以下方法:
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,0
更改为255,255,255
。如果70%过多,可以随意更改.7
。以备将来参考,请查看此链接:http://www.colorzilla.com/gradient-editor/
<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;
}
对我而言,滤镜/渐变方法不起作用(可能是由于现有的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;
}
::before
的默认 display
是 inline
,因此它不接受 width
和 height
。 - connexo <div
class="dark-background w-screen px-24"
style="
background-image: url('https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fdevx.work%2Fblog%2Fwp-content%2Fuploads%2F2021%2F03%2FLOUNGE-01-1920x1024.jpg&f=1&nofb=1&ipt=bc89ea53d39a8da6df1ca59ed5daba3155d44fa3627e5071448aecd5da8be808&ipo=images');
background-color: gray;
background-blend-mode: multiply;
background-attachment: fixed;
height:100vh;
width:100vh;
color:white;
"
>Here is a text !! :) </div>