HTML exportparts属性测试实例页面
回到相关文章 »效果:
这段文字会是红色,因为这段文字host中的innerspan转换成了"textspan",和样式匹配了。
这段文字不会是红色,因为在内部的自定义元素中textspan是没法匹配的。
代码:
CSS代码:
c-e::part(textspan) { color: red; } c-e-outer::part(textspan) { color: red; } c-e-inner::part(textspan) { color: red; }
HTML代码:
<template id="c-e-outer-template"> <c-e-inner exportparts="innerspan textspan"></c-e-inner> </template> <template id="c-e-inner-template"> <p part="innerspan"> 这段文字会是红色,因为这段文字host中的innerspan转换成了"textspan",和样式匹配了。 </p> <p part="textspan"> 这段文字不会是红色,因为在内部的自定义元素中textspan是没法匹配的。 </p> </template> <c-e></c-e> <c-e-inner exportparts="innerspan textspan"></c-e-inner> <c-e-outer></c-e-outer>
JS代码:
let innerTemplate = document.getElementById('c-e-inner-template'); let outerTemplate = document.getElementById('c-e-outer-template'); globalThis.customElements.define('c-e-inner', class extends HTMLElement { constructor() { super(); this.attachShadow({ mode: "open" }); this.shadowRoot.appendChild(document.importNode(innerTemplate.content, true)); } }); globalThis.customElements.define('c-e-outer', class extends HTMLElement { constructor() { super(); this.attachShadow({ mode: "open" }); this.shadowRoot.appendChild(document.importNode(outerTemplate.content, true)); } }); globalThis.customElements.define('c-e', class extends HTMLElement { constructor() { super(); this.attachShadow({ mode: "open" }); this.shadowRoot.appendChild(document.createElement('c-e-outer')); } });