【发布时间】:2021-06-21 15:01:51
【问题描述】:
在我正在进行的一个项目中,我有这个 LitElement 组件,它是绝对定位,并根据其反应属性确定其左侧或顶部位置。
我只在 Safari 中遇到了问题,包括 iOS Safari/Chrome/Firefox。该元素已更新其阴影样式,但在视图中它根本没有移动。当我发现当光标悬停在元素上,或退出浏览器视图时,元素会弹出到预期的位置时,我意识到这是一个渲染问题。
我设法用更简单的代码重现了这个问题:
my-elem.ts:
import { LitElement, html, property, customElement, css } from 'lit-element';
@customElement('my-elem')
export class MyElem extends LitElement {
@property({ type: Number, reflect: true })
left: number = 30
static get styles() {
return css`
:host { position: absolute; }
div { position: absolute; }
`;
}
render() {
return html`
<style>
:host { left: ${this.left}px; }
</style>
<div> Hello </div>
`;
}
}
index.html:
<html lang="en">
<head>
<script src="my-elem.ts"></script>
</head>
<body>
<my-elem id="my-elem" left="50"></my-elem>
<button id="move-btn">move</button>
<script>
const elem = document.getElementById('ma-elem');
const moveBtn = document.getElementById('move-btn');
moveBtn.onclick = function() {
elem.left += 30;
}
</script>
</body>
</html>
我发现这只发生在:host 选择器上。如果阴影样式更新了div 的left,它的渲染没有任何问题。
我希望避免由于性能问题而强制浏览器进行布局/绘制。
【问题讨论】:
标签: css safari shadow-dom lit-element