javascript - 从父级继承颜色并在 CSS 中执行颜色着色

标签 javascript css

在 CSS 中是否有一种方法可以采用由 CSS 类定义的事件颜色,并使颜色变暗或变亮以在另一个 CSS 类中使用?

开发场景:
我们有一个使用 CSS 样式的对话框,该样式将其颜色定义为灰色阴影。在 dailog 中,我们的按钮使用 2 种不同的 CSS 样式来模拟按钮弹起和按钮按下状态。

是否可以让按钮的 CSS 样式使用对话框颜色,但让按钮外观变暗或变亮。按钮表面应比主对话框颜色浅,边框使用较浅和较深的颜色,以呈现 3D 按钮框架的外观。

目标:
如果我们更改对话框的颜色,按钮也会更改,而无需对用于呈现按钮的向上和向下状态的 2 个 CSS 样式进行任何代码更改。


我猜测在 JavaScript 中有一种方法可以执行此操作,但在 CSS 中是否有一种方法可以执行此操作?

最佳答案

您可以使用带有 opacity 的白色或黑色背景适合您想要减轻的量。不透明度使用起来有点挑战(相对于其他更常见的 CSS 属性),因为它需要特定于浏览器的 hack。根据this blog post , 以下 (hacky) CSS 将跨浏览器工作以支持 50% 不透明度:

.show-50 { -khtml-opacity:.50; -moz-opacity:.50; -ms-filter:"alpha(opacity=50)"; filter:alpha(opacity=50); opacity:.50; zoom:1; } 

顺便说一句,我回答了another stackoverflow question related to Opacity ,它包含一些 jQuery 代码示例,可用于以浏览器中立的方式应用不透明度。如果上面的 CSS 让你作呕,你可以使用它。 :-) 请注意,我在上面添加了“zoom:1”以确保元素具有“布局”,这是应用不透明度的特定于 IE 的先决条件——这个问题也在上面链接的线程中进行了描述。

您还可以使用白色但具有您喜欢的透明度值的 PNG 图像。这需要 IE6 中常用的 PNG 修复解决方案。

下面是一个代码示例,说明了哪些是可能的(以及一些限制):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <style type="text/css">
        .button { background-color:green; height:30px; width:100px; border: solid 1px red; color:#FFF; margin:20px; text-align:center;  }
        .buttonText { height:30px; width:100px;  color:#FFF; margin:20px; text-align:center;  }
        .show-50 { -khtml-opacity:.50; -moz-opacity:.50; -ms-filter:"alpha(opacity=50)"; filter:alpha(opacity=50); opacity:.50; zoom:1; } 
        .lighter { background-color:#CCCCCC; height:100%; width:100%; }
        .darker { background-color:#000000; height:100%; width:100%;}
        .whitetext {color:#fff; height:100%; width:100%; padding-top:6px;}
        .moveText {margin-top:-52px; color:#fff; padding-top:6px; z-index: 10; }
    </style>
</head>
<body>
 <div class="button"></div>
 <div class="buttonText moveText">Regular button</div>
 <div class="button"><div class="show-50 lighter"></div></div>
 <div class="buttonText moveText">Lighter button</div>
 <div class="button"><div class="show-50 darker"></div></div>
 <div class="buttonText moveText">Darker button</div>
</body>
</html>

在 IE8 上,文本看起来很完美(又名白色)。不幸的是,在 FF 和 Safari 上,文本变暗了。上面我将文本放入不同 DIV 的 hack 欺骗 IE 在不同颜色的背景上显示白色文本,但同样的技巧在 FF 和 Safari 上不起作用。我怀疑您可以发挥创意并找到对此进行改进的方法,以便文本在所有浏览器中保持相同的颜色。一个真正的实现可能还想使用绝对定位而不是我的负面最高利润黑客。

关于javascript - 从父级继承颜色并在 CSS 中执行颜色着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731015/

相关文章:

javascript - 从 JavaScript 调用 Blazor 方法

javascript - 如何让 ESLint --fix 也运行 prettier --write

html - 使用 Transform CSS 时 Chrome 中的抗锯齿问题

html - 从底部绝对定位

html - 渐变边框用 css/html 淡化周围的 div

CSS Mask 显示元素

javascript - 如何以编程方式打开 Bootstrap 下拉菜单

javascript - 直接使用 $injector 实例与获取依赖项作为参数

javascript - 由于 CORS 问题,AJAX POST 未使用 body-parser 向express.js 服务器发送请求

javascript - 自动完成不适用于 javascript 生成的输入字段