Codectionary / Developer documentation / HTML

<input>

The <input> element creates interactive form controls for collecting user data. Its behavior changes dramatically based on the type attribute — a single element can become a text field, checkbox, radio button, date picker, file uploader, and more. It is a void (self-closing) element with no closing tag or child content.

Syntax

<input type="text" name="fieldname" placeholder="Enter value">

Examples

Common Input Types

A few of the most frequently used input types.

<input type="text" placeholder="Name">
<input type="email" placeholder="Email">
<input type="password" placeholder="Password">
<input type="number" placeholder="Age">
<input type="date">

Checkbox and Radio Buttons

Using inputs for multiple-choice selections.

<label><input type="checkbox" name="subscribe" checked> Subscribe to newsletter</label>

<label><input type="radio" name="plan" value="free"> Free</label>
<label><input type="radio" name="plan" value="pro"> Pro</label>

Input Validation Attributes

Using built-in HTML validation without JavaScript.

<input type="email" required placeholder="you@example.com">
<input type="text" minlength="3" maxlength="20" pattern="[A-Za-z]+" placeholder="Letters only">
<input type="number" min="1" max="100" step="1">

Attributes

  • type (string): Determines the input's behavior: text, email, password, number, checkbox, radio, date, file, etc.
  • name (string): Identifies the field when the form data is submitted
  • value (string): The input's current or default value
  • placeholder (string): Hint text shown when the field is empty
  • required (boolean): Marks the field as mandatory for form submission
  • disabled (boolean): Disables the input and excludes it from form submission

Best practices

  • Always pair an <input> with a <label> using matching for and id attributes
  • Use the most specific type available (email, tel, date, number) to get built-in validation and the right mobile keyboard
  • Use the name attribute consistently — it is what actually gets sent to the server, not the id
  • Rely on built-in validation attributes (required, pattern, min, max) before reaching for JavaScript
  • Never use placeholder text as a replacement for a proper label — it disappears once the user starts typing

Browser compatibility

Support applies to the named feature, not every attribute or behaviour in this article. Versions refer to browsers, not operating systems.

<input>

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1 · Before Firefox 89, manipulating the content of <input> elements using Document.execCommand() commands requires workarounds (see bug 1220696).

Safari

  • From 1

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4 · Before Firefox for Android 89, manipulating the content of <input> elements using Document.execCommand() commands requires workarounds (see bug 1220696).

Samsung Internet

  • From 1.0
<input> name

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
input — value attribute

Desktop

Chrome
Unknown
Firefox
Unknown
Safari
Unknown
Edge
Unknown
Opera
Unknown

Mobile

Safari on iOS
Unknown
Chrome for Android
Unknown
Firefox for Android
Unknown
Samsung Internet
Unknown

No single verified compatibility record for this topic. Use the feature-specific articles; no browser support is inferred.

<input> placeholder

Desktop

Chrome
Supported
From 3
Firefox
Supported
From 4
Safari
Supported
From 4
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 3.2
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 3

Firefox

  • From 4

Safari

  • From 4

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 3.2

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> required

Desktop

Chrome
Supported
From 4
Firefox
Supported
From 4
Safari
Supported
From 5
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 4
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 4

Firefox

  • From 4

Safari

  • From 5

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 4

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> disabled

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="text"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 15

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • From 15

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="email"

Desktop

Chrome
Supported
From 5
Firefox
Supported
From 1
Safari
Supported
From 5
Edge
Supported
From 12
Opera
Supported
From 11

Mobile

Safari on iOS
Supported
From 3
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 5

Firefox

  • From 1

Safari

  • From 5

Edge

  • From 12

Opera

  • From 11

Safari on iOS

  • From 3 · Doesn't do validation, but instead offers a custom 'email' keyboard, which is designed to make entering email addresses easier. · The custom 'email' keyboard does not provide a comma key, so users cannot enter multiple email addresses. · Automatically applies a default style of opacity: 0.4 to disable textual <input> elements, including those of type 'email'. Other major browsers don't currently share this particular default style.

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="password"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 2

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • From 2

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="number"

Desktop

Chrome
Supported
From 7
Firefox
Supported
From 29
Safari
Supported
From 5.1
Edge
Supported
From 12
Opera
Supported
From 15

Mobile

Safari on iOS
Supported
From 5
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 29
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 7 · Prevents users from typing non-numeric content.

Firefox

  • From 29 · Allows users to type non-numeric content, with the value reflecting an empty string.

Safari

  • From 5.1 · Allows users to type non-numeric content, with the value reflecting an empty string.

Edge

  • From 12

Opera

  • From 15 · Prevents users from typing non-numeric content.

Safari on iOS

  • From 5 · Allows users to type non-numeric content, with the value reflecting an empty string.

Chrome for Android

  • From 18 · Prevents users from typing non-numeric content.

Firefox for Android

  • From 29 · Allows users to type non-numeric content, with the value reflecting an empty string.

Samsung Internet

  • From 1.0 · Prevents users from typing non-numeric content.
<input> type="date"

Desktop

Chrome
Supported
From 20
Firefox
Supported
From 57
Safari
Supported
From 14.1
Edge
Supported
From 12
Opera
Supported
From 11

Mobile

Safari on iOS
Supported
From 5
Chrome for Android
Supported
From 25
Firefox for Android
Supported
From 57
Samsung Internet
Supported
From 1.5

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 20

Firefox

  • From 57

Safari

  • From 14.1

Edge

  • From 12

Opera

  • From 11

Safari on iOS

  • From 5

Chrome for Android

  • From 25

Firefox for Android

  • From 57

Samsung Internet

  • From 1.5
<input> type="file"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 11

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1 · You can set as well as get the value of HTMLInputElement.files in all modern browsers; this was most recently added to Firefox, in version 57 (see bug 1384030).

Safari

  • From 1

Edge

  • From 12

Opera

  • From 11

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="checkbox"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 15

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • From 15

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> type="radio"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 15

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • From 15

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> pattern

Desktop

Chrome
Supported
From 4
Firefox
Supported
From 4
Safari
Supported
From 5
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 4
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 4

Firefox

  • From 4

Safari

  • From 5

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 4

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> minlength

Desktop

Chrome
Supported
From 40
Firefox
Supported
From 51
Safari
Supported
From 10.1
Edge
Supported
From 17
Opera
Supported
From 27

Mobile

Safari on iOS
Supported
From 10.3
Chrome for Android
Supported
From 40
Firefox for Android
Supported
From 51
Samsung Internet
Supported
From 4.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 40

Firefox

  • From 51

Safari

  • From 10.1

Edge

  • From 17

Opera

  • From 27

Safari on iOS

  • From 10.3

Chrome for Android

  • From 40

Firefox for Android

  • From 51

Samsung Internet

  • From 4.0
<input> type="date" · list

Desktop

Chrome
Supported
From 20
Firefox
Not supported
Safari
Supported
From 14.1
Edge
Supported
From 12
Opera
Supported
From 11

Mobile

Safari on iOS
Supported
From 14.5
Chrome for Android
Supported
From 33
Firefox for Android
Not supported
Samsung Internet
Supported
From 2.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 20

Firefox

  • Not supported

Safari

  • From 14.1

Edge

  • From 12

Opera

  • From 11

Safari on iOS

  • From 14.5

Chrome for Android

  • From 33

Firefox for Android

  • Not supported

Samsung Internet

  • From 2.0

MDN BCD 8.1.5 · Dataset built 2026-10-08 · Mapping reviewed 2026-10-21. These dates are not individual browser-test or claim-verification dates. Unknown means the data does not establish support.

HTML Living Standard

Specifications & further reading