| <!DOCTYPE html> | |
| <title>@scope - inner @layer</title> | |
| <link rel="help" href="https://drafts.csswg.org/css-cascade-6/#scope-atrule"> | |
| <link rel="help" href="https://drafts.csswg.org/css-cascade-5/#layering"> | |
| <link rel="help" href="https://drafts.csswg.org/css-cascade-5/#scope-scope"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| @scope (.a) { | |
| /* The theme layer wins over the base layer. Note that @layer statements | |
| are allowed here, but aren't affected by the enclosing @scope. */ | |
| @layer base, theme; | |
| @layer theme { | |
| :scope { | |
| z-index: 1; | |
| } | |
| .b { | |
| background-color: green; | |
| } | |
| } | |
| } | |
| @layer base { | |
| .a { | |
| z-index: 0; | |
| } | |
| .a .b { | |
| background-color: red; | |
| } | |
| } | |
| </style> | |
| <main> | |
| <div class=a> | |
| <div class=b> | |
| </div> | |
| </div> | |
| <div class=b></div> | |
| </main> | |
| <script> | |
| test(() => { | |
| let a = document.querySelector('main > .a'); | |
| let b = document.querySelector('main > .a > .b'); | |
| assert_equals(getComputedStyle(a).zIndex, '1'); | |
| assert_equals(getComputedStyle(b).backgroundColor, 'rgb(0, 128, 0)'); | |
| let out_of_scope_b = document.querySelector('main > .b'); | |
| assert_equals(getComputedStyle(out_of_scope_b).backgroundColor, 'rgba(0, 0, 0, 0)'); | |
| }, 'Style rules within @layer are scoped'); | |
| </script> |