Testing

HTML Forms: Browser Support, Features, Known Issues

HTML forms work in every browser since HTML 2.0. HTML5 form validation needs Chrome 10+, Firefox 4+, Safari 10.1+. See input types, attributes, and quirks.

Author

Prince Dewani

May 6, 2026

An HTML form is a section of a web page, defined by the WHATWG <form> element, that collects user input and submits it to a server. It ships in every browser by default; HTML5 form validation works in Chrome 10, Firefox 4, Safari 10.1, Edge 12, Opera 10, Samsung Internet 4, and Android Browser 4.4.3.

This guide covers what an HTML form is, the browsers that support it, the key features, the known issues, and how to make forms cross-browser.

What is an HTML form?

An HTML form is a <form> element that collects user input through controls like text fields, checkboxes, radio buttons, and submit buttons. The WHATWG HTML Living Standard owns the spec in section 4.10.3, and the element ships values to a server using the GET, POST, or dialog submission method.

Which browsers does the HTML form support?

The <form> element works in every browser as part of the original HTML 2.0 spec, so global support sits at near 100%. HTML5 form validation, new input types, and modern attributes have version-specific support that varies by browser and OS.

Loading browser compatibility data...

HTML form compatibility in Chrome

Chrome supports the <form> element from Chrome 1 on Windows, macOS, Linux, ChromeOS, and Android. HTML5 form validation works from Chrome 10 on, while Chrome 4 to 9 did not support constraint validation, the :invalid and :valid pseudo-classes, or the checkValidity() method. The email, url, tel, number, and range input types work from Chrome 5 on, and the date, time, datetime-local, month, and color input types work from Chrome 20 on.

HTML form compatibility in Edge

Microsoft Edge supports the <form> element and HTML5 form validation from Edge 12 on Windows. EdgeHTML 12 to 18 covered core forms but lacked some pickers and the formdata event. Chromium-based Edge 79 and later inherits every Chrome forms feature, including the dialog form method, form-associated custom elements, and the full set of HTML5 input types on Windows, macOS, and Linux.

HTML form compatibility in Firefox

Firefox supports the <form> element from Firefox 1 on Windows, macOS, Linux, and Android. HTML5 form validation works from Firefox 4 on, while Firefox 2 to 3.6 did not support constraint validation. Firefox supports the date, time, month, datetime-local, number, range, and color input types from Firefox 57 on. The week input is still not supported in Firefox.

HTML form compatibility in Safari

Safari supports the <form> element from Safari 1 on macOS. HTML5 form validation works from Safari 10.1 on macOS and from iOS Safari 10.3 on iPhone and iPad, while Safari 5 to 10 had partial support and did not style :invalid on submission. The date, time, datetime-local, and month input types work from Safari 14.1 on macOS Big Sur and from iOS Safari 5 on the iOS native picker. The color and week input types are still unsupported on Safari and iOS Safari and fall back to plain text.

HTML form compatibility in Opera

Opera supports the <form> element from Opera 1 on Windows, macOS, and Linux. HTML5 form validation works from Opera 10 on, while Opera 9 to 9.6 did not support constraint validation. Chromium-based Opera 15 and later tracks every Chrome forms feature, including the dialog method and form-associated custom elements. Opera Mini renders forms but skips most HTML5 input pickers and falls back to text fields.

HTML form compatibility in Samsung Internet

Samsung Internet supports the <form> element from Samsung Internet 1.0 on Galaxy phones and tablets. HTML5 form validation works from Samsung Internet 4 on. Samsung Internet inherits the Chromium forms stack, so the email, url, tel, number, range, date, time, datetime-local, month, and color input types use the native Android picker. Form-associated custom elements work from Samsung Internet 12 on.

HTML form compatibility in Android Browser

The legacy Android Browser supports the <form> element from Android Browser 2.1 on. HTML5 form validation works from Android Browser 4.4.3 on, while Android Browser 2.1 to 3 did not support constraint validation and 4 to 4.4 had partial support. Modern Chrome for Android replaced the stock Android Browser on Android 4.4 and later, and Chrome for Android tracks every desktop Chrome forms feature.

HTML form compatibility in Internet Explorer

Internet Explorer supports the <form> element from Internet Explorer 1 on Windows. HTML5 form validation works from Internet Explorer 10 on, while IE 5.5 to 9 did not support constraint validation, the required attribute, or the :invalid pseudo-class. IE 10 and 11 do not implement the date, time, color, datetime-local, week, or month input types, so they all fall back to plain text. Microsoft has retired Internet Explorer, so move IE-only forms to Chromium Edge for new work.

Note

Note: HTML forms break across Safari pickers, iOS picker styling, and the autocomplete attribute. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key features of HTML forms?

HTML forms wrap a set of attributes, input types, and a constraint validation API that work together to collect, validate, and submit user input. The headline features focus on submission control, type-aware inputs, and built-in validation.

  • <form> attributes: action, method, enctype, target, autocomplete, novalidate, name, accept-charset, and rel control where the data goes and how it is encoded for the server.
  • HTML5 input types: email, url, tel, number, range, date, time, datetime-local, month, week, color, search, and password each render a type-specific keyboard or picker and trigger built-in validation.
  • New form attributes: required, pattern, min, max, step, placeholder, autofocus, autocomplete, spellcheck, and inputmode add validation hints and UX controls without any JavaScript.
  • Constraint validation API: checkValidity(), reportValidity(), setCustomValidity(), and the ValidityState object expose form errors to scripts so you can mix custom rules with the built-in checks.
  • CSS pseudo-classes: :valid, :invalid, :required, :optional, :user-invalid, :user-valid, :in-range, :out-of-range, :read-only, and :read-write style fields based on validation state.
  • Form events: submit, formdata, and reset events let pages intercept submission, mutate the FormData object, or clear a form before any network request runs.
  • Form-associated custom elements: Custom elements with formAssociated = true participate in submission, validation, and reset alongside built-in inputs from Chrome 77, Edge 79, Firefox 98, and Safari 16.4.
  • Multipart upload: enctype="multipart/form-data" lets <input type="file"> upload one or many files to the server in a single submission.
...

What are the known issues with HTML forms across browsers?

HTML forms have small but painful cross-browser quirks that cluster around HTML5 input pickers, validation styling, and the autocomplete attribute. The fixes are mostly small tweaks once you know where the gap is.

  • Date and time pickers vary widely: Chrome, Edge, and Opera ship a calendar widget for date inputs. Firefox 57 and later adds its own picker, but Safari on macOS only shows a calendar from Safari 14.1 on.
  • iOS picker style is non-overridable: iOS Safari renders date, time, and datetime-local inputs as a wheel-spinner sheet that ignores CSS styling. Plan layouts around the native widget on mobile.
  • color and week stay missing on Safari: Safari on macOS, iPadOS, and iOS does not render a color picker or week picker, so the field falls back to a plain text input. Firefox also lacks the week picker.
  • :invalid styling fires before user input: A field with required becomes :invalid the moment the page loads, so a naive input:invalid CSS rule paints every empty field red. Pair :user-invalid (Chrome 119, Firefox 88, Safari 16.5) or :placeholder-shown to delay the styling.
  • Validation messages are browser-controlled: Each browser shows a different error bubble for required, pattern, or type=email, and the message text and language are not customizable beyond setCustomValidity.
  • autocomplete="off" is sometimes ignored: Chrome and Safari override autocomplete="off" on login and address fields to surface the password manager. Use autocomplete="new-password" on password creation forms instead.
  • <input type="file"> styling is locked: All major browsers render the file input with a vendor-styled button. Hide the input and trigger it from a styled <label> to ship a custom button.
  • Nested forms are illegal: HTML parsers automatically close an open <form> when a second <form> opens, so nested forms never work. Use the form attribute on inputs to associate them with a remote form instead.
  • enctype="text/plain" is non-conforming: The text/plain encoding is intentionally lossy and modern browsers warn against it. Always use application/x-www-form-urlencoded or multipart/form-data on real submissions.

In my experience, the loudest forms bug on real-device runs is iOS Safari refusing to honor autocomplete="off" on a credit-card form, because Apple Pay and the iCloud Keychain prompt anyway. The fix is to add an inputmode and a strict pattern, then accept that the keychain prompt is part of the iOS flow.

...

How do you ensure HTML forms work across browsers?

You ensure HTML forms work across browsers by feature-detecting modern input types, providing a graceful fallback, and validating on the server in addition to the client. The steps below walk you through that pipeline.

  • Feature-detect each HTML5 input type: Create an input element in JavaScript, set its type to date, color, or datetime-local, and read the type back; if the browser does not understand the type, it returns text. The check tells you when a polyfill is needed.
  • Provide a polyfill or fallback widget: When detection fails, mount a JavaScript date picker like Pikaday or a color picker like Spectrum. Wrap the polyfill in a feature-detect guard so modern browsers still get the native UI.
  • Validate on the server: Browsers can disable HTML5 validation with novalidate or with DevTools, and older browsers skip it entirely. Mirror every required, pattern, and type rule on the server with the same error copy.
  • Use :user-invalid for error styling: Style errors only after the user blurs or submits the field. The :user-invalid and :user-valid pseudo-classes work in Chrome 119, Firefox 88, and Safari 16.5; older browsers can fall back to a class toggle on blur.
  • Add inputmode for mobile keyboards: Set inputmode="numeric", inputmode="email", or inputmode="decimal" on text inputs to force the right mobile keyboard. Older browsers ignore the attribute, which is the safe fallback.
  • Test pickers on real devices: date, time, color, and file inputs render a native widget that depends on the OS, so run the form on Windows Chrome, macOS Safari, iOS Safari, and Android Chrome to confirm the picker is reachable.

Paste this snippet into the DevTools console of any browser to see which HTML5 input types it supports and whether the constraint validation API is wired up.

// Paste this into the DevTools console to see which HTML5 input types your browser supports.
const types = ["date", "time", "datetime-local", "month", "week", "color", "email", "url", "tel", "number", "range", "search"];

types.forEach((type) => {
  const probe = document.createElement("input");
  probe.setAttribute("type", type);
  const supported = probe.type === type;
  console.log(type.padEnd(16), supported ? "supported" : "falls back to text");
});

// Also confirm constraint validation is wired up.
const sample = document.createElement("input");
console.log("checkValidity:", typeof sample.checkValidity === "function");
console.log("ValidityState :", "validity" in sample);

Citations

All HTML form version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests