138 lines
3 KiB
HTML
138 lines
3 KiB
HTML
<!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>
|