通过此方法实例化的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;
`;
}
我不确定这两个为什么表现不同。
答案 0 :(得分:1)
如果使用createElement
定义SVG元素,则应设置特定的SVG名称空间http://www.w3.org/2000/svg
。
然后必须使用createElementNS()
方法:
this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');