似乎CSS過濾器不遵循與其他CSS屬性相同的規則,包括覆蓋和應用程序的順序。CSS過濾器應用程序訂單
首先,它們只能被後代元素中的過濾器重疊,不能重寫(替換)。其次,改變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>
當你談論完全不同的元素(在這種情況下,祖先與後代)時,覆蓋和應用順序是完全不相關的。對於任何CSS屬性都是如此,包括過濾器。 – BoltClock
@BoltClock通過覆蓋我的意思是替代繼承自後代的祖先的CSS屬性。我可以使用其他CSS屬性來完成此操作,但不能使用過濾器。按照應用順序,我的意思是在反轉後應用亮度。使用這些定義他們是非常相關的。 – fearlessbryan