The HTML input element changes both its appearance and mobile keyboard layout based on its type attribute. Picking accurate HTML5 input types gives visitors native date pickers, email keyboards, built-in format validation, and accessible controls with zero external plugins.
text (default), email (triggers @ mobile keyboard and validates email format), password (masks characters), tel (opens phone keypad), url, and search.number (numeric spinner with min/max/step), range (interactive slider), date, time, and datetime-local.checkbox (multiple independent picks), radio (one choice per shared name group), color (system color picker), and file.submit, reset, button, and hidden (for passing CSRF tokens or record IDs invisibly).<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML Input Types Demo</title>
<style>
form { max-width: 420px; font-family: system-ui, sans-serif; display: grid; gap: 12px; }
label { display: block; font-weight: 600; margin-bottom: 4px; }
</style>
</head>
<body>
<form>
<div>
<label for="u-email">Email</label>
<input id="u-email" name="email" type="email" required placeholder="[email protected]">
</div>
<div>
<label for="u-qty">Licenses (1–20)</label>
<input id="u-qty" name="licenses" type="number" min="1" max="20" value="3">
</div>
<div>
<label for="u-date">Launch Date</label>
<input id="u-date" name="launch_date" type="date">
</div>
<div>
<label for="u-vol">Priority Level</label>
<input id="u-vol" name="priority" type="range" min="1" max="10" value="5">
</div>
<fieldset>
<legend>Billing Cycle</legend>
<label><input type="radio" name="billing" value="monthly" checked> Monthly</label>
<label><input type="radio" name="billing" value="yearly"> Yearly</label>
</fieldset>
</form>
</body>
</html>
name attributes: Radio buttons only act as a mutually exclusive group when all options share the exact same name.type="number" for credit cards, ZIP codes, or phone numbers: Leading zeros vanish in numeric parsing and scroll wheels accidentally alter numbers. Use type="text" with inputmode="numeric" instead.type="hidden" is secure: Visitors can read and edit hidden inputs in DevTools, so never trust hidden prices or user roles on the server.Unknown type values fall back safely to type="text", so forms remain usable even in older environments.
Add the accept attribute, such as accept=".png,.jpg,.webp" or accept="application/pdf", to filter the file chooser dialog.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.