我正在使用类似于以下代码的内容:
<div style="opacity:0.4; background-image:url(...);">
<div style="opacity:1.0;">
Text
</div>
</div>
我希望这会使背景的不透明度为 0.4,文本的不透明度为 100%。相反,它们的不透明度均为 0.4。
孩子继承不透明度。如果他们不这样做会很奇怪和不方便。
您可以为背景图像使用半透明的 PNG 文件,或为背景颜色使用 RGBa(a 表示 alpha)颜色。
例如,50% 褪色的黑色背景:
<div style="background-color:rgba(0, 0, 0, 0.5);">
<div>
Text added.
</div>
</div>
您可以使用伪元素::before
或::after
获得半透明背景,并且只需一个容器即可。使用这样的东西:
<article>
Text.
</article>
然后应用一些 CSS:
article {
position: relative;
z-index: 1;
}
article::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: .4;
z-index: -1;
background: url(path/to/your/image);
}
例子:
body {
background: red;
}
article {
position: relative;
z-index: 1;
}
article:before {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100px;
opacity: .4;
z-index: -1;
background: url(https://31.media.tumblr.com/8ec07e49f33088c2e32c158ca4262eb2/tumblr_n5wav6Tz4R1st5lhmo1_1280.jpg);
}
<article>
Text.
</article>
注意:您可能需要调整这些z-index
值。
以下方法可用于解决您的问题:
CSS alpha 透明度方法(在 Internet Explorer 8 中不起作用):
#div{background-color:rgba(255,0,0,0.5);}
根据您的选择使用透明的PNG图像作为背景。
使用以下 CSS 代码片段创建跨浏览器的 alpha 透明背景。这是一个#000000
不透明度为 @ 0.4%的示例
.div {
background:rgb(0,0,0);
background: transparent\9;
background:rgba(0,0,0,0.4);
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000);
zoom: 1;
}
.div:nth-child(n) {
filter: none;
}
有关此技术的更多详细信息,请参阅此,它有一个在线 CSS 生成器。
我会做这样的事情
<div class="container">
<div class="text">
<p>text yay!</p>
</div>
</div>
CSS:
.container {
position: relative;
}
.container::before {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: url('/path/to/image.png');
opacity: .4;
content: "";
z-index: -1;
}
它应该工作。这是假设您需要有一个半透明的图像顺便说一句,而不是颜色(您应该只使用 rgba)。还假设您不能事先在 Photoshop 中更改图像的不透明度。
您可以使用Sass' transparentize
。
我发现它是最有用和最简单易用的。
transparentize(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.4)
transparentize(rgba(0, 0, 0, 0.8), 0.2) => rgba(0, 0, 0, 0.6)
查看更多:#transparentize($color, $amount) ⇒ Sass::Script::Value::Color
.transbg{/* Fallback for web browsers that don't support RGBa */
background-color: rgb(0, 0, 0);
/* RGBa with 0.6 opacity */
background-color: rgba(0, 0, 0, 0.6);
/* For IE 5.5 - 7*/
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
/* For IE 8*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";}
这是因为内部 div 具有它所嵌套的 div 的 100% 的不透明度(具有 40% 的不透明度)。
为了规避它,您可以做一些事情。
您可以像这样创建两个单独的 div:
<div id="background"></div>
<div id="bContent"></div>
为背景设置所需的 CSS 不透明度和其他属性,并使用 z-index 属性 ( z-index ) 设置 bContent div 的样式和位置。有了这个,您可以将 div 放置在背景 div 的上方,而不会破坏它的不透明度。
另一种选择是RGBa。这将允许您嵌套 div 并仍然实现 div 特定的不透明度。
最后一个选项是在所需的图像编辑器中简单地制作一个半透明的 .png 图像,然后将 background-image 属性设置为图像的 URL,然后您就不必担心搞砸了使用 CSS 并失去嵌套 div 结构的功能和组织。
只需确保将前景的宽度和高度与背景相同,或者尝试设置顶部、底部、左侧和右侧属性。
<style>
.foreground, .background {
position: absolute;
}
.foreground {
z-index: 1;
}
.background {
background-image: url(your/image/here.jpg);
opacity: 0.4;
}
</style>
<div class="foreground"></div>
<div class="background"></div>