使文本背景透明,但不改变文本本身

115

所以我有一个问题。我已经四处寻找答案,但没有运气。我想让我的页面背景透明,但是让字体不透明。目前我无法做到只设置背景透明度而保持字体不变。以下是我的代码:

@charset "utf-8";
body {
    font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
    background-color: #42413C;
    margin: 0;
    padding: 0;
    color: #000;
}

/* ~~ Element/tag selectors ~~ */
ul, ol, dl { 
    padding: 0;
    margin: 0;
}
h1, h2, h3, h4, h5, h6, p {
    margin-top: 0;
    padding-right: 15px;
    padding-left: 15px;
    opacity:1;
}
a img { 
    border: none;
}
a:link {
    color: #42413C;
    text-decoration: underline;
}
a:visited {
    color: #6E6C64;
    text-decoration: underline;
}
a:hover, a:active, a:focus {
    text-decoration: none;
}
.container {
    width: 750px;
    margin: 0 auto;
}
.content {
    padding:20px;
    width:710px;
    position:relative;
    background:#CCC;
    opacity: 0.5;
}
.fltrt {
    float: right;
    margin-left: 8px;
}
.fltlft { 
    float: left;
    margin-right: 8px;
}
.clearfloat { 
    clear:both;
    height:0;
    font-size: 1px;
    line-height: 0px;
}
.header {
    top:0%;
    width: 750px;
    height: 200px;
    background-image: url(images/header.png);
    background-repeat:no-repeat;
    background-position:center;
}
.navbar {
    height: 50px;
    width: 750px;
    position: relative;
    z-index: 2;
}
#bg {
    position: fixed;
    top: 25%;
    left: 15%;
    z-index: -1;
}
div {
display: block;
}

这是我的网站(点击链接,不要在您的URL中输入“tccraft.net”,否则它将带您到Facebook页面):http://tccraft.net/index.php 谢谢!


9个回答

227

不要使用opacity来实现半透明背景,而是将背景设置为RGBA值。在您的情况下,可以这样做。

.content {
    padding:20px;
    width:710px;
    position:relative;
    background: rgb(204, 204, 204); /* Fallback for older browsers without RGBA-support */
    background: rgba(204, 204, 204, 0.5);
}

查看http://css-tricks.com/rgba-browser-support/了解CSS中RGBA值的更多信息和示例。


1
有什么想法可以通过背景图片实现这个效果吗? - Jujucat
1
对于背景图片,可以使用带有 alpha 通道的 PNG 或 WEBP 格式的图像作为您的图片。 - Karl-Johan Sjögren

28

使用以下代码可实现完全透明的背景:

background: transparent;

否则,如果需要使用半透明的颜色填充,请使用:

background: rgba(255,255,255,0.5); // or hsla(0, 0%, 100%, 0.5)

数值为:

background: rgba(red,green,blue,opacity); // or hsla(hue, saturation, lightness, opacity)

你也可以使用rgba值来创建渐变背景。

如果想要在图像背景上实现透明效果,只需事先在所选的图像编辑器中降低图像的不透明度。


有没有更多关于 background: transparent; 的信息链接?我无法让它工作或找到相关文档。 - Mote Zart

2

使用 alpha 值而不是使用 opacity。参见下面的代码:

background: rgba(255,255,255,0.2);

1
这个想法已经被提出过了,有什么新的进展吗? - Vega

2

opacity属性会使得文本和背景都透明。我们可以使用半透明的背景色来代替,比如使用rgba()值。该方法兼容IE8及以上浏览器。


0

我用 z-index 找到了一种方法。

水印类(可以使用 #19531361 的示例)完成了工作。所有输入标签都是非透明的,但它们位于水印的“后面”。要使它们活动起来,请使用以下 CSS 修改(然后输入标签会处于“顶部”)。

input {
    position:relative;
    z-index:10;
}

.watermark {
    position: absolute;
    opacity: 25%;
    z-index:0;
}

目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - manpreet
我修改了我的回答。请告诉我,现在是否更清晰明了。 - Dusan Ferbas

0

0
为了使您的页面背景透明,请尝试以下样式,这对我有效。在所需的颜色代码末尾添加"ad"即可。
background-color: #42413Cad !important;

0

如果您在现代浏览器中使用RGBA,您不需要让旧版IE仅使用RGB的不透明版本来给定颜色。

如果您不坚持仅使用CSS的解决方案,请尝试CSS3PIE。使用此语法,您可以在旧版IE中看到与现代浏览器相同的结果:

div {
    -pie-background: rgba(223,231,233,0.8);
    behavior: url(../PIE.htc);
}

-3
box-shadow: inset 1px 2000px rgba(208, 208, 208, 0.54);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接