Auto-scroll is abrupt and jarring during rapid typing in Firefox
OS: Windows 11 · Device: Desktop or Laptop Any · Browser: Firefox 120.0 · Keyboard: US
Open case →Scenario
Browsers try to keep the caret visible by scrolling the editable container or the page. During rapid typing—especially near the bottom or right edge—scroll updates can lag, batch, or feel jarring, so the caret temporarily leaves the viewport or the view jumps unexpectedly.
Browsers try to keep the caret visible by scrolling the editable container or the page. During rapid typing—especially near the bottom or right edge—scroll updates can lag, batch, or feel jarring, so the caret temporarily leaves the viewport or the view jumps unexpectedly.
Rich editors often rely on the browser’s built-in “scroll into view” behavior for the active selection. That behavior is not specified in fine detail for contenteditable, and timing differs by engine. Editors that measure layout or virtualize lines may fight the same scroll logic, amplifying jank.
Users lose track of the insertion point; accessibility users may hear updates out of sync with what is visible. Editor frameworks that assume “caret is always visible” can desynchronize internal state from DOM selection.
Blink often scrolls the nearest scrollable ancestor; WebKit may differ when the caret is near replaced elements or soft wraps. Gecko has its own scroll anchoring and undo interactions that can interact with typing near edges.
scrollIntoView / scrollTo on the active range with block: 'nearest' after your own layout pass—coordinate with requestAnimationFrame.overflow-anchor / scroll anchoring awareness when content height changes above the caret.getBoundingClientRect on every input in hot paths.contenteditable inside a max-height container.Visual view of how this scenario connects to its concrete cases and environments. Nodes can be dragged and clicked.
Each row is a concrete case for this scenario, with a dedicated document and playground.
| Case | OS | Device | Browser | Keyboard | Status |
|---|---|---|---|---|---|
| ce-0122-auto-scroll-jarring | Windows 11 | Desktop or Laptop Any | Firefox 120.0 | US | draft |
| ce-0131-auto-scroll-lag-rapid-typing | Windows 11 | Desktop or Laptop Any | Chrome 120.0 | US | draft |
| ce-0161-auto-scroll-performance | Windows 11 | Desktop or Laptop Any | Chrome 120.0 | US | draft |
This matrix shows which browser and OS combinations have documented cases for this scenario. Click on a cell to view the specific case.
| Browser | Windows |
|---|---|
| Chrome | |
| Firefox |
Open a case to see the detailed description and its dedicated playground.
OS: Windows 11 · Device: Desktop or Laptop Any · Browser: Firefox 120.0 · Keyboard: US
Open case →OS: Windows 11 · Device: Desktop or Laptop Any · Browser: Chrome 120.0 · Keyboard: US
Open case →OS: Windows 11 · Device: Desktop or Laptop Any · Browser: Chrome 120.0 · Keyboard: US
Open case →Other scenarios that share similar tags or category.
A known Chromium regression around spellcheck and large contenteditable regions caused severe typing lag—documented for planning workarounds such as spellcheck=false or chunking.
When a contenteditable element has CSS filters applied (blur, brightness, etc.), editing performance may be degraded. Typing may lag, and selection may be slow to update.
When a contenteditable element has CSS will-change property set, performance may be affected. In some cases, it may improve performance by hinting the browser about upcoming changes. In other cases, it may degrade performance by creating unnecessary layers.
When a MutationObserver is attached to a contenteditable element or its parent, the observer callbacks may interfere with editing performance. Frequent DOM mutations during typing can trigger many observer callbacks, causing lag or jank.
When a ResizeObserver is attached to a contenteditable element, the observer may trigger during editing as content changes size. This can cause layout recalculations and visual jumps, especially when the contenteditable has dynamic height.
Have questions, suggestions, or want to share your experience? Join the discussion below.