仅使用CSS,是否可以使元素的背景半透明,但元素的内容(文本和图像)不透明?
我想在不将文本和背景作为两个独立元素的情况下完成这一点。
尝试时:
p型{位置:绝对;背景色:绿色;过滤器:alpha(不透明度=60);不透明度:0.6;}跨度{颜色:白色;过滤器:alpha(不透明度=100);不透明度:1;}<p><span>你好,世界</span></p>
看起来子元素受到其父元素的不透明度的影响,因此不透明度:1相对于父元素的不可见性:0.6。
仅使用CSS,是否可以使元素的背景半透明,但元素的内容(文本和图像)不透明?
我想在不将文本和背景作为两个独立元素的情况下完成这一点。
尝试时:
p型{位置:绝对;背景色:绿色;过滤器:alpha(不透明度=60);不透明度:0.6;}跨度{颜色:白色;过滤器:alpha(不透明度=100);不透明度:1;}<p><span>你好,世界</span></p>
看起来子元素受到其父元素的不透明度的影响,因此不透明度:1相对于父元素的不可见性:0.6。
当前回答
这是我能想到的最好的解决方案,不使用CSS 3。据我所知,它在Firefox、Chrome和Internet Explorer上运行得很好。
将一个容器div和两个子div放在同一级别,一个用于内容,另一个用于背景。使用CSS,自动调整背景大小以适应内容,并使用z索引将背景放在后面。
.容器{位置:相对;}.内容{位置:相对;颜色:白色;z指数:5;}.背景{位置:绝对;顶部:0px;左:0px;宽度:100%;高度:100%;背景色:黑色;z指数:1;/*这三行用于所有浏览器中的透明度*/-ms filter:“progid:DXImageTransform.Microsoft.Alpha(不透明度=50)”;过滤器:alpha(不透明度=50);不透明度:.5;}<div class=“container”><div class=“content”>内容如下。<br/>背景应该适合。</div><div class=“background”></div></div>
其他回答
我是这样做的(这可能不是最佳的,但它有效):
创建要半透明的div。给它一个类/id。将其留空,然后将其关闭。为其设置高度和宽度(例如,300像素乘300像素)。给它一个0.5的不透明度或任何你喜欢的颜色,以及一个背景色。
然后,在该div的正下方,创建另一个具有不同类/id的div。在其中创建一个段落,在其中放置文本。给出div位置:relative,top:-295px(即负295像素)。给它一个z索引为2,以便于度量,并确保它的不透明度为1。根据您的喜好设置段落的样式,但要确保尺寸小于第一个div的尺寸,这样它就不会溢出。
就是这样。代码如下:
.反式{不透明度:0.5;高度:300px;宽度:300px;背景色:橙色;}.变速器2{不透明度:1;位置:相对;顶部:-295px;}.变速器2 p{宽度:295px;颜色:黑色;字号:粗体;}<body><div class=“trans”></div><div class=“trans2”><p>文本文本文本</p></div></body>
这在Safari2.x中有效,但我不了解Internet Explorer。
CSS 3为您的问题提供了一个简单的解决方案。使用:
background-color:rgba(0, 255, 0, 0.5);
这里,rgba代表红色、绿色、蓝色和alpha值。由于255而获得绿色值,并且通过0.5α值获得半透明度。
问题是,在您的示例中,文本实际上是完全不透明的。它在p标记内具有完全不透明性,但p标记只是半透明的。
您可以添加半透明的PNG背景图像,而不是在CSS中实现,或者将文本和div分离为两个元素,并将文本移动到框上(例如,负边距)。
否则就不可能了。
正如Chris所提到的:如果你使用一个具有透明度的PNG文件,你必须使用JavaScript解决方法来让它在烦人的Internet Explorer中工作。。。
在Firefox 3和Safari 3中,您可以像Georg Schölly提到的那样使用RGBA。
一个鲜为人知的技巧是,您可以在Internet Explorer中使用它,也可以使用渐变过滤器。
background-color: rgba(0, 255, 0, 0.5);
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7F00FF00', EndColorStr='#7F00FF00');
第一个十六进制数定义颜色的alpha值。
所有浏览器的完整解决方案:
.alpha60 {
/* Fallback for web browsers that doesn't support RGBa */
background: rgb(0, 0, 0) transparent;
/* RGBa with 0.6 opacity */
background: 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)";
}
这是通过RGBa和过滤器在不影响子元素的情况下实现CSS背景透明度。
结果截图证明:
这是在使用以下代码时:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css" media="all">
.transparent-background-with-text-and-images-on-top {
background: rgb(0, 0, 0) transparent; /* Fallback for web browsers that doesn't support RGBa */
background: rgba(0, 0, 0, 0.6); /* RGBa with 0.6 opacity */
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); /* For IE 5.5 - 7*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; /* For IE 8*/
}
</style>
</head>
<body>
<div class="transparent-background-with-text-and-images-on-top">
<p>Here some content (text AND images) "on top of the transparent background"</p>
<img src="http://i.imgur.com/LnnghmF.gif">
</div>
</body>
</html>
不久前,我在Cross Browser Background Transparency With CSS中写到了这一点。
奇怪的是,InternetExplorer6将允许您使背景透明,并使顶部的文本完全不透明。对于其他浏览器,我建议使用透明的PNG文件。