Scrollbar position jumps when selecting closing bracket on mobile #1499
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Describe the issue
When I place a code mirror text editor on my page completely at the top, there is no problem when it comes to the scrollbar position jumping.
https://github.com/user-attachments/assets/10ac8308-bcd0-409d-ae45-1a47c9cdaea3
However when I give element that code mirror is attached to a any margin-top, the scrollbar position jumps somewhere above when selecting the last closing bracket of the code inside the code mirror element.
https://github.com/user-attachments/assets/5c5d5a3a-ca77-4390-8e93-8767ed0831a2
In the example above the code mirror element was given a margin-top of 20px. Below there is another example where the code mirror element was given a margin-top of 100px.
https://github.com/user-attachments/assets/8123764d-787a-4514-8e1d-9edd57f58400
In the video examples that I gave I was running code mirror in a Vue application and the exact code that I used is as follows:
Browser and platform
Samsung S22 Ultra, Android 14, Chrome 131.0.06778.200
Reproduction link
No response
I can reproduce this. It only happens with bracket matching enabled. The scroll position jump seems to happen a little after CodeMirror finishes updating the DOM (not even in the same frame). This suggests the browser is doing something on its own timeline, though I'm not sure what. I'd guess the browser somehow decides it needs to scroll the DOM change caused by highlighting the bracket at the start into view, but since it doesn't generally do this for all changes (for example the removing of the highlighting doesn't cause a similar issue) I suppose there's more going on.
Looking into this some more, I'm rather certain it's a bug in Chrome (none of the CodeMirror code is initiating a scroll, and the way the resulting scroll position depends on the margin makes no sense). I wasn't able to set up a self-contained script that reproduces it though, so I don't really have a way to report it to the Chrome team.
@marijnh is there a way to disable bracket matching?
Yes—don't include the
matchBracketsextension.Chrome
https://github.com/user-attachments/assets/3bb27028-2d02-4f46-b46d-8d6b52d7e072
Firefox
https://github.com/user-attachments/assets/ab2ac8ae-ea20-484d-81b3-0dbca399db9f