阴影 dom 样式未显示
shadow dom style not showing
通过此实例化的 Web 组件样式不正确:
connectedCallback() {
const shadowRoot = this.attachShadow({ mode: 'open' });
this.svg = document.createElement('svg');
this.svg.style = `
height: 80px;
width: 80px;
background-color: beige;
`;
shadowRoot.appendChild(this.svg);
}
但是,样式属性在 Chrome DevTools 中显示正确的数据。如果我以这种方式重写逻辑,样式就会显示出来。
connectedCallback() {
const shadowRoot = this.attachShadow({ mode: 'open' });
let htmlHolder = document.createElement('template');
htmlHolder.innerHTML = `<svg></svg>`;
shadowRoot.appendChild(htmlHolder.content.cloneNode(true));
this.svg = shadowRoot.querySelector('svg');
this.svg.style = `
height: 80px;
width: 80px;
background-color: beige;
`;
}
我不确定为什么这两个行为不同。
如果您使用 createElement
定义 SVG 元素,您应该设置特定的 SVG 命名空间,即 http://www.w3.org/2000/svg
。
然后您必须使用 createElementNS()
方法:
this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
通过此实例化的 Web 组件样式不正确:
connectedCallback() {
const shadowRoot = this.attachShadow({ mode: 'open' });
this.svg = document.createElement('svg');
this.svg.style = `
height: 80px;
width: 80px;
background-color: beige;
`;
shadowRoot.appendChild(this.svg);
}
但是,样式属性在 Chrome DevTools 中显示正确的数据。如果我以这种方式重写逻辑,样式就会显示出来。
connectedCallback() {
const shadowRoot = this.attachShadow({ mode: 'open' });
let htmlHolder = document.createElement('template');
htmlHolder.innerHTML = `<svg></svg>`;
shadowRoot.appendChild(htmlHolder.content.cloneNode(true));
this.svg = shadowRoot.querySelector('svg');
this.svg.style = `
height: 80px;
width: 80px;
background-color: beige;
`;
}
我不确定为什么这两个行为不同。
如果您使用 createElement
定义 SVG 元素,您应该设置特定的 SVG 命名空间,即 http://www.w3.org/2000/svg
。
然后您必须使用 createElementNS()
方法:
this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');