协慌网

登录 贡献 社区

CSS 不透明度只对背景颜色,而不是文字就可以了?

我可以将opacity属性分配给divbackground属性而不是它上面的文本吗?

我试过了:

background: #CCC;
opacity: 0.6;

但这不会改变不透明度。

答案

听起来你想使用透明背景,在这种情况下你可以尝试使用rgba()函数:

rgba(R, G, B, A)

R(红色),G(绿色)和 B(蓝色)可以是<integer> s 或<percentage> s,其中数字 255 对应于 100%。 A(α)可以是 0 到 1 之间的<number> ,或<percentage> ,其中数字 1 对应于 100%(完全不透明度)。

RGBa 的例子

rgba(51, 170, 51, .1)    /*  10% opaque green */ 
rgba(51, 170, 51, .4)    /*  40% opaque green */ 
rgba(51, 170, 51, .7)    /*  70% opaque green */ 
rgba(51, 170, 51,  1)    /* full opaque green */

一个小例子,展示了如何使用rgba

截至 2018 年,几乎每个浏览器都支持rgba语法

最简单的方法是使用 2 个 div,1 个带背景,1 个带文本:

#container {
  position: relative;
  width: 300px;
  height: 200px;
}
#block {
  background: #CCC;
  filter: alpha(opacity=60);
  /* IE */
  -moz-opacity: 0.6;
  /* Mozilla */
  opacity: 0.6;
  /* CSS3 */
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}
#text {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<div id="container">
  <div id="block"></div>
  <div id="text">Test</div>
</div>

仅限用户:

如果你不喜欢使用 RGBA 设置颜色,而是使用 HEX,那么就有解决方案。

你可以使用 mixin:

.transparentBackgroundColorMixin(@alpha,@color) {
  background-color: rgba(red(@color), green(@color), blue(@color), @alpha);
}

并使用它像:

.myClass {
    .transparentBackgroundColorMixin(0.6,#FFFFFF);
}

实际上这就是内置的 Less 函数也提供了:

.myClass {
    background-color: fade(#FFFFFF, 50%);
}

请参阅如何使用 Less 编译器将十六进制颜色转换为 rgba?