Scenarios

A scenario groups multiple cases that describe the same phenomenon across different operating systems, devices, browsers, or keyboard setups.

182 scenarios 308 total cases

IME & Composition

Baseline typing and composition in a simple contenteditable region

1 variant Any Chrome

This case describes a baseline scenario for inspecting how a plain `contenteditable` region behaves

Open scenario β†’

beforeinput and input events have different inputType values

1 variant iOS Safari

During IME composition or in certain browser/IME combinations, the beforeinput event may have a different inputType than the corresponding input event. For example, beforeinput may fire with insertCompositionText while input fires with deleteContentBackward. This mismatch can cause handlers to misinterpret the actual DOM change and requires storing beforeinput's targetRanges for use in input event handling.

Open scenario β†’

Selection mismatch between beforeinput and input events

1 variant Android Chrome for Android

The selection (window.getSelection()) in beforeinput events can differ from the selection in corresponding input events. This mismatch can occur during IME composition, text prediction, or when typing adjacent to formatted elements like links. The selection in beforeinput may include adjacent formatted text, while input selection reflects the final cursor position.

Open scenario β†’

beforeinput event not cancelable during IME composition

1 variant Windows Chrome

beforeinput event not cancelable during IME composition

Open scenario β†’

Browser translation breaks contenteditable editing

1 variant Any Chrome

When browser translation features (like Google Translate) are activated, they manipulate the DOM by replacing text content and injecting elements. This can break contenteditable functionality, causing cursor positioning issues, event handling problems, and IME composition failures.

Open scenario β†’

Composition event lifecycle inconsistencies across browsers

2 variants macOS Safari

Analysis of how out-of-order or missing composition events disrupt editor state synchronization.

Open scenario β†’

getTargetRanges() returns empty array in beforeinput events

1 variant Android Chrome for Android

The getTargetRanges() method in beforeinput events may return an empty array or undefined in various scenarios, including text prediction, certain IME compositions, or specific browser/device combinations. When getTargetRanges() is unavailable, developers must rely on window.getSelection() as a fallback, but this may be less accurate.

Open scenario β†’

Chinese IME backspace deletes entire composition instead of last character

1 variant Android Chrome Mobile

Chinese IME backspace deletes entire composition instead of last character

Open scenario β†’

Japanese IME kanji conversion candidate list positioning issues in Chrome

2 variants Windows macOS Chrome Safari

Japanese IME kanji conversion candidate list positioning issues in Chrome

Open scenario β†’

Thai IME tone mark and vowel positioning errors in Firefox

4 variants Windows Firefox Chrome

Thai IME tone mark and vowel positioning errors in Firefox

Open scenario β†’

IME composition triggers deleteContentBackward and insertText events sequentially in iOS Safari

2 variants iOS Android Safari Chrome

IME composition triggers deleteContentBackward and insertText events sequentially in iOS Safari

Open scenario β†’

Korean IME composition cancelled by Escape key in Edge

2 variants Windows Edge Firefox

Korean IME composition cancelled by Escape key in Edge

Open scenario β†’

Composition events not triggered in iOS Safari with Korean keyboard

1 variant iOS Safari

Composition events not triggered in iOS Safari with Korean keyboard

Open scenario β†’

Japanese IME composition lost when focus changes in Safari

2 variants macOS Windows Safari Chrome

Japanese IME composition lost when focus changes in Safari

Open scenario β†’

Partial character commit when moving focus to another textbox during IME composition

3 variants Windows macOS Chrome Firefox

Partial character commit when moving focus to another textbox during IME composition

Open scenario β†’

Duplicate keydown events with keyCode 229 and 13 when pressing Enter during IME composition

3 variants Windows Chrome Firefox

Duplicate keydown events with keyCode 229 and 13 when pressing Enter during IME composition

Open scenario β†’

Japanese IME number keys select candidates instead of inserting numbers

2 variants Windows macOS Chrome Safari

Japanese IME number keys select candidates instead of inserting numbers

Open scenario β†’

Korean IME composition cancelled by paste operation in Firefox

2 variants Windows Firefox Chrome

Korean IME composition cancelled by paste operation in Firefox

Open scenario β†’

Japanese IME composition cancelled by scrolling on iOS Safari

2 variants iOS Android Safari Chrome

Japanese IME composition cancelled by scrolling on iOS Safari

Open scenario β†’

Chinese IME composition cancelled by Tab key in Firefox

2 variants Windows macOS Firefox Safari

Chinese IME composition cancelled by Tab key in Firefox

Open scenario β†’

IME composition causes duplicate text in headings (WebKit only)

1 variant Windows Chrome

When using IME to input CJK text in heading elements (H1, H2, etc.) in WebKit browsers, pressing Space to confirm composition causes both the raw Pinyin buffer AND the confirmed characters to appear together.

Open scenario β†’

insertFromComposition targetRanges should be trusted even when collapsed in Desktop Safari

3 variants macOS iOS Safari

insertFromComposition targetRanges should be trusted even when collapsed in Desktop Safari

Open scenario β†’

Korean IME composition causes editor crash (Firefox)

1 variant Windows Firefox

On Firefox with Windows 10 and Korean IME, specific key combination during IME composition causes the editor to crash. The crash occurs when typing certain sequences with the Korean IME.

Open scenario β†’

IME composition shows Pinyin in table cells on iOS Safari

1 variant iOS Safari

IME composition shows Pinyin in table cells on iOS Safari

Open scenario β†’

Arabic IME character joining and RTL direction issues in Safari

2 variants macOS Windows Safari Firefox

Arabic IME character joining and RTL direction issues in Safari

Open scenario β†’

Selecting all text delays IME start on Android (Japanese)

1 variant Android Chrome for Android

Selecting all text delays IME start on Android (Japanese)

Open scenario β†’

IME composition shows Pinyin in table cells on iOS Safari

3 variants iOS macOS Windows Safari Firefox

IME composition shows Pinyin in table cells on iOS Safari

Open scenario β†’

IME candidate window appears in wrong position

1 variant macOS Chrome

IME candidate window appears in wrong position

Open scenario β†’

insertParagraph preventDefault breaks IME composition state in Safari

3 variants macOS Safari

In Safari desktop, when preventDefault() is called on keydown or beforeinput events for insertParagraph (Enter key), the IME composition state becomes corrupted. Subsequent text input fails to trigger proper input events, causing characters to not be inserted or composition to malfunction.

Open scenario β†’

iOS dictation triggers duplicate input events after completion

1 variant iOS Safari

On iOS, when using voice dictation to input text into contenteditable elements, the system may fire duplicate beforeinput and input events after the initial dictation completes. The text is split into words and events are re-fired, causing synchronization issues. Composition events do not fire during dictation, making it difficult to distinguish dictation from keyboard input.

Open scenario β†’

Firefox Japanese IME conversion candidate selection interferes with contenteditable selection

1 variant macOS Firefox

Firefox Japanese IME conversion candidate selection interferes with contenteditable selection

Open scenario β†’

Firefox Korean IME composition events fire in wrong order with rapid typing

1 variant Windows Firefox

Firefox Korean IME composition events fire in wrong order with rapid typing

Open scenario β†’

Mac accent menu composition events are inconsistent

1 variant macOS Safari

On macOS, using the accent menu (e.g., holding vowel key to select accented character, or using option+key combinations) does NOT consistently trigger standard IME composition events (`compositionstart`, `compositionupdate`, `compositionend`). This makes it difficult to distinguish accent menu input from IME input or regular keyboard input.

Open scenario β†’

Space key during composition is ignored or committed inconsistently

5 variants Windows Edge Chrome

Space key during composition is ignored or committed inconsistently

Open scenario β†’

IME composition text leaks outside table cells

2 variants macOS Safari

A technical evaluation of why IME composition often fails when anchored inside empty table structures.

Open scenario β†’

Undo during IME composition clears more text than expected

3 variants Windows macOS Chrome Safari

Undo during IME composition clears more text than expected

Open scenario β†’

Formatting

Background color changes behave inconsistently

3 variants Windows Chrome

Changing background color (highlighting) in contenteditable elements behaves inconsistently across browsers. Background colors may be applied as inline styles, may not persist when typing, or may interfere with text selection. The behavior differs from text color changes.

Open scenario β†’

Blockquote editing behavior varies across browsers

4 variants macOS Windows Safari Chrome

Editing text within blockquote elements in contenteditable behaves inconsistently across browsers. Pressing Enter, applying formatting, or pasting content may break the blockquote structure, create nested blockquotes, or behave unexpectedly.

Open scenario β†’

Browser generates inconsistent HTML output for same editing actions

1 variant Any Chrome

Browser generates inconsistent HTML output for same editing actions

Open scenario β†’

Code block editing behavior varies across browsers

4 variants Windows Chrome Firefox

Editing text within code blocks (<pre><code>) in contenteditable elements behaves inconsistently across browsers. Line breaks, indentation, whitespace preservation, and formatting may be handled differently, making it difficult to maintain code formatting.

Open scenario β†’

Empty elements accumulate in DOM during editing

5 variants Windows Chrome Safari

During editing operations, empty elements (empty paragraphs, divs, spans with no content) accumulate in the DOM. These elements can cause layout issues, make the HTML bloated, and create unexpected behavior. Browsers handle empty element cleanup inconsistently.

Open scenario β†’

Enter vs Shift+Enter behavior differs across browsers

1 variant Windows Chrome

The behavior of Enter and Shift+Enter keys in contenteditable elements varies across browsers. Enter may create a new paragraph, line break, or div, while Shift+Enter may create a line break or behave differently. The resulting DOM structure also varies.

Open scenario β†’

execCommand is deprecated but still widely used for formatting

1 variant Any Chrome

The document.execCommand() API, which is commonly used to apply formatting (bold, italic, etc.) in contenteditable regions, has been deprecated. However, there is no complete replacement, and many implementations still rely on it. This creates uncertainty about future browser support.

Open scenario β†’

Font family changes behave inconsistently

3 variants macOS Windows Safari Chrome

Changing font family in contenteditable elements behaves inconsistently across browsers. The font-family CSS property may be applied inline, as a style attribute, or may not be applied at all. The behavior also varies when editing text after applying a font.

Open scenario β†’

Font size changes behave inconsistently

3 variants macOS Windows Safari Chrome

Changing font size in contenteditable elements behaves inconsistently across browsers. Font sizes may be applied as inline styles, as font tags, or may not persist when typing new text. The unit (px, em, rem) handling also varies.

Open scenario β†’

Bold formatting is lost when typing after applying bold

4 variants macOS Windows Linux Safari Chrome

When applying bold formatting to selected text and then continuing to type, the bold formatting is not maintained for the newly typed characters in Safari.

Open scenario β†’

HTML entity encoding and decoding is inconsistent

3 variants Windows Chrome

Special characters in contenteditable elements may be encoded as HTML entities (&lt;, &gt;, &amp;, etc.) or decoded to their actual characters inconsistently across browsers. This can cause issues when copying, pasting, or serializing content.

Open scenario β†’

BR Tag Loss When Typing After Selected Line in Internet Explorer 11

1 variant Windows Internet Explorer

In Internet Explorer 11, typing after selecting a line of text in a contenteditable div can unexpectedly delete the BR tag, causing lines to merge.

Open scenario β†’

Image deletion behavior varies across browsers

3 variants Windows Chrome Firefox

Deleting images from contenteditable elements behaves differently across browsers. Some browsers delete the image cleanly, while others may leave empty elements, break the DOM structure, or require multiple delete operations.

Open scenario β†’

Image insertion behavior varies across browsers

2 variants Windows Chrome

When inserting images into contenteditable elements, the behavior varies significantly across browsers. Images may be inserted as <img> tags, as base64 data URLs, or may not be supported at all. The size, positioning, and editing behavior also differs.

Open scenario β†’

Image resizing in contenteditable is limited or inconsistent

2 variants Windows Chrome

Resizing images within contenteditable elements is limited or behaves inconsistently across browsers. Some browsers support native resize handles, while others require manual implementation. The resize behavior may also affect the DOM structure unexpectedly.

Open scenario β†’

Deleted inline elements recreated when typing in contenteditable

1 variant Windows Chrome

After deleting an empty or inline element (e.g. span, b) inside contenteditable, typing causes the browser to recreate the deleted element, leading to unpredictable DOM and editor state.

Open scenario β†’

insertHTML breaks DOM structure and formatting

1 variant Windows Chrome

When using document.execCommand('insertHTML', ...) to insert HTML content into a contenteditable region, the DOM structure may be broken or reformatted unexpectedly. Nested elements may be flattened or reorganized.

Open scenario β†’

Line break element type varies across browsers

2 variants Windows Chrome Firefox

When creating line breaks in contenteditable elements, browsers use different HTML elements: <br>, <p>, or <div>. This inconsistency makes it difficult to predict and normalize the DOM structure, especially when working with rich text editors.

Open scenario β†’

Link clicks interfere with contenteditable editing

3 variants Windows macOS Chrome Safari

When a link is inside a contenteditable element, clicking on the link may navigate away or trigger unexpected behavior instead of allowing text editing. The behavior varies across browsers and can make it difficult to edit link text or select links for deletion.

Open scenario β†’

Link insertion and editing behavior varies across browsers

3 variants Windows Chrome Firefox

When inserting or editing links in contenteditable elements, the behavior varies significantly across browsers. Creating links, editing link text, and removing links can result in unexpected DOM structures or lost formatting.

Open scenario β†’

List formatting is lost when editing list items

3 variants Windows Chrome Firefox

When editing text within list items, formatting such as bold, italic, or links may be lost or behave unexpectedly. The list structure itself may also be lost when certain operations are performed, such as pasting content or applying formatting.

Open scenario β†’

List item deletion behavior varies across browsers

3 variants Windows Chrome Firefox

When pressing Backspace or Delete at the beginning or end of a list item, the behavior varies significantly across browsers. Some browsers delete the list item and merge with adjacent content, while others may delete the entire list or create unexpected DOM structures.

Open scenario β†’

Nested formatting elements create complex DOM structures

3 variants Windows Chrome Safari

Applying multiple formatting operations (bold, italic, underline, etc.) creates nested HTML elements that can become complex and hard to manage. Browsers handle nested formatting differently, and the resulting DOM structure can be inconsistent.

Open scenario β†’

Unwanted span tags with inline styles created when removing line breaks

1 variant Any Chrome

Unwanted span tags with inline styles created when removing line breaks

Open scenario β†’

Nested list editing behavior is inconsistent

3 variants Windows Chrome Firefox

When editing nested lists (lists within list items), the behavior of Enter, Backspace, Delete, and Tab keys varies significantly across browsers. Creating, editing, and deleting nested list items can result in unexpected DOM structures or lost formatting.

Open scenario β†’

Paste behavior preserves source formatting inconsistently across browsers

1 variant Any Chrome

Paste behavior preserves source formatting inconsistently across browsers

Open scenario β†’

Pasting rich text inserts unwanted formatting

2 variants macOS Linux Safari Chrome

Pasting rich text inserts unwanted formatting

Open scenario β†’

Table editing in contenteditable is limited and inconsistent

5 variants Windows Chrome Safari

Editing tables within contenteditable elements is limited and behaves inconsistently across browsers. Creating tables, editing cells, adding/removing rows and columns, and maintaining table structure all have browser-specific behaviors and limitations.

Open scenario β†’

Text color changes behave inconsistently

2 variants Windows Chrome

Changing text color in contenteditable elements behaves inconsistently across browsers. Colors may be applied as inline styles, as font tags, or may not persist when typing. The color format (hex, rgb, named colors) handling also varies.

Open scenario β†’

Typing adjacent to formatted elements causes unexpected behavior

1 variant Android Chrome for Android

When typing text next to formatted elements (links, bold, italic, etc.) in contenteditable, the input events may include the formatted element's text in event.data, selection ranges may include the formatted element, and text may be inserted into the formatted element instead of after it. This occurs across different browsers and input methods.

Open scenario β†’

Undo/redo stack management is inconsistent

5 variants Windows Chrome

The undo/redo stack in contenteditable elements behaves inconsistently across browsers. Programmatic DOM changes may or may not be added to the undo stack, and the stack may be cleared unexpectedly. Custom undo/redo implementation is often necessary.

Open scenario β†’

Paste & Copy

Caret moves outside viewport during paste operations

1 variant Windows Chrome

Caret moves outside viewport during paste operations

Open scenario β†’

Caret position jumps unexpectedly after pasting content

1 variant Windows Firefox

After pasting content into a contenteditable region, the caret position does not end up at the expected location, sometimes jumping to the beginning of the pasted content or to an unexpected position.

Open scenario β†’

Clipboard API paste does not work in contenteditable

2 variants macOS Windows Chrome Firefox

When using the Clipboard API (navigator.clipboard.readText() or navigator.clipboard.read()) to programmatically paste content into a contenteditable region, the paste operation may fail or not work as expected.

Open scenario β†’

Edge on Linux strips all formatting on paste operations

1 variant Linux Edge

Edge on Linux strips all formatting on paste operations

Open scenario β†’

Paste event does not fire for images in IE11 contenteditable on SharePoint

1 variant Windows Internet Explorer

Paste event does not fire for images in IE11 contenteditable on SharePoint

Open scenario β†’

preventDefault on paste event does not prevent default paste behavior

1 variant Windows Chrome

In Chrome on Windows, calling `preventDefault()` on the `paste` event does not always prevent the default paste behavior. Content may still be pasted despite the prevention.

Open scenario β†’

Pasting rich text into contenteditable strips markup unexpectedly

3 variants Windows macOS Chrome Safari

When pasting content from a rich text source into a contenteditable element, the resulting DOM loses headings, lists, or inline formatting that were present in the source.

Open scenario β†’

Link pasting behavior differs across browsers

1 variant macOS Safari

When pasting links into contenteditable elements, different browsers handle the link data differently. Some browsers paste only the URL, while others preserve the link title and HTML structure.

Open scenario β†’

Pasting images into contenteditable is not supported consistently

1 variant macOS Chrome

When attempting to paste images (from clipboard) into a contenteditable region, the behavior is inconsistent across browsers. Some browsers ignore the paste, while others may insert a placeholder or fail silently.

Open scenario β†’

Trailing whitespaces are removed when pasting text in Firefox

1 variant Windows Firefox

Trailing whitespaces are removed when pasting text in Firefox

Open scenario β†’

Selection

Cursor dismisses and keyboard closes when encountering contenteditable false on Android

1 variant Android Chrome for Android

Cursor dismisses and keyboard closes when encountering contenteditable false on Android

Open scenario β†’

Browser zoom causes caret and selection positioning issues

1 variant Any Firefox

When the browser is zoomed (or content is scaled via CSS transforms), caret position and text selection in contenteditable elements can become inaccurate. Clicking at a certain position places the caret elsewhere, and selection highlights may not match the visual selection.

Open scenario β†’

Text caret is invisible on position:relative elements

2 variants macOS Windows Chrome Firefox

When editing content inside an element with `position:relative`, the text caret (cursor) is completely invisible. Text can be typed and appears in the editor, but there's no visual feedback of where the insertion point is located.

Open scenario β†’

Typing certain characters makes cursor jump on Chrome Mobile

2 variants iOS Windows Safari Firefox

On Chrome Mobile for Android, typing certain punctuation characters (commas, colons, semicolons, quotes, etc.) in the middle of a word causes the cursor to jump to the end of the word instead of staying at the insertion point.

Open scenario β†’

Caret jumps to end when deleting character next to non-editable element

1 variant macOS Firefox

When deleting the last character before a non-editable "pill" or tag element (contenteditable="false") in a contenteditable div in Chrome, the caret (cursor) jumps to the end of the entire contenteditable div instead of staying adjacent to the remaining content.

Open scenario β†’

Contenteditable isolation and selection in Shadow DOM

1 variant macOS All Browsers

Analysis of the architectural friction between the single-selection document model and Web Component encapsulation.

Open scenario β†’

Selection is lost after copying content in contenteditable

1 variant macOS Safari

After copying selected text in a contenteditable region using Cmd+C, the selection is lost in Safari. The user must re-select the text to perform additional operations.

Open scenario β†’

CSS contain property may affect contenteditable selection

1 variant Windows Chrome

When a contenteditable element or its parent has the CSS contain property, selection behavior may be affected. Selection may not extend beyond the contained element, and caret movement may be restricted.

Open scenario β†’

CSS transform may cause selection handles to appear in wrong position

1 variant Windows Edge

When a contenteditable element has CSS transforms applied (translate, scale, rotate), the selection handles and caret may appear in incorrect positions. The visual position may not match the actual selection position.

Open scenario β†’

Caret and text selection remain visible after scrolling in iOS Safari

1 variant iOS Safari

Caret and text selection remain visible after scrolling in iOS Safari

Open scenario β†’

Mobile drag-to-selection creates inconsistent ranges

1 variant iOS Safari

Mobile drag-to-selection creates inconsistent ranges

Open scenario β†’

Selection operations become exponentially slower with large content

1 variant Any Any

Selection operations become exponentially slower with large content

Open scenario β†’

RTL text direction and selection behavior inconsistent in contenteditable

1 variant Windows Chrome

Right-to-left (RTL) and mixed-direction text in contenteditable causes caret misalignment, scroll failures, and select-all behavior that differs from LTR and from spec.

Open scenario β†’

Select All (Ctrl+A) collapses wrong way when non-editable block is first or last child

1 variant macOS Safari

When a contenteditable element has a non-editable block as its first or last child, Ctrl+A (Select All) collapses the selection in the wrong direction instead of selecting all content, breaking WYSIWYG expectations.

Open scenario β†’

selection.addRange not working correctly in Safari

3 variants Windows Chrome Edge (Chromium-based)

When setting cursor position using `selection.addRange()` in a contenteditable element, it works correctly in Chrome and Firefox but fails in Safari. The selection "pops out" of intended marker element and moves to the next sibling's text node instead of staying within the marker.

Open scenario β†’

window.getSelection() returns null when contenteditable loses focus

1 variant macOS Safari

When a contenteditable region loses focus, window.getSelection() may return null in Safari, even if there was a valid selection before the focus loss. This makes it difficult to preserve or work with selections.

Open scenario β†’

Selection collapses unexpectedly when clicking outside contenteditable

1 variant macOS Safari

When a range of text is selected inside a `contenteditable` element, clicking outside the element

Open scenario β†’

Selection range is incorrect when selecting across multiple elements

1 variant Windows Edge

When selecting text that spans across multiple HTML elements (e.g., p, div, span) in a contenteditable region, the selection range may not accurately reflect the visual selection. The Selection and Range APIs may return incorrect boundaries.

Open scenario β†’

Selection restoration after DOM manipulation is unreliable

5 variants Windows macOS Chrome Firefox

After programmatically manipulating the DOM in a contenteditable element, restoring the text selection (cursor position) is unreliable across browsers. The selection may be lost, moved to an incorrect position, or become invalid.

Open scenario β†’

Caret & Navigation

Dark mode causes caret visibility and styling issues

1 variant Any Chrome

When browser dark mode is enabled, contenteditable elements may experience invisible or poorly visible caret, inline style injection conflicts, background color issues, and form control styling problems. These issues are caused by missing color-scheme declarations and conflicts between browser-injected styles and custom CSS.

Open scenario β†’

Arrow keys move by word instead of character when modifier is not pressed

1 variant Windows Chrome

In Chrome on Windows, arrow keys may move the caret by word instead of by character, even when no modifier keys are pressed. This makes precise cursor positioning difficult.

Open scenario β†’

Arrow keys skip over emoji in contenteditable

2 variants macOS Windows Chrome Edge

When using the left and right arrow keys in a `contenteditable` element that contains emoji, the

Open scenario β†’

Caret jumps to end when DOM is manipulated during input in Chrome

1 variant Any Chrome

Caret jumps to end when DOM is manipulated during input in Chrome

Open scenario β†’

Caret does not appear in empty contenteditable div in Firefox

1 variant Any Firefox

Caret does not appear in empty contenteditable div in Firefox

Open scenario β†’

Framework state synchronization issues with contenteditable

1 variant Any Safari

When using contenteditable with JavaScript frameworks like Vue, Angular, or Svelte, state synchronization between the DOM and framework state can cause caret position issues, event mismatches, and performance problems. Each framework has unique challenges when integrating with contenteditable.

Open scenario β†’

Caret position jumps to beginning on React re-render

1 variant Any Safari

When using contentEditable elements in React, the caret (cursor) position jumps to the beginning of the element whenever the component re-renders. This occurs because React's reconciliation process replaces DOM nodes, causing the browser to lose track of the caret position. This issue is more prevalent in Safari and Firefox.

Open scenario β†’

Mobile & Touch

Input Events Fire on Focus/Blur in Chrome Android

1 variant Android Chrome for Android

In Chrome on Android, input events may fire when a contenteditable element gains or loses focus, even without content changes. This behavior can lead to unintended side effects in applications relying on input events for content modification detection.

Open scenario β†’

CSS backdrop-filter may cause rendering issues in contenteditable

1 variant iOS Safari

When a contenteditable element has CSS backdrop-filter applied, rendering may be affected. Text may appear blurry, selection may not render correctly, and performance may be degraded, especially on mobile devices.

Open scenario β†’

enterkeyhint attribute does not work on contenteditable

1 variant Android Chrome

The enterkeyhint attribute, which controls the label on the Enter key on mobile keyboards, does not work on contenteditable elements. The Enter key label remains the default regardless of the attribute value.

Open scenario β†’

enterkeyhint and inputmode affect Enter key behavior inconsistently

1 variant iOS Safari

On mobile devices, the combination of enterkeyhint and inputmode attributes may affect Enter key behavior inconsistently on contenteditable elements. The Enter key may insert line breaks when it should perform an action, or vice versa.

Open scenario β†’

inputmode attribute does not affect virtual keyboard on mobile

1 variant iOS Safari

The `inputmode` attribute, which should control the type of virtual keyboard shown on mobile devices, does not work on contenteditable regions in iOS Safari. The keyboard type cannot be controlled.

Open scenario β†’

iPhone keyboard hides text when entering on contenteditable

1 variant Android Chrome for Android

On iPhone/iPad Safari, when entering text or pressing "return" multiple times in a contenteditable element, the software keyboard appears but hides the text being typed. The page doesn't auto-scroll to keep text visible. Works fine on Android and other browsers.

Open scenario β†’

Broken viewport mechanics when software keyboard is visible (iOS Safari)

1 variant iOS Chrome (iOS)

On iOS Safari, when the software keyboard becomes visible, viewport calculations become unreliable. `position:fixed` elements break, `height` returns incorrect values, and absolute positioning with `top`/`bottom` fails. This severely affects editors with floating toolbars or positioned elements.

Open scenario β†’

Media query layout changes may disrupt contenteditable editing

1 variant Android Chrome Mobile

When a page with a contenteditable element responds to media query changes (e.g., orientation change, window resize), the layout changes may disrupt editing. The caret position may jump, and selection may be lost.

Open scenario β†’

On-screen keyboard does not appear when focusing contenteditable on mobile

1 variant iOS Safari

On-screen keyboard does not appear when focusing contenteditable on mobile

Open scenario β†’

Virtual keyboard on mobile scrolls contenteditable out of view

1 variant iOS Safari

Virtual keyboard on mobile scrolls contenteditable out of view

Open scenario β†’

Touch events interfere with contenteditable focus on mobile

4 variants iOS Android Safari Chrome

On iOS Safari, touch events (tap, long-press) on a contenteditable region may not properly focus the element. The virtual keyboard may not appear, or focus may be lost unexpectedly.

Open scenario β†’

Virtual keyboard resize causes viewport and selection loss

1 variant Android Chrome Mobile

Virtual keyboard resize causes viewport and selection loss

Open scenario β†’

Backspace with Samsung Keyboard causes editor crash

1 variant Android Chrome for Android

On Android with Samsung Keyboard, holding the backspace key to delete text causes the contenteditable editor to crash completely. JavaScript execution stops and page becomes unresponsive.

Open scenario β†’

Samsung Keyboard Text Prediction Issues in contenteditable

1 variant Android Chrome for Android

Samsung keyboard's text prediction feature causes various input event handling issues in contenteditable elements on Android Chrome, including insertCompositionText events, missing getTargetRanges(), selection mismatches, and combined event.data when typing adjacent to links or formatted elements.

Open scenario β†’

Touch selection handles are difficult to use on mobile devices

1 variant iOS Safari

On mobile devices, selecting text in a contenteditable region using touch is difficult. The selection handles are small and hard to grab, and the selection range may change unexpectedly when trying to adjust it.

Open scenario β†’

Performance

Auto-scroll is abrupt and jarring during rapid typing in Firefox

3 variants Windows Firefox Chrome

Auto-scroll is abrupt and jarring during rapid typing in Firefox

Open scenario β†’

Grammarly extension interferes with contenteditable editing

1 variant Any Chrome

Grammarly extension interferes with contenteditable editing

Open scenario β†’

Chrome v96 performance regression with spell checking in large contenteditable

1 variant Any Chrome

Chrome v96 performance regression with spell checking in large contenteditable

Open scenario β†’

CSS filter may affect contenteditable performance

1 variant macOS Chrome

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.

Open scenario β†’

CSS will-change may improve or degrade contenteditable performance

1 variant macOS Chrome

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.

Open scenario β†’

Memory leaks in contenteditable with large documents and frequent DOM operations

1 variant Any Chrome

Memory leaks in contenteditable with large documents and frequent DOM operations

Open scenario β†’

MutationObserver may interfere with contenteditable editing

1 variant macOS Safari

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.

Open scenario β†’

Performance Foundations: Complexity, Memory, and Thrashing

1 variant macOS Safari

Managing exponential slowdowns in large documents and browser-specific engine thrashing.

Open scenario β†’

Typing becomes slow with large contenteditable content

1 variant Any Chrome

Typing becomes slow with large contenteditable content

Open scenario β†’

ResizeObserver may cause layout shifts during contenteditable editing

1 variant Windows Chrome

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.

Open scenario β†’

Virtual scrolling libraries interfere with contenteditable selection

1 variant macOS Chrome

When a contenteditable element is used with virtual scrolling libraries (e.g., for large documents), the virtual scrolling mechanism may interfere with text selection and caret positioning. The selection may be lost when elements are removed from the DOM during scrolling.

Open scenario β†’

Focus & Blur

autofocus attribute does not work on contenteditable

1 variant Windows Chrome

The autofocus attribute, which automatically focuses form inputs on page load, does not work on contenteditable elements. There is no built-in way to automatically focus a contenteditable region when a page loads.

Open scenario β†’

Focus is lost when clicking on certain elements within contenteditable

1 variant Windows Firefox

When a contenteditable region contains interactive elements (buttons, links, etc.), clicking on these elements causes the contenteditable to lose focus. This interrupts the editing flow and may cause the caret to disappear.

Open scenario β†’

Programmatic focus selects all content

1 variant macOS Chrome or Safari

In Chrome and Safari, calling focus() on a contenteditable div can select the entire content instead of placing the cursor at the beginning, as observed in Firefox and IE.

Open scenario β†’

Fullscreen API may affect contenteditable focus and selection

1 variant Windows Chrome

When a contenteditable element enters or exits fullscreen mode using the Fullscreen API, focus and selection may be lost. The caret position may reset, and editing may be disrupted.

Open scenario β†’

Nested contenteditable elements cause focus and selection issues

1 variant Any Chrome

When a contenteditable element contains another contenteditable element, focus behavior becomes unpredictable. Clicking on the nested element may not properly focus it, and selection ranges may span across both elements incorrectly.

Open scenario β†’

Page Visibility API may affect contenteditable during tab switches

1 variant macOS Safari

When a page with a contenteditable element becomes hidden (tab switch, minimize), the Page Visibility API may affect editing state. Focus may be lost, and composition may be interrupted.

Open scenario β†’

tabindex attribute does not control focus order correctly

1 variant Windows Edge

When multiple contenteditable regions have `tabindex` attributes, the tab order may not follow the `tabindex` values correctly in Edge. The focus order may be inconsistent or incorrect.

Open scenario β†’

Cannot focus on contenteditable table cell in Internet Explorer

1 variant Windows Internet Explorer

Cannot focus on contenteditable table cell in Internet Explorer

Open scenario β†’

WebKit contenteditable Focus Bug

1 variant macOS Safari

A known bug in WebKit browsers prevents focus from transferring correctly from contenteditable elements to non-editable elements. A workaround involves using a hidden input field to manage focus transitions.

Open scenario β†’

Other

beforeinput event is not supported in Safari

1 variant macOS Safari

The beforeinput event, which is crucial for intercepting and modifying input before it's committed to the DOM, is not supported in Safari. This makes it difficult to implement custom input handling that works across all browsers.

Open scenario β†’

Code block loses indentation when typing in contenteditable pre tag

1 variant Any Chrome

Code block loses indentation when typing in contenteditable pre tag

Open scenario β†’

contenteditable behavior differs when inside an iframe

1 variant Windows Edge

When a contenteditable region is inside an iframe, its behavior may differ from when it's in the main document. Selection, focus, and event handling may be inconsistent.

Open scenario β†’

contenteditable inheritance behavior is inconsistent

1 variant Windows Firefox

When a parent element has contenteditable="true" and a child element has contenteditable="false", the inheritance behavior is inconsistent across browsers. Some browsers allow editing in the child, while others correctly prevent it. The behavior may also differ when the child has contenteditable="inherit" or no contenteditable attribute.

Open scenario β†’

contenteditable="false" on child elements is not respected consistently

1 variant Any Chrome

When a contenteditable region contains child elements with contenteditable="false", the behavior is inconsistent. Some browsers allow editing within these elements, while others correctly prevent it.

Open scenario β†’

contenteditable in table cells causes layout issues

1 variant Windows Firefox

When a contenteditable region is inside a table cell (`<td>`), editing the content may cause layout issues in Firefox. The table may resize unexpectedly or the cell may overflow.

Open scenario β†’

CORS restrictions may affect contenteditable in cross-origin iframes

1 variant macOS Safari

When a contenteditable element is inside a cross-origin iframe, CORS restrictions may prevent certain operations. Accessing the contenteditable from the parent frame may be blocked, and some editing operations may be restricted.

Open scenario β†’

Content Security Policy may restrict contenteditable behavior

1 variant Windows Chrome

When a page has a strict Content Security Policy (CSP), certain contenteditable operations may be restricted. Pasting content, executing scripts, or inserting HTML may be blocked depending on the CSP directives.

Open scenario β†’

CSS isolation property may affect contenteditable stacking context

1 variant macOS Safari

When a contenteditable element has the CSS isolation: isolate property, it creates a new stacking context. This may affect how selection handles and IME candidate windows are positioned relative to the element.

Open scenario β†’

CSS mix-blend-mode may affect contenteditable text rendering

1 variant Windows Firefox

When a contenteditable element has CSS mix-blend-mode applied, text rendering may be affected. Text may appear with incorrect colors, selection may not be visible, and caret may not render correctly.

Open scenario β†’

Delete key behavior is inconsistent with Backspace

1 variant Linux Firefox

In Firefox on Linux, the Delete key behaves differently from Backspace in ways that are inconsistent. Delete may remove different amounts of text or behave unexpectedly compared to Backspace.

Open scenario β†’

disabled attribute does not disable contenteditable

1 variant macOS Safari

The `disabled` attribute, which disables form inputs, does not work on contenteditable regions in Safari. The contenteditable remains editable and interactive even when `disabled` is set.

Open scenario β†’

Pressing Enter inserts two line breaks in contenteditable

2 variants macOS macOSLinuxWindows Safari ChromeEdgeOpera

In a plain `contenteditable` element, pressing Enter inserts two visible line breaks instead of one.

Open scenario β†’

Drag and Drop API behavior differs in contenteditable

1 variant macOS Chrome

Drag and Drop API behavior differs in contenteditable

Open scenario β†’

Dragging contenteditable="false" elements causes duplication in Firefox

1 variant Windows Firefox

Dragging contenteditable="false" elements causes duplication in Firefox

Open scenario β†’

Empty paragraphs handled differently across browsers

1 variant Any Chrome

Empty paragraphs handled differently across browsers

Open scenario β†’

File API drag and drop does not work in contenteditable

1 variant macOS Safari

When trying to drag and drop files into a contenteditable element, the File API may not work as expected. File drop events may not fire, or file content may not be accessible.

Open scenario β†’

Cursor disappears when clicking on contenteditable with non-editable children in Firefox

1 variant Any Firefox

Cursor disappears when clicking on contenteditable with non-editable children in Firefox

Open scenario β†’

Firefox undo/redo stack corrupted by DOM mutations during input

1 variant Windows Firefox

Firefox undo/redo stack corrupted by DOM mutations during input

Open scenario β†’

contenteditable content is not included in form submission

1 variant macOS Chrome

When a contenteditable region is inside a form, its content is not automatically included in form submission. Unlike input and textarea, contenteditable content must be manually extracted and added to the form data.

Open scenario β†’

Non-editable elements become editable on double-click in IE11

1 variant Windows Internet Explorer

Non-editable elements become editable on double-click in IE11

Open scenario β†’

lang attribute does not affect spellcheck language

1 variant macOS Safari

The `lang` attribute on a contenteditable region does not affect the spellcheck language in Safari. Spellcheck always uses the browser's default language, regardless of the `lang` attribute value.

Open scenario β†’

Linux font rendering inconsistencies with contenteditable

1 variant Linux Edge

Linux font rendering inconsistencies with contenteditable

Open scenario β†’

Fcitx Korean IME loses composition state during rapid typing in Chrome

1 variant Linux Chrome

Fcitx Korean IME loses composition state during rapid typing in Chrome

Open scenario β†’

Firefox Linux Korean Hangul IME combines characters incorrectly

1 variant Linux Firefox

Firefox Linux Korean Hangul IME combines characters incorrectly

Open scenario β†’

maxlength attribute is not supported on contenteditable

1 variant Windows Chrome

The `maxlength` attribute, which works on `<input>` and `<textarea>` elements, is not supported on contenteditable regions. There is no built-in way to limit the amount of content that can be entered.

Open scenario β†’

ProseMirror: splitBlock crashes on specific node nesting

1 variant Windows All Browsers

ProseMirror: splitBlock crashes on specific node nesting

Open scenario β†’

pattern attribute does not validate contenteditable content

1 variant Windows Firefox

The `pattern` attribute, which allows regex-based validation on form inputs, does not work on contenteditable regions. Content cannot be validated against a pattern.

Open scenario β†’

readonly attribute does not prevent editing in contenteditable

1 variant Linux Firefox

The `readonly` attribute, which should prevent editing on form inputs, does not work on contenteditable regions in Firefox. Users can still edit the content even when `readonly` is set.

Open scenario β†’

required attribute is not supported for validation

1 variant Windows Chrome

The required attribute, which works on form inputs to indicate mandatory fields, is not supported on contenteditable regions. There is no built-in way to mark a contenteditable as required for form validation.

Open scenario β†’

Samsung Keyboard Link Boundary Node Splitting and Escaping

1 variant Android Chrome for Android

Samsung Keyboard Link Boundary Node Splitting and Escaping

Open scenario β†’

Spellcheck suggestions interfere with contenteditable editing

1 variant macOS Safari

Spellcheck suggestions interfere with contenteditable editing

Open scenario β†’

Undo and redo behavior is inconsistent across browsers

2 variants Windows macOS Edge Safari

The undo and redo functionality (Ctrl+Z / Ctrl+Y or Cmd+Z / Cmd+Shift+Z) behaves differently across browsers. Some browsers undo individual keystrokes, while others undo larger operations. The undo stack may also be cleared unexpectedly.

Open scenario β†’

Undo/redo stack does not include programmatic DOM changes

1 variant Any Chrome

Undo/redo stack does not include programmatic DOM changes

Open scenario β†’

contenteditable behavior differs inside Web Components

1 variant Windows Chrome

When a contenteditable element is inside a Web Component (custom element), its behavior may differ from when it's in standard HTML. Event handling, selection, and focus management may be affected by the component's shadow DOM or encapsulation.

Open scenario β†’

XSS protection may interfere with contenteditable HTML insertion

1 variant Windows Edge

Browser XSS protection mechanisms may interfere with programmatic HTML insertion in contenteditable elements. Script tags or event handlers inserted via innerHTML or similar methods may be stripped or sanitized.

Open scenario β†’