RGBA — Alpha通道作为单独的类

时间:2018-10-17 09:09:11

标签: css css3

假设我们有一个存储背景色的类列表。

.bgr-red //background-color: rgb(255, 0, 0);
.bgr-green //background-color: rgb(0, 0 , 255);
.bgr-blue //background-color: rgb(0, 128, 0);

我们有一个使用这些类之一的div。

<div class="bgr-red">...</div>

有什么办法可以创建一组包含Alpha通道的新类?这样的事情(我尝试过这种方法,但是没有用):

.alpha-90 //background-color: rgba(inherit, inherit, inherit, .9);
.alpha-80 //background-color: rgba(inherit, inherit, inherit, .8);
.alpha-70 //background-color: rgba(inherit, inherit, inherit, .7);

最终目的是能够将背景色的不透明度放入与其他背景色值分开的div中吗?像这样创建一个div:

<div class="bgr-red alpha-80">...</div>

谢谢。

1 个答案:

答案 0 :(得分:7)

使用CSS变量:

.bgr-red {
  background-color: rgba(255, 0, 0, var(--a, 1));
}

.bgr-green {
  background-color: rgba(0, 0, 255, var(--a, 1));
}

.bgr-blue {
  background-color: rgba(0, 128, 0, var(--a, 1));
}

.alpha-90 {
  --a: 0.9;
}

.alpha-70 {
  --a: 0.7;
}

.alpha-10 {
  --a: 0.1;
}
<div class="bgr-red">...</div>

<div class="bgr-red alpha-70">...</div>

<div class="bgr-red alpha-10">...</div>

为了获得更好的支持,您可以考虑使用伪元素来创建背景层并调整不透明度:

div {
  position: relative;
  z-index: 0;
}

div::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: -1;
}

.bgr-red::before {
  background-color: rgb(255, 0, 0);
}

.bgr-green::before {
  background-color: rgb(0, 0, 255);
}

.bgr-blue::before {
  background-color: rgb(0, 128, 0);
}

.alpha-90::before {
  opacity: 0.9;
}

.alpha-70::before {
  opacity: 0.7;
}

.alpha-10::before {
  opacity: 0.1;
}
<div class="bgr-red">...</div>

<div class="bgr-red alpha-70">...</div>

<div class="bgr-red alpha-10">...</div>