<!DOCTYPE html>
<html>
<head>
<title>Variables work in ::before/::after pseudos</title>
<meta rel="author" title="Kevin Babbitt">
<meta rel="author" title="Greg Whitworth">
<link rel="author" title="Microsoft Corporation" href="http://microsoft.com" />
<link rel="author" title="Tab Atkins-Bittner" href="https://xanthir.com/contact/">
<link rel="help" href="http://www.w3.org/TR/css-variables-1/#defining-variables">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
:root {
--color: green;
--color2: red;
}
div::before {
content: '[before]';
}
div::after {
content: '[after]';
}
#div1 {
color: red;
}
#div1::before, #div1::after {
color: var(--color2);
--color2: green;
}
#div2 {
color: var(--color2);
}
#div2::before, #div2::after {
color: var(--color);
}
#div3 {
color: var(--color);
}
#div3::before, #div3::after {
--color: red;
}
</style>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
<span id="control" style="color: green;"></span>
<script>
"use strict";
[...document.querySelectorAll("div")].forEach(function (div) {
test( function () {
const expectedColor = getComputedStyle(document.querySelector("#control")).color;
var actualBeforeColor = window.getComputedStyle(div, ':before').getPropertyValue('color');
var actualAfterColor = window.getComputedStyle(div, ':after').getPropertyValue('color');
assert_equals(actualBeforeColor, expectedColor);
assert_equals(actualAfterColor, expectedColor);
}, div.getAttribute("id"));
});
</script>
</body>
</html>