| <!DOCTYPE html> | |
| <link rel="author" title="David Shin" href="mailto:dshin@mozilla.com"> | |
| <link rel="help" href="drafts.csswg.org/css-cascade-6/#scoped-styles"> | |
| <link rel="help" href="https://drafts.csswg.org/css-shadow-parts/#part"> | |
| <link rel="match" href="scope-part-ref.html"> | |
| <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1908279"> | |
| <meta name="assert" content="Implicit @scope rule lets ::part selector to match inside the shadow tree"> | |
| <template id="custom-element"> | |
| <style> | |
| :host { | |
| display: block; | |
| } | |
| div { | |
| padding: 5px; | |
| } | |
| </style> | |
| <slot></slot> | |
| <div part="a"></div> | |
| <div part="b"></div> | |
| </template> | |
| <template id="custom-element-wrapper"> | |
| <style> | |
| :host { | |
| display: block; | |
| } | |
| div { | |
| padding: 5px; | |
| } | |
| </style> | |
| <custom-element exportparts="a"></custom-element> | |
| </template> | |
| <custom-element> | |
| <style> | |
| @scope { | |
| :scope { | |
| background: red; | |
| } | |
| } | |
| </style> | |
| </custom-element> | |
| <custom-element> | |
| <style> | |
| @scope { | |
| :scope::part(a), :scope::part(b) { | |
| background: blue; | |
| } | |
| } | |
| </style> | |
| </custom-element> | |
| <custom-element> | |
| <style> | |
| @scope { | |
| :scope::part(a), :scope::part(b) { | |
| background: red; | |
| } | |
| } | |
| </style> | |
| <custom-element> | |
| <style> | |
| @scope { | |
| :scope::part(a), :scope::part(b) { | |
| background: blue; | |
| } | |
| } | |
| </style> | |
| </custom-element> | |
| </custom-element> | |
| <custom-element-wrapper> | |
| <style slot="s"> | |
| @scope { | |
| :scope::part(a) { | |
| background: blue; | |
| } | |
| :scope::part(b) { | |
| background: red; | |
| } | |
| } | |
| </style> | |
| </custom-element-wrapper> | |
| <div> | |
| <template shadowrootmode=open> | |
| <!-- Inside a shadow root --> | |
| <custom-element-wrapper> | |
| <style slot="a"> | |
| @scope { | |
| :scope::part(a) { | |
| background: blue; | |
| } | |
| } | |
| </style> | |
| </custom-element-wrapper> | |
| </template> | |
| </div> | |
| <div> | |
| <template shadowrootmode=open> | |
| <!-- Shadow root & host at the same time --> | |
| <div style="padding: 5px;"> | |
| <template shadowrootmode=open> | |
| <div></div> | |
| </template> | |
| <style> | |
| @scope { | |
| :scope { | |
| background: red; | |
| } | |
| } | |
| </style> | |
| </div> | |
| </template> | |
| </div> | |
| <script> | |
| customElements.define( | |
| "custom-element", | |
| class extends HTMLElement { | |
| constructor() { | |
| super(); | |
| let template = document.getElementById("custom-element"); | |
| let templateContent = template.content; | |
| const shadowRoot = this.attachShadow({ mode: "open" }); | |
| shadowRoot.appendChild(templateContent.cloneNode(true)); | |
| } | |
| }, | |
| ); | |
| customElements.define( | |
| "custom-element-wrapper", | |
| class extends HTMLElement { | |
| constructor() { | |
| super(); | |
| let template = document.getElementById("custom-element-wrapper"); | |
| let templateContent = template.content; | |
| const shadowRoot = this.attachShadow({ mode: "open" }); | |
| shadowRoot.appendChild(templateContent.cloneNode(true)); | |
| } | |
| }, | |
| ); | |
| </script> |