看起来 CSS 滤镜不遵守其他 CSS 属性的相同规则,包括覆盖和应用顺序。
首先,它们只能被后代元素中的滤镜重叠,而不能被覆盖。其次,更改 CSS 规则的特异性似乎不会改变这些滤镜的应用顺序。这是我现在正在处理的问题。
如此JS Bin所示,亮度滤镜是在反色滤镜之前应用的,导致产生了我所需要的相反效果。我需要先将反色滤镜应用于祖先,然后再将亮度滤镜应用于特定后代。
我想到的唯一解决方案是使用“:not()”来排除后代元素,使我能够将单独的(非重叠)滤镜应用于后代。然而,在我们的单页应用程序(单个、大型 DOM)中,这导致性能非常差。
您有什么关于如何在这种情况下首先应用反色滤镜或其他解决方案的想法吗?
请注意,我需要滤镜来完成工作,而不是手动地将特定颜色应用于后代元素,因为我实际上正在过滤一个彩色图像。我在 JS Bin 中使用文本只是为了简单起见。
首先,它们只能被后代元素中的滤镜重叠,而不能被覆盖。其次,更改 CSS 规则的特异性似乎不会改变这些滤镜的应用顺序。这是我现在正在处理的问题。
如此JS Bin所示,亮度滤镜是在反色滤镜之前应用的,导致产生了我所需要的相反效果。我需要先将反色滤镜应用于祖先,然后再将亮度滤镜应用于特定后代。
我想到的唯一解决方案是使用“:not()”来排除后代元素,使我能够将单独的(非重叠)滤镜应用于后代。然而,在我们的单页应用程序(单个、大型 DOM)中,这导致性能非常差。
您有什么关于如何在这种情况下首先应用反色滤镜或其他解决方案的想法吗?
请注意,我需要滤镜来完成工作,而不是手动地将特定颜色应用于后代元素,因为我实际上正在过滤一个彩色图像。我在 JS Bin 中使用文本只是为了简单起见。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
<style>
body {
-webkit-filter: invert(100%);
}
.normal {
background: white;
}
.brighter {
background: white;
-webkit-filter: brightness(200%);
}
</style>
</head>
<body>
<div class="normal">normal night mode text</div>
<div class="brighter">brighter night mode text</div>
</body>
</html>