Description
Using dimension bindings on an element will sometimes add an inline style position:relative;
in Firefox. This overrides any other CSS positioning that may be defined on the element. The problem doesn't happen in Chrome.
The code below (borrowed from w3schools.com) reproduces the problem on my system roughly 50% of the time (although you may have to reload 10-20 times to see it, maybe due to page caching). I'm using Svelte 3.22.1 with Rollup, Firefox 75, Windows 10.
The inner div should be positioned to the right side of the outer div. When Svelte sometimes gives it position:relative;
it is positioned to the left.
<script>
import { onMount } from 'svelte';
let clientWidth, clientHeight;
</script>
<style>
.relative {
position: relative;
width: 400px;
height: 200px;
border: 3px solid #73AD21;
}
.absolute {
position: absolute;
top: 80px;
right: 0;
width: 225px;
height: 100px;
border: 3px solid #73AD21;
}
</style>
<h2>position: absolute;</h2>
<p>An element with position: absolute; is positioned relative to the nearest positioned ancestor (instead of positioned relative to the viewport, like fixed):</p>
<div class="relative">This div has position: relative;
<div class="absolute" bind:clientWidth bind:clientHeight>This div has position: absolute; and right: 0;</div>
</div>
EDIT: I can't reproduce this problem in Svelte's REPL. This is another sign (along with the intermittency) that makes me think the bug is lifecycle related. If so then maybe the page loading delays caused by the REPL infrastructure avoid the problem.