我们在网站上有一个很大的应用程序,我们有一些链接,比如说蓝色的就像这个网站上的蓝色链接。现在我想做一些其他的链接,但是用浅一点的颜色。显然,我可以简单地通过在CSS文件中添加十六进制代码来做,但我们的网站让用户决定他们想要的自定义配置文件/网站(如Twitter)的颜色。

所以,我的问题是:我们能减少百分比的颜色吗?

让我们说下面的代码是CSS:

a {
  color: blue;
}

a.lighter {
  color: -50%; // obviously not correct way, but just an idea
}

OR

a.lighter {
  color: blue -50%;  // again not correct, but another example of setting color and then reducing it
}

有没有办法将颜色减少一个百分比?


当前回答

这是一个老问题,但大多数答案都需要使用预处理器或JavaScript来操作,否则它们不仅会影响元素的颜色,还会影响其中包含的元素的颜色。我将添加一种复杂的css方式来做同样的事情。也许在未来,随着更高级的CSS功能,这将更容易做到。

这个想法是基于使用:

RGB颜色,所以你有单独的值红,绿,蓝; CSS变量,用来存储颜色值和暗度;而且 calc函数,以应用更改。

默认情况下,暗度为1(对于100%,常规颜色),如果您乘以0到1之间的数字,您将使颜色变深。例如,如果您将每个值乘以0.85,您将使颜色暗15%(100% - 15% = 85% = 0.85)。

下面是一个例子,我创建了三个类:.dark, .dark和.darkest,这将使原始颜色分别暗25%,50%和75%:

html { --clarity: 1; } div { display: inline-block; height: 100px; width: 100px; line-height: 100px; color: white; text-align: center; font-family: arial, sans-serif; font-size: 20px; background: rgba( calc(var(--r) * var(--clarity)), calc(var(--g) * var(--clarity)), calc(var(--b) * var(--clarity)) ); } .dark { --clarity: 0.75; } .darker { --clarity: 0.50; } .darkest { --clarity: 0.25; } .red { --r: 255; --g: 0; --b: 0; } .purple { --r: 205; --g: 30; --b: 205; } <div class="red">0%</div> <div class="red dark">25%</div> <div class="red darker">50%</div> <div class="red darkest">75%</div> <br/><br/> <div class="purple">0%</div> <div class="purple dark">25%</div> <div class="purple darker">50%</div> <div class="purple darkest">75%</div>

其他回答

使用filter pure CSS属性。要获得过滤器属性函数的完整描述,请阅读这篇很棒的文章。

我也有和你一样的问题,我通过使用滤镜属性的亮度功能来修复它:

.my-class {
  background-color: #18d176;
  filter: brightness(90%);
}

Try:

a {
  color: hsl(240, 100%, 50%);
}

a:hover {
  color: hsl(240, 100%, 70%);
}

如果您需要为了旧的浏览器兼容性而强制使用它,您可以使用Colllor自动选择类似的颜色变化。

示例(颜色:#a9dbb4):

你可以在所有现代浏览器中使用CSS过滤器(参见caniuse兼容性表)。

.button { 颜色:# ff0000; } /*注:100%为基线,85%略暗, 20%的颜色要深得多*/ .button:{徘徊 过滤器:亮度(85%); } <button class="button">Foo lorem ipsum</button>

这里有更多关于你可以使用的各种过滤器的CSS技巧:https://css-tricks.com/almanac/properties/f/filter/

据我所知,在CSS中没有办法做到这一点。

但我认为一点服务器端逻辑就可以很容易地实现您的建议。CSS样式表通常是静态资产,但没有理由不能由服务器端代码动态生成。您的服务器端脚本将:

检查URL参数以确定用户,从而确定用户选择的颜色。使用URL参数而不是会话变量,这样您仍然可以缓存CSS。 把颜色分成红、绿、蓝三部分 三个组成部分分别增加一个固定的数量。用这个方法进行实验,得到你想要的结果。 生成包含新颜色的CSS

到这个css生成页面的链接看起来像这样:

<link rel="stylesheet" href="http://yoursite.com/custom.ashx?user=1231">

如果您不使用. CSS扩展名,请确保正确设置mime类型,以便浏览器知道将文件解释为CSS。

(注意,要使颜色变浅,你必须提高每个RGB值)