【问题标题】:Change the shade of the color, with the reference to the original one改变颜色的深浅,参考原来的那个
【发布时间】:2019-12-24 17:27:39
【问题描述】:
<style>
    div.red {
        border-left: 5px solid rgb(255, 96, 92);
        margin: auto;
        padding: 0.5em 1em;
        width: 95%;
    }
</style>

<div class="red">
    <p>Aaa aaa aaa aaa aaa</p>

    <div class="red">
        <p>Aaa aaa aaa aaa aaa</p>
    </div>
</div>

我有一个基色 (rgb(255, 96, 92)),我需要将它合并到 div 的样式中,作为背景。

div 的背景应该比底色浅一些,类似于

div.red {
    rgba(255, 96, 92, 0.25);
}

但是,我不能使用

background: {rgba(255, 96, 92, 0.25);}

直接,因为它改变了嵌套div的背景颜色。

不透明度也不合适,因为它会改变文本的颜色。

div.red {
    background: rgb(255, 96, 92);
    opacity: 0.25;
}

过滤器不适合与不透明度相同的原因:它们会影响文本。

我知道的另一个选项是 HUE 颜色模型。它不适合,因为我需要保留对基色的引用。

rgb(255, 96, 92)hsl(1, 100%, 68%) 相同。我可以将 68 更改为 93,它会提供所需的视觉效果。但是现在我不能说,查看我的代码,哪个颜色是基色。

div.red {
    background: hsl(1, 100%, 93%);
}

我正在寻找的最好方法是

div.red {
    background: rgba(255, 96, 92, 0.25);
    background-alpha-channel: separate; /* separate or merge,
                                           depending of what you need. */
}

【问题讨论】:

  • 看来用JS可以更好的解决。使用 rgba 作为背景,然后 JS 应该将其转换为 rgb。似乎我找到了合适的代码,但由于某种原因我无法理解如何使用它:stackoverflow.com/a/21576659(我已经在那里留下了评论。)

标签: css colors background-color


【解决方案1】:

使用伪元素作为背景层并在那里应用过滤器:

div.red {
  border-left: 5px solid rgb(255, 96, 92);
  margin: auto;
  padding: 0.5em 1em;
  width: 95%;
  position: relative;
  z-index: 0;
}

.red:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: -1;
  background: rgba(255, 96, 92);
  filter: brightness(2);
}
<div class="red">
  <p>Aaa aaa aaa aaa aaa</p>

  <div class="red">
    <p>Aaa aaa aaa aaa aaa</p>
  </div>
</div>

另一个想法是考虑两个背景层,其中最上面的一个是具有 alpha 的白色。添加更多的白色会使颜色更亮。

div.red {
  border-left: 5px solid rgb(255, 96, 92);
  margin: auto;
  padding: 0.5em 1em;
  width: 95%;
  background: 
    linear-gradient(rgba(255,255,255,0.5),rgba(255,255,255,0.5)),
    rgba(255, 96, 92)
}
<div class="red">
  <p>Aaa aaa aaa aaa aaa</p>

  <div class="red">
    <p>Aaa aaa aaa aaa aaa</p>
  </div>
</div>

【讨论】:

  • @asobak 我同意解决方案远非完美。不过,目前还没有其他的。
  • @asobak 您也应该在 .red:before 中指定 alpha 值。 --> 阅读问题,您就会明白为什么 alpha 不起作用... 并且没有明确指示 OP 正在寻找两种不同的颜色。 --> 边框和背景有两种不同的颜色,如果这不是一个明确的指示,那么我无话可说。跨度>
  • @johnc.j。添加了另一个想法
  • 第二个版本非常适合我。非常感谢。在第二个版本中有 position: relative 有什么理由吗? (看起来像是错字)。
  • @johnc.j。不,你可以删除它,我只是从以前的代码中保留它
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 2014-07-06
  • 2010-09-10
  • 2015-03-02
  • 1970-01-01
相关资源
最近更新 更多