html
React Strict DOM provides cross-platform components based on HTML.
On native, the expected default layout of block-level elements is polyfilled but there is no support for flow layout, grid layout, or inline flexbox layout. This can result in unexpected layout of text relative to web, and currently precludes the possibility of using inline, inline-block, or inline-flex display values.
Overview
Components and props are a strict subset of the HTML components and props provided by React DOM. To learn more about each of the html components, please refer to the guides below.
- html.*
- html.a
- html.button
- html.img
- html.input
- html.label
- html.li
- html.optgroup
- html.option
- html.select
- html.textarea
Compatibility
The following tables represent the compatibility status of the strict HTML API surface for cross-platform React development with React Strict DOM. All the APIs listed below are considered supported on Web.
✅ = React Native built-in support
🟡 = Polyfilled in JavaScript
❌ = No support
| Tags | Android | iOS | Issue # |
|---|---|---|---|
| a | 🟡 | 🟡 | |
| article | 🟡 | 🟡 | |
| aside | 🟡 | 🟡 | |
| b | 🟡 | 🟡 | |
| bdi | 🟡 | 🟡 | |
| bdo | 🟡 | 🟡 | |
| blockquote | 🟡 | 🟡 | |
| br | 🟡 | 🟡 | |
| button | 🟡 | 🟡 | |
| code | 🟡 | 🟡 | |
| dialog | ❌ | ❌ | #5 |
| del | 🟡 | 🟡 | |
| div | 🟡 | 🟡 | |
| em | 🟡 | 🟡 | |
| footer | 🟡 | 🟡 | |
| form | ❌ | ❌ | #6 |
| h1-6 | 🟡 | 🟡 | |
| header | 🟡 | 🟡 | |
| hr | 🟡 | 🟡 | |
| i | 🟡 | 🟡 | |
| img | 🟡 | 🟡 | |
| input | 🟡 | 🟡 | |
| input[type="checkbox"] | ❌ | ❌ | #11 |
| input[type="color"] | ❌ | ❌ | #12 |
| input[type="date"] | ❌ | ❌ | #13 |
| input[type="file"] | ❌ | ❌ | #14 |
| input[type="radio"] | ❌ | ❌ | #15 |
| ins | 🟡 | 🟡 | |
| kbd | 🟡 | 🟡 | |
| label | 🟡 | 🟡 | |
| li | 🟡 | 🟡 | |
| main | 🟡 | 🟡 | |
| mark | 🟡 | 🟡 | |
| nav | 🟡 | 🟡 | |
| ol | 🟡 | 🟡 | |
| optgroup | ❌ | ❌ | #7 |
| option | ❌ | ❌ | #8 |
| p | 🟡 | 🟡 | |
| pre | 🟡 | 🟡 | |
| progress | ❌ | ❌ | #9 |
| s | 🟡 | 🟡 | |
| section | 🟡 | 🟡 | |
| select | ❌ | ❌ | #10 |
| span | 🟡 | 🟡 | |
| strong | 🟡 | 🟡 | |
| sub | 🟡 | 🟡 | |
| sup | 🟡 | 🟡 | |
| svg | ❌ | ❌ | #4 |
| textarea | 🟡 | 🟡 | |
| u | 🟡 | 🟡 | |
| ul | 🟡 | 🟡 |
| Props | Android | iOS | Issue # |
|---|---|---|---|
| alt (img) | 🟡 | 🟡 | |
| aria-activedescendant | ❌ | ❌ | |
| aria-atomic | ❌ | ❌ | |
| aria-autocomplete | ❌ | ❌ | |
| aria-busy | 🟡 | 🟡 | |
| aria-checked | 🟡 | 🟡 | |
| aria-colcount | ❌ | ❌ | |
| aria-colindex | ❌ | ❌ | |
| aria-colindextext | ❌ | ❌ | |
| aria-colspan | ❌ | ❌ | |
| aria-controls | ❌ | ❌ | |
| aria-current | ❌ | ❌ | |
| aria-describedby | 🟡 | 🟡 | |
| aria-details | ❌ | ❌ | |
| aria-disabled | 🟡 | 🟡 | |
| aria-errormessage | ❌ | ❌ | |
| aria-expanded | 🟡 | 🟡 | |
| aria-flowto | ❌ | ❌ | |
| aria-haspopup | ❌ | ❌ | |
| aria-hidden | 🟡 | 🟡 | |
| aria-invalid | ❌ | ❌ | |
| aria-keyshortcuts | ❌ | ❌ | |
| aria-label | 🟡 | 🟡 | |
| aria-labelledby | 🟡 | 🟡 | |
| aria-level | ❌ | ❌ | |
| aria-live | 🟡 | 🟡 | |
| aria-modal | 🟡 | 🟡 | |
| aria-multiline | ❌ | ❌ | |
| aria-multiselectable | ❌ | ❌ | |
| aria-orientation | ❌ | ❌ | |
| aria-owns | ❌ | ❌ | |
| aria-placeholder | ❌ | ❌ | |
| aria-posinset | 🟡 | 🟡 | |
| aria-pressed | ❌ | ❌ | |
| aria-readonly | ❌ | ❌ | |
| aria-required | ❌ | ❌ | |
| aria-roledescription | ❌ | ❌ | |
| aria-rowcount | ❌ | ❌ | |
| aria-rowindex | ❌ | ❌ | |
| aria-rowindextext | ❌ | ❌ | |
| aria-rowspan | ❌ | ❌ | |
| aria-selected | 🟡 | 🟡 | |
| aria-setsize | 🟡 | 🟡 | |
| aria-sort | ❌ | ❌ | |
| aria-valuemax | 🟡 | 🟡 | |
| aria-valuemin | 🟡 | 🟡 | |
| aria-valuenow | 🟡 | 🟡 | |
| aria-valuetext | 🟡 | 🟡 | |
| autoComplete (input) | 🟡 | 🟡 | |
| autoComplete (textarea) | 🟡 | 🟡 | |
| autoFocus | ❌ | ❌ | |
| checked (input) | ❌ | ❌ | |
| crossOrigin (img) | 🟡 | 🟡 | |
| data-testid | 🟡 | 🟡 | |
| data-* | ❌ | ❌ | |
| decoding (img) | ❌ | ❌ | |
| defaultChecked (input) | ❌ | ❌ | |
| defaultValue (input) | ❌ | ❌ | |
| dir | 🟡 | 🟡 | |
| disabled (button) | 🟡 | 🟡 | |
| disabled (input) | 🟡 | 🟡 | |
| disabled (textarea) | 🟡 | 🟡 | |
| download (a) | ❌ | ❌ | |
| draggable (img) | ❌ | ❌ | |
| elementTiming | ❌ | ❌ | |
| enterKeyHint (input) | 🟡 | 🟡 | |
| enterKeyHint (textarea) | 🟡 | 🟡 | |
| fetchPriority (img) | ❌ | ❌ | |
| for (label) | ❌ | ❌ | |
| height (img) | 🟡 | 🟡 | |
| hidden | 🟡 | 🟡 | |
| href (a) | ❌ | ❌ | |
| id | 🟡 | 🟡 | |
| inert | ❌ | ❌ | |
| inputMode (input) | 🟡 | 🟡 | |
| inputMode (textarea) | 🟡 | 🟡 | |
| label (option) | ❌ | ❌ | |
| label (optgroup) | ❌ | ❌ | |
| lang | ❌ | ❌ | |
| loading (img) | ❌ | ❌ | |
| max (input) | ❌ | ❌ | |
| max (textarea) | ❌ | ❌ | |
| maxLength (input) | ✅ | ✅ | |
| maxLength (textarea) | ✅ | ✅ | |
| min (input) | ❌ | ❌ | |
| min (textarea) | ❌ | ❌ | |
| minLength (input) | ❌ | ❌ | |
| minLength (textarea) | ❌ | ❌ | |
| multiple (select) | ❌ | ❌ | |
| name (input) | ❌ | ❌ | |
| name (select) | ❌ | ❌ | |
| name (textarea) | ❌ | ❌ | |
| onAuxClick | ❌ | ❌ | #38 |
| onBeforeInput (input) | ❌ | ❌ | #38 |
| onBeforeInput (select) | ❌ | ❌ | #38 |
| onBeforeInput (textarea) | ❌ | ❌ | #38 |
| onBlur | ❌ | ❌ | #38 |
| onChange (input) | ✅ | ✅ | #38 |
| onChange (select) | ❌ | ❌ | #38 |
| onChange (textarea) | ✅ | ✅ | #38 |
| onClick | ❌ | ❌ | #38 |
| onContextMenu | ❌ | ❌ | #38 |
| onCopy | ❌ | ❌ | #38 |
| onCut | ❌ | ❌ | #38 |
| onError (img) | 🟡 | 🟡 | #38 |
| onFocus | ❌ | ❌ | #38 |
| onGotPointerCapture | ✅ | ✅ | #38 |
| onInput (input) | 🟡 | 🟡 | #38 |
| onInput (select) | ❌ | ❌ | #38 |
| onInput (textarea) | 🟡 | 🟡 | #38 |
| onInvalid (input) | ❌ | ❌ | #38 |
| onInvalid (select) | ❌ | ❌ | #38 |
| onInvalid (textarea) | ❌ | ❌ | #38 |
| onKeyDown | 🟡 | 🟡 | #38 |
| onKeyUp | ❌ | ❌ | #38 |
| onLoad (img) | 🟡 | 🟡 | #38 |
| onLostPointerCapture | ✅ | ✅ | #38 |
| onPaste | ❌ | ❌ | #38 |
| onPointerCancel | ✅ | ✅ | #38 |
| onPointerDown | ✅ | ✅ | #38 |
| onPointerEnter | ✅ | ✅ | #38 |
| onPointerLeave | ✅ | ✅ | #38 |
| onPointerMove | ✅ | ✅ | #38 |
| onPointerOut | ✅ | ✅ | #38 |
| onPointerOver | ✅ | ✅ | #38 |
| onPointerUp | ✅ | ✅ | #38 |
| onSelect | ❌ | ❌ | #38 |
| onSelectionChange | ❌ | ❌ | #38 |
| open (dialog) | ❌ | ❌ | |
| placeholder (input) | 🟡 | 🟡 | |
| placeholder (textarea) | 🟡 | 🟡 | |
| readOnly (input) | 🟡 | 🟡 | |
| readOnly (textarea) | 🟡 | 🟡 | |
| referrerPolicy (a) | ❌ | ❌ | |
| referrerPolicy (img) | 🟡 | 🟡 | |
| rel (a) | ❌ | ❌ | |
| required (input) | ❌ | ❌ | |
| required (select) | ❌ | ❌ | |
| required (textarea) | ❌ | ❌ | |
| role | 🟡 | 🟡 | |
| rows (textarea) | 🟡 | 🟡 | |
| selected (option) | ❌ | ❌ | |
| spellCheck (input) | ❌ | ❌ | |
| spellCheck (textarea) | ❌ | ❌ | |
| src (img) | 🟡 | 🟡 | |
| srcSet (img) | 🟡 | 🟡 | |
| step (input) | ❌ | ❌ | |
| style | 🟡 | 🟡 | |
| tabIndex | 🟡 | 🟡 | |
| target (a) | ❌ | ❌ | |
| type (button) | ❌ | ❌ | |
| type (input) | 🟡 | 🟡 | |
| value (input) | ✅ | ✅ | |
| value (textarea) | ✅ | ✅ | |
| width (img) | 🟡 | 🟡 |
| Instance | Android | iOS | Issue # |
|---|---|---|---|
| Node.DOCUMENT_NODE | ✅ | ✅ | |
| Node.DOCUMENT_POSITION_CONTAINED_BY | ✅ | ✅ | |
| Node.DOCUMENT_POSITION_CONTAINS | ✅ | ✅ | |
| Node.DOCUMENT_POSITION_DISCONNECTED | ✅ | ✅ | |
| Node.DOCUMENT_POSITION_FOLLOWING | ✅ | ✅ | |
| Node.DOCUMENT_POSITION_PRECEDING | ✅ | ✅ | |
| Node.ELEMENT_NODE | ✅ | ✅ | |
| Node.TEXT_NODE | ✅ | ✅ | |
| Node.childNodes | ✅ | ✅ | |
| Node.compareDocumentPosition() | ✅ | ✅ | |
| Node.contains() | ✅ | ✅ | |
| Node.firstChild | ✅ | ✅ | |
| Node.getRootNode(options) | ✅ Partial | ✅ Partial | |
| Node.hasChildNodes() | ✅ | ✅ | |
| Node.isConnected | ✅ | ✅ | |
| Node.lastChild | ✅ | ✅ | |
| Node.nextSibling | ✅ | ✅ | |
| Node.nodeName | ✅ | ✅ | |
| Node.nodeType | ✅ | ✅ | |
| Node.nodeValue | ✅ | ✅ | |
| Node.ownerDocument | ✅ | ✅ | |
| Node.parentElement | ✅ | ✅ | |
| Node.parentNode | ✅ | ✅ | |
| Node.previousSibling | ✅ | ✅ | |
| Node.textContent | ✅ | ✅ | |
| Element.childElementCount | ✅ | ✅ | |
| Element.children | ✅ | ✅ | |
| Element.clientHeight | ✅ | ✅ | |
| Element.clientLeft | ✅ | ✅ | |
| Element.clientTop | ✅ | ✅ | |
| Element.clientWidth | ✅ | ✅ | |
| Element.computedStyleMap() | ❌ | ❌ | |
| Element.firstElementChild | ✅ | ✅ | |
| Element.getAttribute() | ❌ | ❌ | |
| Element.getBoundingClientRect() | ✅ | ✅ | |
| Element.getClientRects() | ❌ | ❌ | |
| Element.hasAttribute() | ❌ | ❌ | |
| Element.hasPointerCapture() | ✅ | ✅ | |
| Element.id | ✅ | ✅ | |
| Element.lastElementChild | ✅ | ✅ | |
| Element.nextElementSibling | ✅ | ✅ | |
| Element.previousElementSibling | ✅ | ✅ | |
| Element.releasePointerCapture() | ✅ | ✅ | |
| Element.scroll() | ❌ | ❌ | |
| Element.scrollBy() | ❌ | ❌ | |
| Element.scrollHeight | ✅ | ✅ | |
| Element.scrollIntoView() | ❌ | ❌ | |
| Element.scrollLeft | ✅ | ✅ | |
| Element.scrollTo() | ❌ | ❌ | |
| Element.scrollTop | ✅ | ✅ | |
| Element.scrollWidth | ✅ | ✅ | |
| Element.setPointerCapture() | ✅ | ✅ | |
| Element.tagName | ✅ | ✅ | |
| HTMLDialogElement.close() | ❌ | ❌ | |
| HTMLDialogElement.open | ❌ | ❌ | |
| HTMLDialogElement.returnValue | ❌ | ❌ | |
| HTMLDialogElement.show() | ❌ | ❌ | |
| HTMLDialogElement.showModal() | ❌ | ❌ | |
| HTMLElement.blur() | ✅ | ✅ | |
| HTMLElement.click() | ❌ | ❌ | |
| HTMLElement.focus(options) | ✅ (no options) | ✅ (no options) | |
| HTMLElement.hidden | ❌ | ❌ | |
| HTMLElement.offsetHeight | ✅ | ✅ | |
| HTMLElement.offsetLeft | ✅ | ✅ | |
| HTMLElement.offsetParent | ✅ | ✅ | |
| HTMLElement.offsetTop | ✅ | ✅ | |
| HTMLElement.offsetWidth | ✅ | ✅ | |
| HTMLImageElement.complete | ❌ | ❌ | |
| HTMLImageElement.currentSrc | ❌ | ❌ | |
| HTMLImageElement.naturalHeight | ❌ | ❌ | |
| HTMLImageElement.naturalWidth | ❌ | ❌ | |
| HTMLInputElement.disabled | ❌ | ❌ | |
| HTMLInputElement.select() | ❌ | ❌ | |
| HTMLInputElement.selectionDirection | ❌ | ❌ | |
| HTMLInputElement.selectionEnd | ❌ | ❌ | |
| HTMLInputElement.selectionStart | ❌ | ❌ | |
| HTMLInputElement.setSelectionRange() | ❌ | ❌ | |
| HTMLInputElement.showPicker() | ❌ | ❌ | |
| HTMLInputElement.value | ❌ | ❌ | |
| HTMLTextAreaElement.disabled | ❌ | ❌ | |
| HTMLTextAreaElement.select() | ❌ | ❌ | |
| HTMLTextAreaElement.selectionDirection | ❌ | ❌ | |
| HTMLTextAreaElement.selectionEnd | ❌ | ❌ | |
| HTMLTextAreaElement.selectionStart | ❌ | ❌ | |
| HTMLTextAreaElement.setSelectionRange() | ❌ | ❌ | |
| HTMLTextAreaElement.value | ❌ | ❌ |