您尝试执行的操作将行不通。如果我们看看opacity specs,我们就会明白为什么不这样做:
3.2.透明度:“不透明度”属性
不透明度可以被认为是一种后处理操作。从概念上讲,在将元素(包括其后代)渲染为 RGBA 离屏图像后,不透明度设置指定如何将离屏渲染混合到当前的复合渲染中。
[...]
如果对象是一个容器元素,那么效果就好像容器元素的内容使用掩码与当前背景混合,其中掩码的每个像素的值为<alphavalue>。
因此,如果您将 <body> 的不透明度设置为 0.5,那么浏览器将渲染所有 <body>(包括它的子元素,因此包括您的 @$el),然后使用 alpha 通道将其合成到浏览器窗口中值为 0.5。结果是整个页面将以半透明度呈现。更改 <body> 内部的不透明度无关紧要,因为在将孩子渲染为 <body> 时将应用孩子的不透明度,然后再应用 <body> 的不透明度。
考虑这个纯 HTML/CSS 示例:
<div id="outer">
<div id="inner"></div>
</div>
和
#outer {
/* ... */
opacity: 0.5;
}
#inner {
/* ... */
opacity: 1.0;
}
整个事情看起来半透明,因为#inner 不透明度实际上是“相对于其父级的不透明度”而不是“相对于浏览器窗口的不透明度”。
演示:http://jsfiddle.net/ambiguous/WtAvx/
你将不得不改变你的方法。例如,您可以在 @$el 和 <body> 之间放置一个 opacity: 0.5 元素,其结构如下:
<div id="outer"></div>
<div id="inner"></div>
和:
#outer {
/* ... */
position: absolute;
top: 0;
left: 0;
opacity: 0.5;
}
#inner {
/* ... */
position: absolute;
top: 50px;
left: 50px;
opacity: 1.0; /* You don't really need this */
}
演示:http://jsfiddle.net/ambiguous/Jsd7q/
您可能必须使用stacking order 并在您的元素和<body> 之间插入一个绝对定位的<div> 和opacity: 0.5,但我不能再说什么了,在您的问题中给出的细节很少。