CINXE.COM

Basic native form controls - Learn web development | MDN

<!doctype html><html lang="en-US" prefix="og: https://ogp.me/ns#"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="https://developer.mozilla.org/favicon-48x48.bc390275e955dacb2e65.png"/><link rel="apple-touch-icon" href="https://developer.mozilla.org/apple-touch-icon.528534bba673c38049c2.png"/><meta name="theme-color" content="#ffffff"/><link rel="manifest" href="https://developer.mozilla.org/manifest.f42880861b394dd4dc9b.json"/><link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="MDN Web Docs"/><title>Basic native form controls - Learn web development | MDN</title><link rel="alternate" title="Basis-Native Formularelemente" href="https://developer.mozilla.org/de/docs/Learn/Forms/Basic_native_form_controls" hrefLang="de"/><link rel="alternate" title="Controles de formulario originales" href="https://developer.mozilla.org/es/docs/Learn/Forms/Basic_native_form_controls" hrefLang="es"/><link rel="alternate" title="Les contrôles de formulaire natifs" href="https://developer.mozilla.org/fr/docs/Learn/Forms/Basic_native_form_controls" hrefLang="fr"/><link rel="alternate" title="基本的なネイティブフォームコントロール" href="https://developer.mozilla.org/ja/docs/Learn/Forms/Basic_native_form_controls" hrefLang="ja"/><link rel="alternate" title="기본 네이티브 양식 컨트롤" href="https://developer.mozilla.org/ko/docs/Learn/Forms/Basic_native_form_controls" hrefLang="ko"/><link rel="alternate" title="原生表单部件" href="https://developer.mozilla.org/zh-CN/docs/Learn/Forms/Basic_native_form_controls" hrefLang="zh"/><link rel="alternate" title="Basic native form controls" href="https://developer.mozilla.org/en-US/docs/Learn/Forms/Basic_native_form_controls" hrefLang="en"/><link rel="preload" as="font" type="font/woff2" href="/static/media/Inter.var.c2fe3cb2b7c746f7966a.woff2" crossorigin=""/><link rel="alternate" type="application/rss+xml" title="MDN Blog RSS Feed" href="https://developer.mozilla.org/en-US/blog/rss.xml" hrefLang="en"/><meta name="description" content="This article has covered the older input types — the original set introduced in the early days of HTML that is well-supported in all browsers. In the next section, we&#x27;ll take a look at the more modern values of the type attribute."/><meta property="og:url" content="https://developer.mozilla.org/en-US/docs/Learn/Forms/Basic_native_form_controls"/><meta property="og:title" content="Basic native form controls - Learn web development | MDN"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:description" content="This article has covered the older input types — the original set introduced in the early days of HTML that is well-supported in all browsers. In the next section, we&#x27;ll take a look at the more modern values of the type attribute."/><meta property="og:image" content="https://developer.mozilla.org/mdn-social-share.d893525a4fb5fb1f67a2.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:height" content="1080"/><meta property="og:image:width" content="1920"/><meta property="og:image:alt" content="The MDN Web Docs logo, featuring a blue accent color, displayed on a solid black background."/><meta property="og:site_name" content="MDN Web Docs"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="MozDevNet"/><link rel="canonical" href="https://developer.mozilla.org/en-US/docs/Learn/Forms/Basic_native_form_controls"/><style media="print">.article-actions-container,.document-toc-container,.language-menu,.main-menu-toggle,.on-github,.page-footer,.place,.sidebar,.top-banner,.top-navigation-main,ul.prev-next{display:none!important}.main-page-content,.main-page-content pre{padding:2px}.main-page-content pre{border-left-width:2px}</style><script src="/static/js/gtag.js" defer=""></script><script defer="" src="/static/js/main.5e889624.js"></script><link href="/static/css/main.26c64ea7.css" rel="stylesheet"/></head><body><script>if(document.body.addEventListener("load",(t=>{t.target.classList.contains("interactive")&&t.target.setAttribute("data-readystate","complete")}),{capture:!0}),window&&document.documentElement){const t={light:"#ffffff",dark:"#1b1b1b"};try{const e=window.localStorage.getItem("theme");e&&(document.documentElement.className=e,document.documentElement.style.backgroundColor=t[e]);const o=window.localStorage.getItem("nop");o&&(document.documentElement.dataset.nop=o)}catch(t){console.warn("Unable to read theme from localStorage",t)}}</script><div id="root"><ul id="nav-access" class="a11y-nav"><li><a id="skip-main" href="#content">Skip to main content</a></li><li><a id="skip-search" href="#top-nav-search-input">Skip to search</a></li><li><a id="skip-select-language" href="#languages-switcher-button">Skip to select language</a></li></ul><div class="page-wrapper category-learn document-page"><div class="top-banner loading"><section class="place top container"></section></div><div class="sticky-header-container"><header class="top-navigation "><div class="container "><div class="top-navigation-wrap"><a href="/en-US/" class="logo" aria-label="MDN homepage"><svg id="mdn-docs-logo" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 694.9 104.4" style="enable-background:new 0 0 694.9 104.4" xml:space="preserve" role="img"><title>MDN Web Docs</title><path d="M40.3 0 11.7 92.1H0L28.5 0h11.8zm10.4 0v92.1H40.3V0h10.4zM91 0 62.5 92.1H50.8L79.3 0H91zm10.4 0v92.1H91V0h10.4z" class="logo-m"></path><path d="M627.9 95.6h67v8.8h-67v-8.8z" class="logo-_"></path><path d="M367 42h-4l-10.7 30.8h-5.5l-10.8-26h-.4l-10.5 26h-5.2L308.7 42h-3.8v-5.6H323V42h-6.5l6.8 20.4h.4l10.3-26h4.7l11.2 26h.5l5.7-20.3h-6.2v-5.6H367V42zm34.9 20c-.4 3.2-2 5.9-4.7 8.2-2.8 2.3-6.5 3.4-11.3 3.4-5.4 0-9.7-1.6-13.1-4.7-3.3-3.2-5-7.7-5-13.7 0-5.7 1.6-10.3 4.7-14s7.4-5.5 12.9-5.5c5.1 0 9.1 1.6 11.9 4.7s4.3 6.9 4.3 11.3c0 1.5-.2 3-.5 4.7h-25.6c.3 7.7 4 11.6 10.9 11.6 2.9 0 5.1-.7 6.5-2 1.5-1.4 2.5-3 3-4.9l6 .9zM394 51.3c.2-2.4-.4-4.7-1.8-6.9s-3.8-3.3-7-3.3c-3.1 0-5.3 1-6.9 3-1.5 2-2.5 4.4-2.8 7.2H394zm51 2.4c0 5-1.3 9.5-4 13.7s-6.9 6.2-12.7 6.2c-6 0-10.3-2.2-12.7-6.7-.1.4-.2 1.4-.4 2.9s-.3 2.5-.4 2.9h-7.3c.3-1.7.6-3.5.8-5.3.3-1.8.4-3.7.4-5.5V22.3h-6v-5.6H416v27c1.1-2.2 2.7-4.1 4.7-5.7 2-1.6 4.8-2.4 8.4-2.4 4.6 0 8.4 1.6 11.4 4.7 3 3.2 4.5 7.6 4.5 13.4zm-7.7.6c0-4.2-1-7.4-3-9.5-2-2.2-4.4-3.3-7.4-3.3-3.4 0-6 1.2-8 3.7-1.9 2.4-2.9 5-3 7.7V57c0 3 1 5.6 3 7.7s4.5 3.1 7.6 3.1c3.6 0 6.3-1.3 8.1-3.9 1.8-2.7 2.7-5.9 2.7-9.6zm69.2 18.5h-13.2v-7.2c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2 5.7 0 9.8 2.2 12.3 6.5V22.3h-8.6v-5.6h15.8v50.6h6v5.5zM493.2 56v-4.4c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm53.1-1.4c0 5.6-1.8 10.2-5.3 13.7s-8.2 5.3-13.9 5.3-10.1-1.7-13.4-5.1c-3.3-3.4-5-7.9-5-13.5 0-5.3 1.6-9.9 4.7-13.7 3.2-3.8 7.9-5.7 14.2-5.7s11 1.9 14.1 5.7c3 3.7 4.6 8.1 4.6 13.3zm-7.7-.2c0-4-1-7.2-3-9.5s-4.8-3.5-8.2-3.5c-3.6 0-6.4 1.2-8.3 3.7s-2.9 5.6-2.9 9.5c0 3.7.9 6.8 2.8 9.4 1.9 2.6 4.6 3.9 8.3 3.9 3.6 0 6.4-1.3 8.4-3.8 1.9-2.6 2.9-5.8 2.9-9.7zm45 5.8c-.4 3.2-1.9 6.3-4.4 9.1-2.5 2.9-6.4 4.3-11.8 4.3-5.2 0-9.4-1.6-12.6-4.8-3.2-3.2-4.8-7.7-4.8-13.7 0-5.5 1.6-10.1 4.7-13.9 3.2-3.8 7.6-5.7 13.2-5.7 2.3 0 4.6.3 6.7.8 2.2.5 4.2 1.5 6.2 2.9l1.5 9.5-5.9.7-1.3-6.1c-2.1-1.2-4.5-1.8-7.2-1.8-3.5 0-6.1 1.2-7.7 3.7-1.7 2.5-2.5 5.7-2.5 9.6 0 4.1.9 7.3 2.7 9.5 1.8 2.3 4.4 3.4 7.8 3.4 5.2 0 8.2-2.9 9.2-8.8l6.2 1.3zm34.7 1.9c0 3.6-1.5 6.5-4.6 8.5s-7 3-11.7 3c-5.7 0-10.6-1.2-14.6-3.6l1.2-8.8 5.7.6-.2 4.7c1.1.5 2.3.9 3.6 1.1s2.6.3 3.9.3c2.4 0 4.5-.4 6.5-1.3 1.9-.9 2.9-2.2 2.9-4.1 0-1.8-.8-3.1-2.3-3.8s-3.5-1.3-5.8-1.7-4.6-.9-6.9-1.4c-2.3-.6-4.2-1.6-5.7-2.9-1.6-1.4-2.3-3.5-2.3-6.3 0-4.1 1.5-6.9 4.6-8.5s6.4-2.4 9.9-2.4c2.6 0 5 .3 7.2.9 2.2.6 4.3 1.4 6.1 2.4l.8 8.8-5.8.7-.8-5.7c-2.3-1-4.7-1.6-7.2-1.6-2.1 0-3.7.4-5.1 1.1-1.3.8-2 2-2 3.8 0 1.7.8 2.9 2.3 3.6 1.5.7 3.4 1.2 5.7 1.6 2.2.4 4.5.8 6.7 1.4 2.2.6 4.1 1.6 5.7 3 1.4 1.6 2.2 3.7 2.2 6.6zM197.6 73.2h-17.1v-5.5h3.8V51.9c0-3.7-.7-6.3-2.1-7.9-1.4-1.6-3.3-2.3-5.7-2.3-3.2 0-5.6 1.1-7.2 3.4s-2.4 4.6-2.5 6.9v15.6h6v5.5h-17.1v-5.5h3.8V51.9c0-3.8-.7-6.4-2.1-7.9-1.4-1.5-3.3-2.3-5.6-2.3-3.2 0-5.5 1.1-7.2 3.3-1.6 2.2-2.4 4.5-2.5 6.9v15.8h6.9v5.5h-20.2v-5.5h6V42.4h-6.1v-5.6h13.4v6.4c1.2-2.1 2.7-3.8 4.7-5.2 2-1.3 4.4-2 7.3-2s5.3.7 7.5 2.1c2.2 1.4 3.7 3.5 4.5 6.4 1.1-2.5 2.7-4.5 4.9-6.1s4.8-2.4 7.9-2.4c3.5 0 6.5 1.1 8.9 3.3s3.7 5.6 3.7 10.2v18.2h6.1v5.5zm42.5 0h-13.2V66c-1.2 2.2-2.8 4.1-4.9 5.6-2.1 1.6-4.8 2.4-8.3 2.4-4.8 0-8.7-1.6-11.6-4.9-2.9-3.2-4.3-7.7-4.3-13.3 0-5 1.3-9.6 4-13.7 2.6-4.1 6.9-6.2 12.8-6.2s9.8 2.2 12.3 6.5V22.7h-8.6v-5.6h15.8v50.6h6v5.5zm-13.3-16.8V52c-.1-3-1.2-5.5-3.2-7.3s-4.4-2.8-7.2-2.8c-3.6 0-6.3 1.3-8.2 3.9-1.9 2.6-2.8 5.8-2.8 9.6 0 4.1 1 7.3 3 9.5s4.5 3.3 7.4 3.3c3.2 0 5.8-1.3 7.8-3.8 2.1-2.6 3.1-5.3 3.2-8zm61.5 16.8H269v-5.5h6V51.9c0-3.7-.7-6.3-2.2-7.9-1.4-1.6-3.4-2.3-5.7-2.3-3.1 0-5.6 1-7.4 3s-2.8 4.4-2.9 7v15.9h6v5.5h-19.3v-5.5h6V42.4h-6.2v-5.6h13.6V43c2.6-4.6 6.8-6.9 12.7-6.9 3.6 0 6.7 1.1 9.2 3.3s3.7 5.6 3.7 10.2v18.2h6v5.4h-.2z" class="logo-text"></path></svg></a><button title="Open main menu" type="button" class="button action has-icon main-menu-toggle" aria-haspopup="menu" aria-label="Open main menu" aria-expanded="false"><span class="button-wrap"><span class="icon icon-menu "></span><span class="visually-hidden">Open main menu</span></span></button></div><div class="top-navigation-main"><nav class="main-nav" aria-label="Main menu"><ul class="main-menu nojs"><li class="top-level-entry-container "><button type="button" id="references-button" class="top-level-entry menu-toggle" aria-controls="references-menu" aria-expanded="false">References</button><a href="/en-US/docs/Web" class="top-level-entry">References</a><ul id="references-menu" class="submenu references hidden inline-submenu-lg" aria-labelledby="references-button"><li class="apis-link-container mobile-only "><a href="/en-US/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li><li class="html-link-container "><a href="/en-US/docs/Web/HTML" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Structure of content on the web</p></div></a></li><li class="css-link-container "><a href="/en-US/docs/Web/CSS" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Code used to describe document style</p></div></a></li><li class="javascript-link-container "><a href="/en-US/docs/Web/JavaScript" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">General-purpose scripting language</p></div></a></li><li class="http-link-container "><a href="/en-US/docs/Web/HTTP" class="submenu-item "><div class="submenu-icon http"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP</div><p class="submenu-item-description">Protocol for transmitting web resources</p></div></a></li><li class="apis-link-container "><a href="/en-US/docs/Web/API" class="submenu-item "><div class="submenu-icon apis"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web APIs</div><p class="submenu-item-description">Interfaces for building web applications</p></div></a></li><li class="apis-link-container "><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Extensions</div><p class="submenu-item-description">Developing extensions for web browsers</p></div></a></li><li class="apis-link-container desktop-only "><a href="/en-US/docs/Web" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Web Technology</div><p class="submenu-item-description">Web technology reference for developers</p></div></a></li></ul></li><li class="top-level-entry-container active"><button type="button" id="guides-button" class="top-level-entry menu-toggle" aria-controls="guides-menu" aria-expanded="false">Guides</button><a href="/en-US/docs/Learn" class="top-level-entry">Guides</a><ul id="guides-menu" class="submenu guides hidden inline-submenu-lg" aria-labelledby="guides-button"><li class="apis-link-container mobile-only "><a href="/en-US/docs/Learn" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview / MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="apis-link-container desktop-only "><a href="/en-US/docs/Learn" class="submenu-item "><div class="submenu-icon learn"></div><div class="submenu-content-container"><div class="submenu-item-heading">MDN Learning Area</div><p class="submenu-item-description">Learn web development</p></div></a></li><li class="html-link-container "><a href="/en-US/docs/Learn/HTML" class="submenu-item "><div class="submenu-icon html"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTML</div><p class="submenu-item-description">Learn to structure web content with HTML</p></div></a></li><li class="css-link-container "><a href="/en-US/docs/Learn/CSS" class="submenu-item "><div class="submenu-icon css"></div><div class="submenu-content-container"><div class="submenu-item-heading">CSS</div><p class="submenu-item-description">Learn to style content using CSS</p></div></a></li><li class="javascript-link-container "><a href="/en-US/docs/Learn/JavaScript" class="submenu-item "><div class="submenu-icon javascript"></div><div class="submenu-content-container"><div class="submenu-item-heading">JavaScript</div><p class="submenu-item-description">Learn to run scripts in the browser</p></div></a></li><li class=" "><a href="/en-US/docs/Web/Accessibility" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Accessibility</div><p class="submenu-item-description">Learn to make the web accessible to all</p></div></a></li></ul></li><li class="top-level-entry-container "><button type="button" id="mdn-plus-button" class="top-level-entry menu-toggle" aria-controls="mdn-plus-menu" aria-expanded="false">Plus</button><a href="/en-US/plus" class="top-level-entry">Plus</a><ul id="mdn-plus-menu" class="submenu mdn-plus hidden inline-submenu-lg" aria-labelledby="mdn-plus-button"><li class=" "><a href="/en-US/plus" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Overview</div><p class="submenu-item-description">A customized MDN experience</p></div></a></li><li class=" "><a href="/en-US/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li><li class=" "><a href="/en-US/plus/updates" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Updates</div><p class="submenu-item-description">All browser compatibility updates at a glance</p></div></a></li><li class=" "><a href="/en-US/plus/docs/features/overview" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Documentation</div><p class="submenu-item-description">Learn how to use MDN Plus</p></div></a></li><li class=" "><a href="/en-US/plus/docs/faq" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">FAQ</div><p class="submenu-item-description">Frequently asked questions about MDN Plus</p></div></a></li></ul></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/curriculum/">Curriculum <sup class="new">New</sup></a></li><li class="top-level-entry-container "><a class="top-level-entry menu-link" href="/en-US/blog/">Blog</a></li><li class="top-level-entry-container "><button type="button" id="tools-button" class="top-level-entry menu-toggle" aria-controls="tools-menu" aria-expanded="false">Tools</button><ul id="tools-menu" class="submenu tools hidden inline-submenu-lg" aria-labelledby="tools-button"><li class=" "><a href="/en-US/play" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">Playground</div><p class="submenu-item-description">Write, test and share your code</p></div></a></li><li class=" "><a href="/en-US/observatory" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">HTTP Observatory</div><p class="submenu-item-description">Scan a website for free</p></div></a></li><li class=" "><a href="/en-US/plus/ai-help" class="submenu-item "><div class="submenu-icon"></div><div class="submenu-content-container"><div class="submenu-item-heading">AI Help</div><p class="submenu-item-description">Get real-time assistance and support</p></div></a></li></ul></li></ul></nav><div class="header-search"><form action="/en-US/search" class="search-form search-widget" id="top-nav-search-form" role="search"><label id="top-nav-search-label" for="top-nav-search-input" class="visually-hidden">Search MDN</label><input aria-activedescendant="" aria-autocomplete="list" aria-controls="top-nav-search-menu" aria-expanded="false" aria-labelledby="top-nav-search-label" autoComplete="off" id="top-nav-search-input" role="combobox" type="search" class="search-input-field" name="q" placeholder="   " required="" value=""/><button type="button" class="button action has-icon clear-search-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear search input</span></span></button><button type="submit" class="button action has-icon search-button"><span class="button-wrap"><span class="icon icon-search "></span><span class="visually-hidden">Search</span></span></button><div id="top-nav-search-menu" role="listbox" aria-labelledby="top-nav-search-label"></div></form></div><div class="theme-switcher-menu"><button type="button" class="button action has-icon theme-switcher-menu small" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-theme-os-default "></span>Theme</span></button></div><ul class="auth-container"><li><a href="/users/fxa/login/authenticate/?next=%2Fen-US%2Fdocs%2FLearn%2FForms%2FBasic_native_form_controls" class="login-link" rel="nofollow">Log in</a></li><li><a href="/users/fxa/login/authenticate/?next=%2Fen-US%2Fdocs%2FLearn%2FForms%2FBasic_native_form_controls" target="_self" rel="nofollow" class="button primary mdn-plus-subscribe-link"><span class="button-wrap">Sign up for free</span></a></li></ul></div></div></header><div class="article-actions-container"><div class="container"><button type="button" class="button action has-icon sidebar-button" aria-label="Expand sidebar" aria-expanded="false" aria-controls="sidebar-quicklinks"><span class="button-wrap"><span class="icon icon-sidebar "></span></span></button><nav class="breadcrumbs-container" aria-label="Breadcrumb"><ol typeof="BreadcrumbList" vocab="https://schema.org/" aria-label="breadcrumbs"><li property="itemListElement" typeof="ListItem"><a href="/en-US/docs/Learn" class="breadcrumb" property="item" typeof="WebPage"><span property="name">Guides</span></a><meta property="position" content="1"/></li><li property="itemListElement" typeof="ListItem"><a href="/en-US/docs/Learn/Forms" class="breadcrumb" property="item" typeof="WebPage"><span property="name">Web form building blocks</span></a><meta property="position" content="2"/></li><li property="itemListElement" typeof="ListItem"><a href="/en-US/docs/Learn/Forms/Basic_native_form_controls" class="breadcrumb-current-page" property="item" typeof="WebPage"><span property="name">Basic native form controls</span></a><meta property="position" content="3"/></li></ol></nav><div class="article-actions"><button type="button" class="button action has-icon article-actions-toggle" aria-label="Article actions"><span class="button-wrap"><span class="icon icon-ellipses "></span><span class="article-actions-dialog-heading">Article Actions</span></span></button><ul class="article-actions-entries"><li class="article-actions-entry"><div class="languages-switcher-menu open-on-focus-within"><button id="languages-switcher-button" type="button" class="button action small has-icon languages-switcher-menu" aria-haspopup="menu"><span class="button-wrap"><span class="icon icon-language "></span>English (US)</span></button><div class="hidden"><ul class="submenu language-menu " aria-labelledby="language-menu-button"><li class=" "><form class="submenu-item locale-redirect-setting"><div class="group"><label class="switch"><input type="checkbox" name="locale-redirect"/><span class="slider"></span><span class="label">Remember language</span></label><a href="https://github.com/orgs/mdn/discussions/739" rel="external noopener noreferrer" target="_blank" title="Enable this setting to automatically switch to this language when it&#x27;s available. (Click to learn more.)"><span class="icon icon-question-mark "></span></a></div></form></li><li class=" "><a data-locale="de" href="/de/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>Deutsch</span><span title="Diese Übersetzung ist Teil eines Experiments."><span class="icon icon-experimental "></span></span></a></li><li class=" "><a data-locale="es" href="/es/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>Español</span></a></li><li class=" "><a data-locale="fr" href="/fr/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>Français</span></a></li><li class=" "><a data-locale="ja" href="/ja/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>日本語</span></a></li><li class=" "><a data-locale="ko" href="/ko/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>한국어</span></a></li><li class=" "><a data-locale="zh-CN" href="/zh-CN/docs/Learn/Forms/Basic_native_form_controls" class="button submenu-item"><span>中文 (简体)</span></a></li></ul></div></div></li></ul></div></div></div></div><div class="main-wrapper"><div class="sidebar-container"><aside id="sidebar-quicklinks" class="sidebar" data-macro="LearnSidebar"><button type="button" class="button action backdrop" aria-label="Collapse sidebar"><span class="button-wrap"></span></button><nav aria-label="Related Topics" class="sidebar-inner"><header class="sidebar-actions"><section class="sidebar-filter-container"><div class="sidebar-filter "><label id="sidebar-filter-label" class="sidebar-filter-label" for="sidebar-filter-input"><span class="icon icon-filter"></span><span class="visually-hidden">Filter sidebar</span></label><input id="sidebar-filter-input" autoComplete="off" class="sidebar-filter-input-field false" type="text" placeholder="Filter" value=""/><button type="button" class="button action has-icon clear-sidebar-filter-button"><span class="button-wrap"><span class="icon icon-cancel "></span><span class="visually-hidden">Clear filter input</span></span></button></div></section></header><div class="sidebar-inner-nav"><div class="in-nav-toc"><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">In this article</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#text_input_fields">Text input fields</a></li><li class="document-toc-item "><a class="document-toc-link" href="#checkable_items_checkboxes_and_radio_buttons">Checkable items: checkboxes and radio buttons</a></li><li class="document-toc-item "><a class="document-toc-link" href="#actual_buttons">Actual buttons</a></li><li class="document-toc-item "><a class="document-toc-link" href="#file_picker">File picker</a></li><li class="document-toc-item "><a class="document-toc-link" href="#common_attributes">Common attributes</a></li><li class="document-toc-item "><a class="document-toc-link" href="#test_your_skills!">Test your skills!</a></li><li class="document-toc-item "><a class="document-toc-link" href="#summary">Summary</a></li></ul></section></div></div><div class="sidebar-body"><ol><li class="section"><a href="/en-US/docs/Learn/Getting_started_with_the_web">Complete beginners start here!</a></li><li><details><summary>Getting started with the web</summary><ol><li><a href="/en-US/docs/Learn/Getting_started_with_the_web">Getting started with the web</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/Installing_basic_software">Installing basic software</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like">What will your website look like?</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/Dealing_with_files">Dealing with files</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/HTML_basics">HTML basics</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics">CSS basics</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics">JavaScript basics</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website">Publishing your website</a></li><li><a href="/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works">How the web works</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/HTML">HTML — Structuring the web</a></li><li><details><summary>Introduction to HTML</summary><ol><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML">Introduction to HTML</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started">Getting started with HTML</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML">What's in the head? Metadata in HTML</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals">HTML text fundamentals</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks">Creating hyperlinks</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Advanced_text_formatting">Advanced text formatting</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Document_and_website_structure">Document and website structure</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Debugging_HTML">Debugging HTML</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Marking_up_a_letter">Marking up a letter</a></li><li><a href="/en-US/docs/Learn/HTML/Introduction_to_HTML/Structuring_a_page_of_content">Structuring a page of content</a></li></ol></details></li><li><details><summary>Multimedia and embedding</summary><ol><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding">Multimedia and embedding</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Images_in_HTML">Images in HTML</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content">Video and audio content</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies">From object to iframe — other embedding technologies</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web">Adding vector graphics to the web</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images">Responsive images</a></li><li><a href="/en-US/docs/Learn/HTML/Multimedia_and_embedding/Mozilla_splash_page">Mozilla splash page</a></li></ol></details></li><li><details><summary>HTML tables</summary><ol><li><a href="/en-US/docs/Learn/HTML/Tables">HTML tables</a></li><li><a href="/en-US/docs/Learn/HTML/Tables/Basics">HTML table basics</a></li><li><a href="/en-US/docs/Learn/HTML/Tables/Advanced">HTML table advanced features and accessibility</a></li><li><a href="/en-US/docs/Learn/HTML/Tables/Structuring_planet_data">Structuring planet data</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/CSS">CSS — Styling the web</a></li><li><details><summary>CSS first steps</summary><ol><li><a href="/en-US/docs/Learn/CSS/First_steps">CSS first steps</a></li><li><a href="/en-US/docs/Learn/CSS/First_steps/What_is_CSS">What is CSS?</a></li><li><a href="/en-US/docs/Learn/CSS/First_steps/Getting_started">Getting started with CSS</a></li><li><a href="/en-US/docs/Learn/CSS/First_steps/How_CSS_is_structured">How CSS is structured</a></li><li><a href="/en-US/docs/Learn/CSS/First_steps/How_CSS_works">How CSS works</a></li><li><a href="/en-US/docs/Learn/CSS/First_steps/Styling_a_biography_page">Styling a biography page</a></li></ol></details></li><li><details><summary>CSS building blocks</summary><ol><li><a href="/en-US/docs/Learn/CSS/Building_blocks">CSS building blocks</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Selectors">CSS selectors</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Selectors/Type_Class_and_ID_Selectors">Type, class, and ID selectors</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Selectors/Attribute_selectors">Attribute selectors</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Selectors/Pseudo-classes_and_pseudo-elements">Pseudo-classes and pseudo-elements</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators">Combinators</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance">Cascade, specificity, and inheritance</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Cascade_layers">Cascade layers</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/The_box_model">The box model</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Backgrounds_and_borders">Backgrounds and borders</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Handling_different_text_directions">Handling different text directions</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Overflowing_content">Overflowing content</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Values_and_units">CSS values and units</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Sizing_items_in_CSS">Sizing items in CSS</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Images_media_form_elements">Images, media, and form elements</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Styling_tables">Styling tables</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Advanced_styling_effects">Advanced styling effects</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Debugging_CSS">Debugging CSS</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Organizing">Organizing your CSS</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Fundamental_CSS_comprehension">Fundamental CSS comprehension</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/Creating_fancy_letterheaded_paper">Creating fancy letterheaded paper</a></li><li><a href="/en-US/docs/Learn/CSS/Building_blocks/A_cool_looking_box">A cool-looking box</a></li></ol></details></li><li><details><summary>Styling text</summary><ol><li><a href="/en-US/docs/Learn/CSS/Styling_text">CSS styling text</a></li><li><a href="/en-US/docs/Learn/CSS/Styling_text/Fundamentals">Fundamental text and font styling</a></li><li><a href="/en-US/docs/Learn/CSS/Styling_text/Styling_lists">Styling lists</a></li><li><a href="/en-US/docs/Learn/CSS/Styling_text/Styling_links">Styling links</a></li><li><a href="/en-US/docs/Learn/CSS/Styling_text/Web_fonts">Web fonts</a></li><li><a href="/en-US/docs/Learn/CSS/Styling_text/Typesetting_a_homepage">Typesetting a community school homepage</a></li></ol></details></li><li><details><summary>CSS layout</summary><ol><li><a href="/en-US/docs/Learn/CSS/CSS_layout">CSS layout</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Introduction">Introduction to CSS layout</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Normal_Flow">Normal Flow</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Flexbox">Flexbox</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Grids">Grids</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Floats">Floats</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Positioning">Positioning</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Multiple-column_Layout">Multiple-column layout</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design">Responsive design</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Media_queries">Beginner's guide to media queries</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Legacy_Layout_Methods">Legacy layout methods</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Supporting_Older_Browsers">Supporting older browsers</a></li><li><a href="/en-US/docs/Learn/CSS/CSS_layout/Fundamental_Layout_Comprehension">Fundamental layout comprehension</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/JavaScript">JavaScript — Dynamic client-side scripting</a></li><li><details><summary>JavaScript first steps</summary><ol><li><a href="/en-US/docs/Learn/JavaScript/First_steps">JavaScript first steps</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript">What is JavaScript?</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/A_first_splash">A first splash into JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong">What went wrong? Troubleshooting JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Variables">Storing the information you need — Variables</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Math">Basic math in JavaScript — numbers and operators</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Strings">Handling text — strings in JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Useful_string_methods">Useful string methods</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Arrays">Arrays</a></li><li><a href="/en-US/docs/Learn/JavaScript/First_steps/Silly_story_generator">Silly story generator</a></li></ol></details></li><li><details><summary>JavaScript building blocks</summary><ol><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks">JavaScript building blocks</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/conditionals">Making decisions in your code — conditionals</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Looping_code">Looping code</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Functions">Functions — reusable blocks of code</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Build_your_own_function">Build your own function</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Return_values">Function return values</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Events">Introduction to events</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling">Event bubbling</a></li><li><a href="/en-US/docs/Learn/JavaScript/Building_blocks/Image_gallery">Image gallery</a></li></ol></details></li><li><details><summary>Introducing JavaScript objects</summary><ol><li><a href="/en-US/docs/Learn/JavaScript/Objects">Introducing JavaScript objects</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Basics">JavaScript object basics</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Object_prototypes">Object prototypes</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Object-oriented_programming">Object-oriented programming</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Classes_in_JavaScript">Classes in JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/JSON">Working with JSON</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Object_building_practice">Object building practice</a></li><li><a href="/en-US/docs/Learn/JavaScript/Objects/Adding_bouncing_balls_features">Adding features to our bouncing balls demo</a></li></ol></details></li><li><details><summary>Asynchronous JavaScript</summary><ol><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous">Asynchronous JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Introducing">Introducing asynchronous JavaScript</a></li><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Promises">How to use promises</a></li><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Implementing_a_promise-based_API">How to implement a promise-based API</a></li><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Introducing_workers">Introducing workers</a></li><li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Sequencing_animations">Sequencing animations</a></li></ol></details></li><li><details><summary>Client-side web APIs</summary><ol><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs">Client-side web APIs</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction">Introduction to web APIs</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents">Manipulating documents</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Fetching_data">Fetching data from the server</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Third_party_APIs">Third-party APIs</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Drawing_graphics">Drawing graphics</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Video_and_audio_APIs">Video and Audio APIs</a></li><li><a href="/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage">Client-side storage</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Forms">Web forms — Working with user data</a></li><li><details open=""><summary>Web form building blocks</summary><ol><li><a href="/en-US/docs/Learn/Forms">Web form building blocks</a></li><li><a href="/en-US/docs/Learn/Forms/Your_first_form">Your first form</a></li><li><a href="/en-US/docs/Learn/Forms/How_to_structure_a_web_form">How to structure a web form</a></li><li><em><a href="/en-US/docs/Learn/Forms/Basic_native_form_controls" aria-current="page">Basic native form controls</a></em></li><li><a href="/en-US/docs/Learn/Forms/HTML5_input_types">The HTML5 input types</a></li><li><a href="/en-US/docs/Learn/Forms/Other_form_controls">Other form controls</a></li><li><a href="/en-US/docs/Learn/Forms/Styling_web_forms">Styling web forms</a></li><li><a href="/en-US/docs/Learn/Forms/Advanced_form_styling">Advanced form styling</a></li><li><a href="/en-US/docs/Learn/Forms/UI_pseudo-classes">UI pseudo-classes</a></li><li><a href="/en-US/docs/Learn/Forms/Form_validation">Client-side form validation</a></li><li><a href="/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data">Sending form data</a></li></ol></details></li><li><details><summary>Advanced web form techniques</summary><ol><li><a href="/en-US/docs/Learn/Forms/How_to_build_custom_form_controls">How to build custom form controls</a></li><li><a href="/en-US/docs/Learn/Forms/Sending_forms_through_JavaScript">Sending forms through JavaScript</a></li><li><a href="/en-US/docs/Learn/Forms/Property_compatibility_table_for_form_controls">CSS property compatibility table for form controls</a></li><li><a href="/en-US/docs/Learn/Forms/HTML_forms_in_legacy_browsers">HTML forms in legacy browsers</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Accessibility">Accessibility — Make the web usable by everyone</a></li><li><details><summary>Accessibility guides</summary><ol><li><a href="/en-US/docs/Learn/Accessibility">Accessibility</a></li><li><a href="/en-US/docs/Learn/Accessibility/What_is_accessibility">What is accessibility?</a></li><li><a href="/en-US/docs/Learn/Accessibility/HTML">HTML: A good basis for accessibility</a></li><li><a href="/en-US/docs/Learn/Accessibility/CSS_and_JavaScript">CSS and JavaScript accessibility best practices</a></li><li><a href="/en-US/docs/Learn/Accessibility/WAI-ARIA_basics">WAI-ARIA basics</a></li><li><a href="/en-US/docs/Learn/Accessibility/Multimedia">Accessible multimedia</a></li><li><a href="/en-US/docs/Learn/Accessibility/Mobile">Mobile accessibility</a></li><li><a href="/en-US/docs/Learn/Accessibility/Accessibility_troubleshooting">Assessment: Accessibility troubleshooting</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Performance">Performance — Making websites fast and responsive</a></li><li><details><summary>Performance guides</summary><ol><li><a href="/en-US/docs/Learn/Performance">Web performance</a></li><li><a href="/en-US/docs/Learn/Performance/why_web_performance">The "why" of web performance</a></li><li><a href="/en-US/docs/Learn/Performance/What_is_web_performance">What is web performance?</a></li><li><a href="/en-US/docs/Learn/Performance/Perceived_performance">Perceived performance</a></li><li><a href="/en-US/docs/Learn/Performance/Measuring_performance">Measuring performance</a></li><li><a href="/en-US/docs/Learn/Performance/Multimedia">Multimedia: Images</a></li><li><a href="/en-US/docs/Learn/Performance/video">Multimedia: video</a></li><li><a href="/en-US/docs/Learn/Performance/JavaScript">JavaScript performance optimization</a></li><li><a href="/en-US/docs/Learn/Performance/HTML">HTML performance optimization</a></li><li><a href="/en-US/docs/Learn/Performance/CSS">CSS performance optimization</a></li><li><a href="/en-US/docs/Learn/Performance/business_case_for_performance">The business case for web performance</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/MathML">MathML — Writing mathematics with MathML</a></li><li><details><summary>MathML first steps</summary><ol><li><a href="/en-US/docs/Learn/MathML/First_steps">MathML first steps</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Getting_started">Getting started with MathML</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Text_containers">MathML Text Containers</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Fractions_and_roots">MathML fractions and roots</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Scripts">MathML scripted elements</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Tables">MathML tables</a></li><li><a href="/en-US/docs/Learn/MathML/First_steps/Three_famous_mathematical_formulas">Three famous mathematical formulas</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/../Games">Games — Developing games for the web</a></li><li><details><summary>Guides and tutorials</summary><ol><li><a href="/en-US/docs/Games/Introduction">Introduction to game development for the Web</a></li><li><a href="/en-US/docs/Games/Techniques">Techniques for game development</a></li><li><a href="/en-US/docs/Games/Tutorials">Tutorials</a></li><li><a href="/en-US/docs/Games/Publishing_games">Publishing games</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Tools_and_testing">Tools and testing</a></li><li><details><summary>Client-side web development tools</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools">Understanding client-side web development tools</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Overview">Client-side tooling overview</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line">Command line crash course</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Package_management">Package management basics</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Introducing_complete_toolchain">Introducing a complete toolchain</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Deployment">Deploying our app</a></li></ol></details></li><li><details><summary>Introduction to client-side frameworks</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Introduction">Introduction to client-side frameworks</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Main_features">Framework main features</a></li></ol></details></li><li><details><summary>React</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started">Getting started with React</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning">Beginning our React todo list</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_components">Componentizing our React app</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_events_state">React interactivity: Events and state</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_filtering_conditional_rendering">React interactivity: Editing, filtering, conditional rendering</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_accessibility">Accessibility in React</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_resources">React resources</a></li></ol></details></li><li><details><summary>Ember</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_getting_started">Getting started with Ember</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_structure_componentization">Ember app structure and componentization</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_interactivity_events_state">Ember interactivity: Events, classes and state</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_conditional_footer">Ember Interactivity: Footer functionality, conditional rendering</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_routing">Routing in Ember</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_resources">Ember resources and troubleshooting</a></li></ol></details></li><li><details><summary>Vue</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started">Getting started with Vue</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_first_component">Creating our first Vue component</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_rendering_lists">Rendering a list of Vue components</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_methods_events_models">Adding a new todo form: Vue events, methods, and models</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_styling">Styling Vue components with CSS</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_computed_properties">Using Vue computed properties</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_conditional_rendering">Vue conditional rendering: editing existing todos</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_refs_focus_management">Vue refs and lifecycle methods for focus management</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_resources">Vue resources</a></li></ol></details></li><li><details><summary>Svelte</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_getting_started">Getting started with Svelte</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_Todo_list_beginning">Starting our Svelte to-do list app</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_variables_props">Dynamic behavior in Svelte: working with variables and props</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_components">Componentizing our Svelte app</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_reactivity_lifecycle_accessibility">Advanced Svelte: Reactivity, lifecycle, accessibility</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_stores">Working with Svelte stores</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_TypeScript">TypeScript support in Svelte</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_deployment_next">Deployment and next steps</a></li></ol></details></li><li><details><summary>Angular</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started">Getting started with Angular</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_todo_list_beginning">Beginning our Angular todo list app</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_styling">Styling our Angular app</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_item_component">Creating an item component</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_filtering">Filtering our to-do items</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_building">Building Angular applications and further resources</a></li></ol></details></li><li><details><summary>Git and GitHub</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/GitHub">Git and GitHub</a></li></ol></details></li><li><details><summary>Cross browser testing</summary><ol><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing">Cross browser testing</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Introduction">Introduction to cross-browser testing</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Testing_strategies">Strategies for carrying out testing</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS">Handling common HTML and CSS problems</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/JavaScript">Handling common JavaScript problems</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility">Handling common accessibility problems</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection">Implementing feature detection</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Automated_testing">Introduction to automated testing</a></li><li><a href="/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Your_own_automation_environment">Setting up your own test automation environment</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Server-side">Server-side website programming</a></li><li><details><summary>First steps</summary><ol><li><a href="/en-US/docs/Learn/Server-side/First_steps">Server-side website programming first steps</a></li><li><a href="/en-US/docs/Learn/Server-side/First_steps/Introduction">Introduction to the server side</a></li><li><a href="/en-US/docs/Learn/Server-side/First_steps/Client-Server_overview">Client-Server Overview</a></li><li><a href="/en-US/docs/Learn/Server-side/First_steps/Web_frameworks">Server-side web frameworks</a></li><li><a href="/en-US/docs/Learn/Server-side/First_steps/Website_security">Website security</a></li></ol></details></li><li><details><summary>Django web framework (Python)</summary><ol><li><a href="/en-US/docs/Learn/Server-side/Django">Django Web Framework (Python)</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Introduction">Django introduction</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/development_environment">Setting up a Django development environment</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Tutorial_local_library_website">Django Tutorial: The Local Library website</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/skeleton_website">Django Tutorial Part 2: Creating a skeleton website</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Models">Django Tutorial Part 3: Using models</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Admin_site">Django Tutorial Part 4: Django admin site</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Home_page">Django Tutorial Part 5: Creating our home page</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Generic_views">Django Tutorial Part 6: Generic list and detail views</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Sessions">Django Tutorial Part 7: Sessions framework</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Authentication">Django Tutorial Part 8: User authentication and permissions</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Forms">Django Tutorial Part 9: Working with forms</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Testing">Django Tutorial Part 10: Testing a Django web application</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/Deployment">Django Tutorial Part 11: Deploying Django to production</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/web_application_security">Django web application security</a></li><li><a href="/en-US/docs/Learn/Server-side/Django/django_assessment_blog">Assessment: DIY Django mini blog</a></li></ol></details></li><li><details><summary>Express Web Framework (Node.js/JavaScript)</summary><ol><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs">Express web framework (Node.js/JavaScript)</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/Introduction">Express/Node introduction</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/development_environment">Setting up a Node development environment</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/Tutorial_local_library_website">Express Tutorial: The Local Library website</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/skeleton_website">Express Tutorial Part 2: Creating a skeleton website</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/mongoose">Express Tutorial Part 3: Using a Database (with Mongoose)</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/routes">Express Tutorial Part 4: Routes and controllers</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/Displaying_data">Express Tutorial Part 5: Displaying library data</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/forms">Express Tutorial Part 6: Working with forms</a></li><li><a href="/en-US/docs/Learn/Server-side/Express_Nodejs/deployment">Express Tutorial Part 7: Deploying to production</a></li></ol></details></li><li class="section"><a href="/en-US/docs/Learn/Common_questions">Further resources</a></li><li><details><summary>Common questions</summary><ol><li><a href="/en-US/docs/Learn/Common_questions">Common questions</a></li><li><a href="/en-US/docs/Learn/HTML/Howto">Use HTML to solve common problems</a></li><li><a href="/en-US/docs/Learn/CSS/Howto">Use CSS to solve common problems</a></li><li><a href="/en-US/docs/Learn/JavaScript/Howto">Solve common problems in your JavaScript code</a></li><li><a href="/en-US/docs/Learn/Common_questions/Web_mechanics">Web mechanics</a></li><li><a href="/en-US/docs/Learn/Common_questions/Tools_and_setup">Tools and setup</a></li><li><a href="/en-US/docs/Learn/Common_questions/Design_and_accessibility">Design and accessibility</a></li></ol></details></li></ol></div></div><section class="place side"></section></nav></aside><div class="toc-container"><aside class="toc"><nav><div class="document-toc-container"><section class="document-toc"><header><h2 class="document-toc-heading">In this article</h2></header><ul class="document-toc-list"><li class="document-toc-item "><a class="document-toc-link" href="#text_input_fields">Text input fields</a></li><li class="document-toc-item "><a class="document-toc-link" href="#checkable_items_checkboxes_and_radio_buttons">Checkable items: checkboxes and radio buttons</a></li><li class="document-toc-item "><a class="document-toc-link" href="#actual_buttons">Actual buttons</a></li><li class="document-toc-item "><a class="document-toc-link" href="#file_picker">File picker</a></li><li class="document-toc-item "><a class="document-toc-link" href="#common_attributes">Common attributes</a></li><li class="document-toc-item "><a class="document-toc-link" href="#test_your_skills!">Test your skills!</a></li><li class="document-toc-item "><a class="document-toc-link" href="#summary">Summary</a></li></ul></section></div></nav></aside><section class="place side"></section></div></div><main id="content" class="main-content "><article class="main-page-content" lang="en-US"><header><h1>Basic native form controls</h1></header><div class="section-content"><ul class="prev-next"> <li><a class="button secondary" href="/en-US/docs/Learn/Forms/How_to_structure_a_web_form"><span class="button-wrap"> Previous </span></a></li> <li><a class="button secondary" href="/en-US/docs/Learn/Forms"><span class="button-wrap"> Overview: Web form building blocks</span></a></li> <li><a class="button secondary" href="/en-US/docs/Learn/Forms/HTML5_input_types"><span class="button-wrap"> Next </span></a></li> </ul> <p>In the <a href="/en-US/docs/Learn/Forms/How_to_structure_a_web_form">previous article</a>, we marked up a functional web form example, introducing some form controls and common structural elements, and focusing on accessibility best practices. Next, we will look at the functionality of the different form controls, or widgets, in detail — studying all the different options available to collect different types of data. In this particular article, we will look at the original set of form controls, available in all browsers since the early days of the web.</p> <figure class="table-container"><table> <tbody> <tr> <th scope="row">Prerequisites:</th> <td> A basic <a href="/en-US/docs/Learn/HTML/Introduction_to_HTML">understanding of HTML</a>. </td> </tr> <tr> <th scope="row">Objective:</th> <td> To understand in detail the original set of native form widgets available in browsers for collecting data, and how to implement them using HTML. </td> </tr> </tbody> </table></figure> <p>You've already met some form elements, including <a href="/en-US/docs/Web/HTML/Element/form"><code>&lt;form&gt;</code></a>, <a href="/en-US/docs/Web/HTML/Element/fieldset"><code>&lt;fieldset&gt;</code></a>, <a href="/en-US/docs/Web/HTML/Element/legend"><code>&lt;legend&gt;</code></a>, <a href="/en-US/docs/Web/HTML/Element/textarea"><code>&lt;textarea&gt;</code></a>, <a href="/en-US/docs/Web/HTML/Element/label"><code>&lt;label&gt;</code></a>, <a href="/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a>, and <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a>. This article covers:</p> <ul> <li>The common input types <a href="/en-US/docs/Web/HTML/Element/input/button">button</a>, <a href="/en-US/docs/Web/HTML/Element/input/checkbox">checkbox</a>, <a href="/en-US/docs/Web/HTML/Element/input/file">file</a>, <a href="/en-US/docs/Web/HTML/Element/input/hidden">hidden</a>, <a href="/en-US/docs/Web/HTML/Element/input/image">image</a>, <a href="/en-US/docs/Web/HTML/Element/input/password">password</a>, <a href="/en-US/docs/Web/HTML/Element/input/radio">radio</a>, <a href="/en-US/docs/Web/HTML/Element/input/reset">reset</a>, <a href="/en-US/docs/Web/HTML/Element/input/submit">submit</a>, and <a href="/en-US/docs/Web/HTML/Element/input/text">text</a>.</li> <li>Some of the attributes that are common to all form controls.</li> </ul> <div class="notecard note"> <p><strong>Note:</strong> We cover additional, more powerful form controls in the next two articles. If you want a more advanced reference, you should consult our <a href="/en-US/docs/Web/HTML/Element#forms">HTML forms element reference</a>, and in particular our extensive <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code> types</a> reference.</p> </div></div><section aria-labelledby="text_input_fields"><h2 id="text_input_fields"><a href="#text_input_fields">Text input fields</a></h2><div class="section-content"><p>Text <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> fields are the most basic form widgets. They are a very convenient way to let the user enter any kind of data, and we've already seen a few simple examples.</p> <div class="notecard note"> <p><strong>Note:</strong> HTML form text fields are simple plain text input controls. This means that you cannot use them to perform rich text editing (bold, italic, etc.). All rich text editors you'll encounter are custom widgets created with HTML, CSS, and JavaScript.</p> </div> <p>All basic text controls share some common behaviors:</p> <ul> <li>They can be marked as <a href="/en-US/docs/Web/HTML/Element/input#readonly"><code>readonly</code></a> (the user cannot modify the input value but it is still sent with the rest of the form data) or <a href="/en-US/docs/Web/HTML/Element/input#disabled"><code>disabled</code></a> (the input value can't be modified and is never sent with the rest of the form data).</li> <li>They can have a <a href="/en-US/docs/Web/HTML/Element/input#placeholder"><code>placeholder</code></a>; this is the text that appears inside the text input box that should be used to briefly describe the purpose of the box.</li> <li>They can be constrained in <a href="/en-US/docs/Web/HTML/Attributes/size"><code>size</code></a> (the physical size of the box) and <a href="/en-US/docs/Web/HTML/Attributes/maxlength"><code>maxlength</code></a> (the maximum number of characters that can be entered into the box).</li> <li>They can benefit from spell-checking (using the <a href="/en-US/docs/Web/HTML/Global_attributes/spellcheck"><code>spellcheck</code></a> attribute).</li> </ul> <div class="notecard note"> <p><strong>Note:</strong> The <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element is unique amongst HTML elements because it can take many forms depending on its <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute value. It is used for creating most types of form widgets including single line text fields, time and date controls, controls without text input like checkboxes, radio buttons, and color pickers, and buttons.</p> </div></div></section><section aria-labelledby="single_line_text_fields"><h3 id="single_line_text_fields"><a href="#single_line_text_fields">Single line text fields</a></h3><div class="section-content"><p>A single line text field is created using an <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element whose <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute value is set to <code>text</code>, or by omitting the <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute altogether (<code>text</code> is the default value). The value <code>text</code> for this attribute is also the fallback value if the value you specify for the <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute is unknown by the browser (for example if you specify <code>type="color"</code> and the browser doesn't support native color pickers).</p> <div class="notecard note"> <p><strong>Note:</strong> You can find examples of all the single line text field types on GitHub at <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/single-line-text-fields.html" class="external" target="_blank">single-line-text-fields.html</a> (<a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/single-line-text-fields.html" class="external" target="_blank">see it live also</a>).</p> </div> <p>Here is a basic single line text field example:</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="text" id="comment" name="comment" value="I'm a text field" /&gt; </code></pre></div> <p>Single line text fields have only one true constraint: if you type text with line breaks, the browser removes those line breaks before sending the data to the server.</p> <p>The screenshot below shows a text input in default, focused, and disabled states. Most browsers indicate the focused state using a focus ring around the control and the disabled state using grey text or a faded/semi-opaque control.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/disabled.png" alt="Screenshot of the default, focused and disabled states text input in Chrome on macOS" width="657" height="88" loading="lazy"> </p> <p>The screenshots used in this document were taken in the Chrome browser on macOS. There may be minor variations in these fields/buttons across different browsers, but the basic highlighting technique remains similar.</p> <div class="notecard note"> <p><strong>Note:</strong> We discuss values for the <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute that enforce specific validation constraints including color, email, and url input types, in the next article, <a href="/en-US/docs/Learn/Forms/HTML5_input_types">The HTML5 input types</a>.</p> </div> <h4 id="password_field">Password field</h4> <p>One of the original input types was the <code>password</code> text field type:</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="password" id="pwd" name="pwd" /&gt; </code></pre></div> <p>The following screenshot shows Password input field in which each input character is shown as a dot.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/password.png" alt="Password field in chrome 115 on macOS" width="638" height="115" loading="lazy"> </p> <p>The <code>password</code> value doesn't add any special constraints to the entered text, but it does obscure the value entered into the field (e.g. with dots or asterisks) so it can't be easily read by others.</p> <p>Keep in mind this is just a user interface feature; unless you submit your form securely, it will get sent in plain text, which is bad for security — a malicious party could intercept your data and steal passwords, credit card details, or whatever else you've submitted. The best way to protect users from this is to host any pages involving forms over a secure connection (i.e. located at an <code>https://</code> address), so the data is encrypted before it is sent.</p> <p>Browsers recognize the security implications of sending form data over an insecure connection, and have warnings to deter users from using insecure forms. For more information on what Firefox implements, see <a href="/en-US/docs/Web/Security/Insecure_passwords">Insecure passwords</a>.</p></div></section><section aria-labelledby="hidden_content"><h3 id="hidden_content"><a href="#hidden_content">Hidden content</a></h3><div class="section-content"><p>Another original text control is the <code>hidden</code> input type. This is used to create a form control that is invisible to the user, but is still sent to the server along with the rest of the form data once submitted — for example you might want to submit a timestamp to the server stating when an order was placed. Because it is hidden, the user can not see nor intentionally edit the value, it will never receive focus, and a screen reader will not notice it either.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="hidden" id="timestamp" name="timestamp" value="1286705410" /&gt; </code></pre></div> <p>If you create such an element, it's required to set its <code>name</code> and <code>value</code> attributes. The value can be dynamically set via JavaScript. The <code>hidden</code> input type should not have an associated label.</p> <p>Other text input types, like <a href="/en-US/docs/Web/HTML/Element/input/search">search</a>, <a href="/en-US/docs/Web/HTML/Element/input/url">url</a>, and <a href="/en-US/docs/Web/HTML/Element/input/tel">tel</a>, will be covered in the next tutorial, <a href="/en-US/docs/Learn/Forms/HTML5_input_types">HTML5 input types</a>.</p></div></section><section aria-labelledby="checkable_items_checkboxes_and_radio_buttons"><h2 id="checkable_items_checkboxes_and_radio_buttons"><a href="#checkable_items_checkboxes_and_radio_buttons">Checkable items: checkboxes and radio buttons</a></h2><div class="section-content"><p>Checkable items are controls whose state you can change by clicking on them or their associated labels. There are two kinds of checkable items: the checkbox and the radio button. Both use the <a href="/en-US/docs/Web/HTML/Element/input/checkbox#checked"><code>checked</code></a> attribute to indicate whether the widget is checked by default or not.</p> <p>It's worth noting that these widgets do not behave exactly like other form widgets. For most form widgets, once the form is submitted all widgets that have a <a href="/en-US/docs/Web/HTML/Element/input#name"><code>name</code></a> attribute are sent, even if no value has been filled out. In the case of checkable items, their values are sent only if they are checked. If they are not checked, nothing is sent, not even their name. If they are checked but have no value, the name is sent with a value of <em>on.</em></p> <div class="notecard note"> <p><strong>Note:</strong> You can find the examples from this section on GitHub as <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/checkable-items.html" class="external" target="_blank">checkable-items.html</a> (<a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/checkable-items.html" class="external" target="_blank">see it live also</a>).</p> </div> <p>For maximum usability/accessibility, you are advised to surround each list of related items in a <a href="/en-US/docs/Web/HTML/Element/fieldset"><code>&lt;fieldset&gt;</code></a>, with a <a href="/en-US/docs/Web/HTML/Element/legend"><code>&lt;legend&gt;</code></a> providing an overall description of the list. Each individual pair of <a href="/en-US/docs/Web/HTML/Element/label"><code>&lt;label&gt;</code></a>/<a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> elements should be contained in its own list item (or similar). The associated <a href="/en-US/docs/Web/HTML/Element/label"><code>&lt;label&gt;</code></a> is generally placed immediately before or after the radio button or checkbox, with the instructions for the group of radio button or checkboxes generally being the content of the <a href="/en-US/docs/Web/HTML/Element/legend"><code>&lt;legend&gt;</code></a>. See the examples linked above for structural examples.</p></div></section><section aria-labelledby="checkbox"><h3 id="checkbox"><a href="#checkbox">Checkbox</a></h3><div class="section-content"><p>A checkbox is created using the <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element with a <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute set to the value <a href="/en-US/docs/Web/HTML/Element/input/checkbox">checkbox</a>.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="checkbox" id="questionOne" name="subscribe" value="yes" checked /&gt; </code></pre></div> <p>Related checkbox items should use the same <a href="/en-US/docs/Web/HTML/Element/input#name"><code>name</code></a> attribute. Including the <a href="/en-US/docs/Web/HTML/Element/input/checkbox#checked"><code>checked</code></a> attribute makes the checkbox checked automatically when the page loads. Clicking the checkbox or its associated label toggles the checkbox on and off.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;fieldset&gt; &lt;legend&gt;Choose all the vegetables you like to eat&lt;/legend&gt; &lt;ul&gt; &lt;li&gt; &lt;label for="carrots"&gt;Carrots&lt;/label&gt; &lt;input type="checkbox" id="carrots" name="vegetable" value="carrots" checked /&gt; &lt;/li&gt; &lt;li&gt; &lt;label for="peas"&gt;Peas&lt;/label&gt; &lt;input type="checkbox" id="peas" name="vegetable" value="peas" /&gt; &lt;/li&gt; &lt;li&gt; &lt;label for="cabbage"&gt;Cabbage&lt;/label&gt; &lt;input type="checkbox" id="cabbage" name="vegetable" value="cabbage" /&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/fieldset&gt; </code></pre></div> <p>The following screenshot shows checkboxes in the default, focused, and disabled states. Checkboxes in the default and disabled states appear checked, whereas in the focused state, the checkbox is unchecked, with focus ring around it.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/checkboxes.png" alt="Default, focused and disabled Checkboxes in chrome 115 on macOS" width="691" height="101" loading="lazy"> </p> <div class="notecard note"> <p><strong>Note:</strong> Any checkboxes and radio buttons with the <a href="/en-US/docs/Web/HTML/Element/input/checkbox#checked"><code>checked</code></a> attribute on load match the <a href="/en-US/docs/Web/CSS/:default"><code>:default</code></a> pseudo-class, even if they are no longer checked. Any that are currently checked match the <a href="/en-US/docs/Web/CSS/:checked"><code>:checked</code></a> pseudo-class.</p> </div> <p>Due to the on-off nature of checkboxes, the checkbox is considered a toggle button, with many developers and designers expanding on the default checkbox styling to create buttons that look like toggle switches. You can <a href="https://mdn.github.io/learning-area/html/forms/toggle-switch-example/" class="external" target="_blank">see an example in action here</a> (also see the <a href="https://github.com/mdn/learning-area/blob/main/html/forms/toggle-switch-example/index.html" class="external" target="_blank">source code</a>).</p></div></section><section aria-labelledby="radio_button"><h3 id="radio_button"><a href="#radio_button">Radio button</a></h3><div class="section-content"><p>A radio button is created using the <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element with its <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute set to the value <code>radio</code>:</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="radio" id="soup" name="meal" value="soup" checked /&gt; </code></pre></div> <p>Several radio buttons can be tied together. If they share the same value for their <a href="/en-US/docs/Web/HTML/Element/input#name"><code>name</code></a> attribute, they will be considered to be in the same group of buttons. Only one button in a given group may be checked at a time; this means that when one of them is checked all the others automatically get unchecked. When the form is sent, only the value of the checked radio button is sent. If none of them are checked, the whole pool of radio buttons is considered to be in an unknown state and no value is sent with the form. Once one of the radio buttons in a same-named group of buttons is checked, it is not possible for the user to uncheck all the buttons without resetting the form.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;fieldset&gt; &lt;legend&gt;What is your favorite meal?&lt;/legend&gt; &lt;ul&gt; &lt;li&gt; &lt;label for="soup"&gt;Soup&lt;/label&gt; &lt;input type="radio" id="soup" name="meal" value="soup" checked /&gt; &lt;/li&gt; &lt;li&gt; &lt;label for="curry"&gt;Curry&lt;/label&gt; &lt;input type="radio" id="curry" name="meal" value="curry" /&gt; &lt;/li&gt; &lt;li&gt; &lt;label for="pizza"&gt;Pizza&lt;/label&gt; &lt;input type="radio" id="pizza" name="meal" value="pizza" /&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/fieldset&gt; </code></pre></div> <p>The following screenshot shows default and disabled radio buttons in the checked state, along with a focused radio button in the unchecked state.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/radios.png" alt="Default, focused and disabled Radio buttons in chrome 115 on macOS" width="661" height="104" loading="lazy"> </p></div></section><section aria-labelledby="actual_buttons"><h2 id="actual_buttons"><a href="#actual_buttons">Actual buttons</a></h2><div class="section-content"><p>The radio button isn't actually a button, despite its name; let's move on and look at actual buttons! There are three input types that produce buttons:</p> <dl> <dt id="submit"><a href="#submit"><code>submit</code></a></dt> <dd> <p>Sends the form data to the server. For <a href="/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a> elements, omitting the <code>type</code> attribute (or an invalid value of <code>type</code>) results in a submit button.</p> </dd> <dt id="reset"><a href="#reset"><code>reset</code></a></dt> <dd> <p>Resets all form widgets to their default values.</p> </dd> <dt id="button"><a href="#button"><code>button</code></a></dt> <dd> <p>Buttons that have no automatic effect but can be customized using JavaScript code.</p> </dd> </dl> <p>Then we also have the <a href="/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a> element itself. This can take a <code>type</code> attribute of value <code>submit</code>, <code>reset</code>, or <code>button</code> to mimic the behavior of the three <code>&lt;input&gt;</code> types mentioned above. The main difference between the two is that actual <code>&lt;button&gt;</code> elements are much easier to style.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="submit" value="Submit this form" /&gt; &lt;input type="reset" value="Reset this form" /&gt; &lt;input type="button" value="Do Nothing without JavaScript" /&gt; &lt;button type="submit"&gt;Submit this form&lt;/button&gt; &lt;button type="reset"&gt;Reset this form&lt;/button&gt; &lt;button type="button"&gt;Do Nothing without JavaScript&lt;/button&gt; </code></pre></div> <div class="code-example"><pre class="brush: html hidden notranslate"><code>&lt;div class="button-demo"&gt; &lt;p&gt;Using &amp;lt;input&gt;&lt;/p&gt; &lt;p&gt; &lt;input type="submit" value="Submit this form" /&gt; &lt;input type="reset" value="Reset this form" /&gt; &lt;input type="button" value="Do Nothing without JavaScript" /&gt; &lt;/p&gt; &lt;p&gt;Using &amp;lt;button&gt;&lt;/p&gt; &lt;p&gt; &lt;button type="submit"&gt;Submit this form&lt;/button&gt; &lt;button type="reset"&gt;Reset this form&lt;/button&gt; &lt;button type="button"&gt;Do Nothing without JavaScript&lt;/button&gt; &lt;/p&gt; &lt;/div&gt; </code></pre></div> <div class="code-example"><pre class="brush: css hidden notranslate"><code>button, input { display: none; } .button-demo button, .button-demo input { all: revert; } </code></pre></div><div class="code-example"><div class="example-header"></div><iframe class="sample-code-frame" title="Actual buttons sample" id="frame_actual_buttons" width="500" height="250" src="about:blank" data-live-path="/en-US/docs/Learn/Forms/Basic_native_form_controls" data-live-id="actual_buttons" sandbox="allow-same-origin allow-scripts" loading="lazy"></iframe></div> <div class="notecard note"> <p><strong>Note:</strong> The <code>image</code> input type also renders as a button. We'll cover that later too.</p> </div> <div class="notecard note"> <p><strong>Note:</strong> You can find the examples from this section on GitHub as <a href="https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/button-examples.html" class="external" target="_blank">button-examples.html</a> (<a href="https://mdn.github.io/learning-area/html/forms/native-form-widgets/button-examples.html" class="external" target="_blank">see it live also</a>).</p> </div> <p>Below you can find examples of each button <code>&lt;input&gt;</code> type, along with the equivalent <code>&lt;button&gt;</code> type.</p></div></section><section aria-labelledby="submit_2"><h3 id="submit_2"><a href="#submit_2">submit</a></h3><div class="section-content"><div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;button type="submit"&gt;This is a &lt;strong&gt;submit button&lt;/strong&gt;&lt;/button&gt; &lt;input type="submit" value="This is a submit button" /&gt; </code></pre></div></div></section><section aria-labelledby="reset_2"><h3 id="reset_2"><a href="#reset_2">reset</a></h3><div class="section-content"><div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;button type="reset"&gt;This is a &lt;strong&gt;reset button&lt;/strong&gt;&lt;/button&gt; &lt;input type="reset" value="This is a reset button" /&gt; </code></pre></div></div></section><section aria-labelledby="anonymous"><h3 id="anonymous"><a href="#anonymous">anonymous</a></h3><div class="section-content"><div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;button type="button"&gt;This is an &lt;strong&gt;anonymous button&lt;/strong&gt;&lt;/button&gt; &lt;input type="button" value="This is an anonymous button" /&gt; </code></pre></div> <p>Buttons always behave the same whether you use a <a href="/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a> element or an <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element. As you can see from the examples, however, <a href="/en-US/docs/Web/HTML/Element/button"><code>&lt;button&gt;</code></a> elements let you use HTML in their content, which is inserted between the opening and closing <code>&lt;button&gt;</code> tags. <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> elements on the other hand are <a href="/en-US/docs/Glossary/Void_element">void elements</a>; their displayed content is inserted inside the <code>value</code> attribute, and therefore only accepts plain text as content.</p> <p>The following screenshot shows a button in the default, focused, and disabled states. In the focused state, there is a focus ring around the button, and in the disabled state, the button is greyed out.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/buttons.png" alt="Default, focus, and disabled button states in chrome 115 on macOS" width="715" height="105" loading="lazy"> </p></div></section><section aria-labelledby="image_button"><h3 id="image_button"><a href="#image_button">Image button</a></h3><div class="section-content"><p>The <strong>image button</strong> control is rendered exactly like an <a href="/en-US/docs/Web/HTML/Element/img"><code>&lt;img&gt;</code></a> element, except that when the user clicks on it, it behaves like a submit button.</p> <p>An image button is created using an <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element with its <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute set to the value <code>image</code>. This element supports exactly the same set of attributes as the <a href="/en-US/docs/Web/HTML/Element/img"><code>&lt;img&gt;</code></a> element, plus all the attributes supported by other form buttons.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="image" alt="Click me!" src="my-img.png" width="80" height="30" /&gt; </code></pre></div> <p>If the image button is used to submit the form, this control doesn't submit its value — instead, the X and Y coordinates of the click on the image are submitted (the coordinates are relative to the image, meaning that the upper-left corner of the image represents the coordinate (0, 0)). The coordinates are sent as two key/value pairs:</p> <ul> <li>The X value key is the value of the <a href="/en-US/docs/Web/HTML/Element/input#name"><code>name</code></a> attribute followed by the string "<em>.x</em>".</li> <li>The Y value key is the value of the <a href="/en-US/docs/Web/HTML/Element/input#name"><code>name</code></a> attribute followed by the string "<em>.y</em>".</li> </ul> <p>So for example when you click on the image at coordinate (123, 456) and it submits via the <code>get</code> method, you'll see the values appended to the URL as follows:</p> <div class="code-example"><div class="example-header"><span class="language-name">url</span></div><pre class="brush: url notranslate"><code>http://foo.com?pos.x=123&amp;pos.y=456 </code></pre></div> <p>This is a very convenient way to build a "hot map". How these values are sent and retrieved is detailed in the <a href="/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data">Sending form data</a> article.</p></div></section><section aria-labelledby="file_picker"><h2 id="file_picker"><a href="#file_picker">File picker</a></h2><div class="section-content"><p>There is one last <code>&lt;input&gt;</code> type that came to us in early HTML: the file input type. Forms are able to send files to a server (this specific action is also detailed in the <a href="/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data">Sending form data</a> article). The file picker widget can be used to choose one or more files to send.</p> <p>To create a <a href="/en-US/docs/Web/HTML/Element/input/file">file picker widget</a>, you use the <a href="/en-US/docs/Web/HTML/Element/input"><code>&lt;input&gt;</code></a> element with its <a href="/en-US/docs/Web/HTML/Element/input#type"><code>type</code></a> attribute set to <code>file</code>. The types of files that are accepted can be constrained using the <a href="/en-US/docs/Web/HTML/Element/input#accept"><code>accept</code></a> attribute. In addition, if you want to let the user pick more than one file, you can do so by adding the <a href="/en-US/docs/Web/HTML/Element/input#multiple"><code>multiple</code></a> attribute.</p></div></section><section aria-labelledby="example"><h3 id="example"><a href="#example">Example</a></h3><div class="section-content"><p>In this example, a file picker is created that requests graphic image files. The user is allowed to select multiple files in this case.</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="file" name="file" id="file" accept="image/*" multiple /&gt; </code></pre></div> <p>On some mobile devices, the file picker can access photos, videos, and audio captured directly by the device's camera and microphone by adding capture information to the <code>accept</code> attribute like so:</p> <div class="code-example"><div class="example-header"><span class="language-name">html</span></div><pre class="brush: html notranslate"><code>&lt;input type="file" accept="image/*;capture=camera" /&gt; &lt;input type="file" accept="video/*;capture=camcorder" /&gt; &lt;input type="file" accept="audio/*;capture=microphone" /&gt; </code></pre></div> <p>The following screenshot shows the file picker widget in the default, focus, and disabled states when no file is selected.</p> <p> <img src="/en-US/docs/Learn/Forms/Basic_native_form_controls/filepickers.png" alt="File picker widget in default, focus, and disabled states in chrome 115 on macOS" width="991" height="111" loading="lazy"> </p></div></section><section aria-labelledby="common_attributes"><h2 id="common_attributes"><a href="#common_attributes">Common attributes</a></h2><div class="section-content"><p>Many of the elements used to define form controls have some of their own specific attributes. However, there is a set of attributes common to all form elements. You've met some of these already, but below is a list of those common attributes, for your reference:</p> <figure class="table-container"><table class="no-markdown"> <thead> <tr> <th scope="col">Attribute name</th> <th scope="col">Default value</th> <th scope="col">Description</th> </tr> </thead> <tbody> <tr> <td><code><a href="/en-US/docs/Web/HTML/Global_attributes/autofocus">autofocus</a></code></td> <td>false</td> <td> This Boolean attribute lets you specify that the element should automatically have input focus when the page loads. Only one form-associated element in a document can have this attribute specified. </td> </tr> <tr> <td><code><a href="/en-US/docs/Web/HTML/Attributes/disabled">disabled</a></code></td> <td>false</td> <td> This Boolean attribute indicates that the user cannot interact with the element. If this attribute is not specified, the element inherits its setting from the containing element, for example, <a href="/en-US/docs/Web/HTML/Element/fieldset"><code>&lt;fieldset&gt;</code></a>; if there is no containing element with the <code>disabled</code> attribute set, then the element is enabled. </td> </tr> <tr> <td><code><a href="/en-US/docs/Web/HTML/Element/input#form">form</a></code></td> <td></td> <td> The <code>&lt;form&gt;</code> element that the widget is associated with, used if it is not nested within that form. The value of the attribute must be the <code>id</code> attribute of a <a href="/en-US/docs/Web/HTML/Element/form"><code>&lt;form&gt;</code></a> element in the same document. This lets you associate a form control with a form it is outside of, even if it is inside a different form element. </td> </tr> <tr> <td><code><a href="/en-US/docs/Web/HTML/Element/input#name">name</a></code></td> <td></td> <td>The name of the element; this is submitted with the form data.</td> </tr> <tr> <td><code><a href="/en-US/docs/Web/HTML/Element/input#value">value</a></code></td> <td></td> <td>The element's initial value.</td> </tr> </tbody> </table></figure></div></section><section aria-labelledby="test_your_skills!"><h2 id="test_your_skills!"><a href="#test_your_skills!">Test your skills!</a></h2><div class="section-content"><p>You've reached the end of this article, but can you remember the most important information? You can find some further tests to verify that you've retained this information before you move on — see <a href="/en-US/docs/Learn/Forms/Test_your_skills:_Basic_controls">Test your skills: Basic controls</a>.</p></div></section><section aria-labelledby="summary"><h2 id="summary"><a href="#summary">Summary</a></h2><div class="section-content"><p>This article has covered the older input types — the original set introduced in the early days of HTML that is well-supported in all browsers. In the next section, we'll take a look at the more modern values of the <code>type</code> attribute.</p><ul class="prev-next"> <li><a class="button secondary" href="/en-US/docs/Learn/Forms/How_to_structure_a_web_form"><span class="button-wrap"> Previous </span></a></li> <li><a class="button secondary" href="/en-US/docs/Learn/Forms"><span class="button-wrap"> Overview: Web form building blocks</span></a></li> <li><a class="button secondary" href="/en-US/docs/Learn/Forms/HTML5_input_types"><span class="button-wrap"> Next </span></a></li> </ul></div></section><section aria-labelledby="advanced_topics"><h3 id="advanced_topics"><a href="#advanced_topics">Advanced Topics</a></h3><div class="section-content"><ul> <li><a href="/en-US/docs/Learn/Forms/How_to_build_custom_form_controls">How to build custom form controls</a></li> <li><a href="/en-US/docs/Learn/Forms/Sending_forms_through_JavaScript">Sending forms through JavaScript</a></li> <li><a href="/en-US/docs/Learn/Forms/Property_compatibility_table_for_form_controls">Property compatibility table for form widgets</a></li> </ul></div></section></article><aside class="article-footer"><div class="article-footer-inner"><div class="svg-container"><svg xmlns="http://www.w3.org/2000/svg" width="162" height="162" viewBox="0 0 162 162" fill="none" role="none"><mask id="b" fill="#fff"><path d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z"></path></mask><path stroke="url(#a)" stroke-dasharray="6, 6" stroke-width="2" d="M97.203 47.04c8.113-7.886 18.004-13.871 28.906-17.492a78 78 0 0 1 33.969-3.39c11.443 1.39 22.401 5.295 32.024 11.411s17.656 14.28 23.476 23.86c5.819 9.579 9.269 20.318 10.083 31.385a69.85 69.85 0 0 1-5.387 32.44c-4.358 10.272-11.115 19.443-19.747 26.801-8.632 7.359-18.908 12.709-30.034 15.637l-6.17-21.698c7.666-2.017 14.746-5.703 20.694-10.773 5.948-5.071 10.603-11.389 13.606-18.467a48.14 48.14 0 0 0 3.712-22.352c-.561-7.625-2.938-15.025-6.948-21.625s-9.544-12.226-16.175-16.44-14.181-6.904-22.065-7.863a53.75 53.75 0 0 0-23.405 2.336c-7.513 2.495-14.327 6.62-19.918 12.053z" mask="url(#b)" style="stroke:url(#a)" transform="translate(-63.992 -25.587)"></path><ellipse cx="8.066" cy="111.597" fill="var(--background-tertiary)" rx="53.677" ry="53.699" transform="matrix(.71707 -.697 .7243 .6895 0 0)"></ellipse><g clip-path="url(#c)" transform="translate(-63.992 -25.587)"><path fill="#9abff5" d="m144.256 137.379 32.906 12.434a4.41 4.41 0 0 1 2.559 5.667l-9.326 24.679a4.41 4.41 0 0 1-5.667 2.559l-8.226-3.108-2.332 6.17c-.466 1.233-.375 1.883-1.609 1.417l-2.253-.527c-.411-.155-.95-.594-1.206-1.161l-4.734-10.484-12.545-4.741a4.41 4.41 0 0 1-2.559-5.667l9.325-24.679a4.41 4.41 0 0 1 5.667-2.559m9.961 29.617 8.227 3.108 3.264-8.638-.498-6.768-4.113-1.555.548 7.258-4.319-1.632zm-12.339-4.663 8.226 3.108 3.264-8.637-.498-6.769-4.113-1.554.548 7.257-4.319-1.632z"></path></g><g clip-path="url(#d)" transform="translate(-63.992 -25.587)"><path fill="#81b0f3" d="M135.35 60.136 86.67 41.654c-3.346-1.27-7.124.428-8.394 3.775L64.414 81.938c-1.27 3.347.428 7.125 3.774 8.395l12.17 4.62-3.465 9.128c-.693 1.826-1.432 2.457.394 3.15l3.014 1.625c.609.231 1.637.274 2.477-.104l15.53-6.983 18.56 7.047c3.346 1.27 7.124-.428 8.395-3.775l13.862-36.51c1.27-3.346-.428-7.124-3.775-8.395M95.261 83.207l-12.17-4.62 4.852-12.779 7.19-7.017 6.085 2.31-7.725 7.51 6.389 2.426zm18.255 6.93-12.17-4.62 4.852-12.778 7.189-7.017 6.085 2.31-7.725 7.51 6.39 2.426z"></path></g><defs><clipPath id="c"><path fill="#fff" d="m198.638 146.586-65.056-24.583-24.583 65.057 65.056 24.582z"></path></clipPath><clipPath id="d"><path fill="#fff" d="m66.438 14.055 96.242 36.54-36.54 96.243-96.243-36.54z"></path></clipPath><linearGradient id="a" x1="97.203" x2="199.995" y1="47.04" y2="152.793" gradientUnits="userSpaceOnUse"><stop stop-color="#086DFC"></stop><stop offset="0.246" stop-color="#2C81FA"></stop><stop offset="0.516" stop-color="#5497F8"></stop><stop offset="0.821" stop-color="#80B0F6"></stop><stop offset="1" stop-color="#9ABFF5"></stop></linearGradient></defs></svg></div><h2>Help improve MDN</h2><fieldset class="feedback"><label>Was this page helpful to you?</label><div class="button-container"><button type="button" class="button primary has-icon yes"><span class="button-wrap"><span class="icon icon-thumbs-up "></span>Yes</span></button><button type="button" class="button primary has-icon no"><span class="button-wrap"><span class="icon icon-thumbs-down "></span>No</span></button></div></fieldset><a class="contribute" href="https://github.com/mdn/content/blob/main/CONTRIBUTING.md" title="This will take you to our contribution guidelines on GitHub." target="_blank" rel="noopener noreferrer">Learn how to contribute</a>.<p class="last-modified-date">This page was last modified on<!-- --> <time dateTime="2024-10-25T00:08:46.000Z">Oct 25, 2024</time> by<!-- --> <a href="/en-US/docs/Learn/Forms/Basic_native_form_controls/contributors.txt" rel="nofollow">MDN contributors</a>.</p><div id="on-github" class="on-github"><a href="https://github.com/mdn/content/blob/main/files/en-us/learn/forms/basic_native_form_controls/index.md?plain=1" title="Folder: en-us/learn/forms/basic_native_form_controls (Opens in a new tab)" target="_blank" rel="noopener noreferrer">View this page on GitHub</a> <!-- -->•<!-- --> <a href="https://github.com/mdn/content/issues/new?template=page-report.yml&amp;mdn-url=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FLearn%2FForms%2FBasic_native_form_controls&amp;metadata=%3C%21--+Do+not+make+changes+below+this+line+--%3E%0A%3Cdetails%3E%0A%3Csummary%3EPage+report+details%3C%2Fsummary%3E%0A%0A*+Folder%3A+%60en-us%2Flearn%2Fforms%2Fbasic_native_form_controls%60%0A*+MDN+URL%3A+https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FLearn%2FForms%2FBasic_native_form_controls%0A*+GitHub+URL%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Fcontent%2Fblob%2Fmain%2Ffiles%2Fen-us%2Flearn%2Fforms%2Fbasic_native_form_controls%2Findex.md%0A*+Last+commit%3A+https%3A%2F%2Fgithub.com%2Fmdn%2Fcontent%2Fcommit%2Fbaac7f2a43813a7930ff97b11d9c38b413f97c78%0A*+Document+last+modified%3A+2024-10-25T00%3A08%3A46.000Z%0A%0A%3C%2Fdetails%3E" title="This will take you to GitHub to file a new issue." target="_blank" rel="noopener noreferrer">Report a problem with this content</a></div></div></aside></main></div></div><footer id="nav-footer" class="page-footer"><div class="page-footer-grid"><div class="page-footer-logo-col"><a href="/" class="mdn-footer-logo" aria-label="MDN homepage"><svg width="48" height="17" viewBox="0 0 48 17" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="mdn-footer-logo-svg">MDN logo</title><path d="M20.04 16.512H15.504V10.416C15.504 9.488 15.344 8.824 15.024 8.424C14.72 8.024 14.264 7.824 13.656 7.824C12.92 7.824 12.384 8.064 12.048 8.544C11.728 9.024 11.568 9.64 11.568 10.392V14.184H13.008V16.512H8.472V10.416C8.472 9.488 8.312 8.824 7.992 8.424C7.688 8.024 7.232 7.824 6.624 7.824C5.872 7.824 5.336 8.064 5.016 8.544C4.696 9.024 4.536 9.64 4.536 10.392V14.184H6.6V16.512H0V14.184H1.44V8.04H0.024V5.688H4.536V7.32C5.224 6.088 6.32 5.472 7.824 5.472C8.608 5.472 9.328 5.664 9.984 6.048C10.64 6.432 11.096 7.016 11.352 7.8C11.992 6.248 13.168 5.472 14.88 5.472C15.856 5.472 16.72 5.776 17.472 6.384C18.224 6.992 18.6 7.936 18.6 9.216V14.184H20.04V16.512Z" fill="currentColor"></path><path d="M33.6714 16.512H29.1354V14.496C28.8314 15.12 28.3834 15.656 27.7914 16.104C27.1994 16.536 26.4154 16.752 25.4394 16.752C24.0154 16.752 22.8954 16.264 22.0794 15.288C21.2634 14.312 20.8554 12.984 20.8554 11.304C20.8554 9.688 21.2554 8.312 22.0554 7.176C22.8554 6.04 24.0634 5.472 25.6794 5.472C26.5594 5.472 27.2794 5.648 27.8394 6C28.3994 6.352 28.8314 6.8 29.1354 7.344V2.352H26.9754V0H32.2314V14.184H33.6714V16.512ZM29.1354 11.04V10.776C29.1354 9.88 28.8954 9.184 28.4154 8.688C27.9514 8.176 27.3674 7.92 26.6634 7.92C25.9754 7.92 25.3674 8.176 24.8394 8.688C24.3274 9.2 24.0714 10.008 24.0714 11.112C24.0714 12.152 24.3114 12.944 24.7914 13.488C25.2714 14.032 25.8394 14.304 26.4954 14.304C27.3114 14.304 27.9514 13.96 28.4154 13.272C28.8954 12.584 29.1354 11.84 29.1354 11.04Z" fill="currentColor"></path><path d="M47.9589 16.512H41.9829V14.184H43.4229V10.416C43.4229 9.488 43.2629 8.824 42.9429 8.424C42.6389 8.024 42.1829 7.824 41.5749 7.824C40.8389 7.824 40.2709 8.056 39.8709 8.52C39.4709 8.968 39.2629 9.56 39.2469 10.296V14.184H40.6869V16.512H34.7109V14.184H36.1509V8.04H34.5909V5.688H39.2469V7.344C39.9669 6.096 41.1269 5.472 42.7269 5.472C43.7509 5.472 44.6389 5.776 45.3909 6.384C46.1429 6.992 46.5189 7.936 46.5189 9.216V14.184H47.9589V16.512Z" fill="currentColor"></path></svg></a><p>Your blueprint for a better internet.</p><ul class="social-icons"><li><a href="https://mozilla.social/@mdn" target="_blank" rel="me noopener noreferrer"><span class="icon icon-mastodon"></span><span class="visually-hidden">MDN on Mastodon</span></a></li><li><a href="https://twitter.com/mozdevnet" target="_blank" rel="noopener noreferrer"><span class="icon icon-twitter-x"></span><span class="visually-hidden">MDN on X (formerly Twitter)</span></a></li><li><a href="https://github.com/mdn/" target="_blank" rel="noopener noreferrer"><span class="icon icon-github-mark-small"></span><span class="visually-hidden">MDN on GitHub</span></a></li><li><a href="/en-US/blog/rss.xml" target="_blank"><span class="icon icon-feed"></span><span class="visually-hidden">MDN Blog RSS Feed</span></a></li></ul></div><div class="page-footer-nav-col-1"><h2 class="footer-nav-heading">MDN</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a href="/en-US/about">About</a></li><li class="footer-nav-item"><a href="/en-US/blog/">Blog</a></li><li class="footer-nav-item"><a href="https://www.mozilla.org/en-US/careers/listings/?team=ProdOps" target="_blank" rel="noopener noreferrer">Careers</a></li><li class="footer-nav-item"><a href="/en-US/advertising">Advertise with us</a></li></ul></div><div class="page-footer-nav-col-2"><h2 class="footer-nav-heading">Support</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="https://support.mozilla.org/products/mdn-plus">Product help</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/docs/MDN/Community/Issues">Report an issue</a></li></ul></div><div class="page-footer-nav-col-3"><h2 class="footer-nav-heading">Our communities</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/community">MDN Community</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="https://discourse.mozilla.org/c/mdn/236" target="_blank" rel="noopener noreferrer">MDN Forum</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/discord" target="_blank" rel="noopener noreferrer">MDN Chat</a></li></ul></div><div class="page-footer-nav-col-4"><h2 class="footer-nav-heading">Developers</h2><ul class="footer-nav-list"><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/docs/Web">Web Technologies</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/docs/Learn">Learn Web Development</a></li><li class="footer-nav-item"><a class="footer-nav-link" href="/en-US/plus">MDN Plus</a></li><li class="footer-nav-item"><a href="https://hacks.mozilla.org/" target="_blank" rel="noopener noreferrer">Hacks Blog</a></li></ul></div><div class="page-footer-moz"><a href="https://www.mozilla.org/" class="footer-moz-logo-link" target="_blank" rel="noopener noreferrer"><svg width="112" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="mozilla-footer-logo-svg">Mozilla logo</title><path d="M41.753 14.218c-2.048 0-3.324 1.522-3.324 4.157 0 2.423 1.119 4.286 3.29 4.286 2.082 0 3.447-1.678 3.447-4.347 0-2.826-1.522-4.096-3.413-4.096Zm54.89 7.044c0 .901.437 1.618 1.645 1.618 1.427 0 2.949-1.024 3.044-3.352-.649-.095-1.365-.185-2.02-.185-1.426-.005-2.668.397-2.668 1.92Z" fill="currentColor"></path><path d="M0 0v32h111.908V0H0Zm32.56 25.426h-5.87v-7.884c0-2.423-.806-3.352-2.39-3.352-1.924 0-2.702 1.365-2.702 3.324v4.868h1.864v3.044h-5.864v-7.884c0-2.423-.806-3.352-2.39-3.352-1.924 0-2.702 1.365-2.702 3.324v4.868h2.669v3.044H6.642v-3.044h1.863v-7.918H6.642V11.42h5.864v2.11c.839-1.489 2.3-2.39 4.252-2.39 2.02 0 3.878.963 4.566 3.01.778-1.862 2.361-3.01 4.566-3.01 2.512 0 4.812 1.522 4.812 4.84v6.402h1.863v3.044h-.005Zm9.036.307c-4.314 0-7.296-2.635-7.296-7.106 0-4.096 2.484-7.481 7.514-7.481s7.481 3.38 7.481 7.29c0 4.472-3.228 7.297-7.699 7.297Zm22.578-.307H51.942l-.403-2.11 7.7-8.846h-4.376l-.621 2.17-2.888-.313.498-4.907h12.294l.313 2.11-7.767 8.852h4.533l.654-2.172 3.167.308-.872 4.908Zm7.99 0h-4.191v-5.03h4.19v5.03Zm0-8.976h-4.191v-5.03h4.19v5.03Zm2.618 8.976 6.054-21.358h3.945l-6.054 21.358h-3.945Zm8.136 0 6.048-21.358h3.945l-6.054 21.358h-3.939Zm21.486.307c-1.863 0-2.887-1.085-3.072-2.792-.805 1.427-2.232 2.792-4.498 2.792-2.02 0-4.314-1.085-4.314-4.006 0-3.447 3.323-4.253 6.518-4.253.778 0 1.584.034 2.3.124v-.465c0-1.427-.034-3.133-2.3-3.133-.84 0-1.488.061-2.143.402l-.453 1.578-3.195-.34.549-3.224c2.45-.996 3.692-1.27 5.992-1.27 3.01 0 5.556 1.55 5.556 4.75v6.083c0 .805.314 1.085.963 1.085.184 0 .375-.034.587-.095l.034 2.11a5.432 5.432 0 0 1-2.524.654Z" fill="currentColor"></path></svg></a><ul class="footer-moz-list"><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Website Privacy Notice</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/privacy/websites/#cookies" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Cookies</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/legal/terms/mozilla" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Legal</a></li><li class="footer-moz-item"><a href="https://www.mozilla.org/about/governance/policies/participation/" class="footer-moz-link" target="_blank" rel="noopener noreferrer">Community Participation Guidelines</a></li></ul></div><div class="page-footer-legal"><p id="license" class="page-footer-legal-text">Visit<!-- --> <a href="https://www.mozilla.org" target="_blank" rel="noopener noreferrer">Mozilla Corporation’s</a> <!-- -->not-for-profit parent, the<!-- --> <a target="_blank" rel="noopener noreferrer" href="https://foundation.mozilla.org/">Mozilla Foundation</a>.<br/>Portions of this content are ©1998–<!-- -->2024<!-- --> by individual mozilla.org contributors. Content available under<!-- --> <a href="/en-US/docs/MDN/Writing_guidelines/Attrib_copyright_license">a Creative Commons license</a>.</p></div></div></footer></div><script type="application/json" id="hydration">{"url":"/en-US/docs/Learn/Forms/Basic_native_form_controls","doc":{"isMarkdown":true,"isTranslated":false,"isActive":true,"flaws":{},"title":"Basic native form controls","mdn_url":"/en-US/docs/Learn/Forms/Basic_native_form_controls","locale":"en-US","native":"English (US)","sidebarHTML":"<ol><li class=\"section\"><a href=\"/en-US/docs/Learn/Getting_started_with_the_web\">Complete beginners start here!</a></li><li><details><summary>Getting started with the web</summary><ol><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web\">Getting started with the web</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/Installing_basic_software\">Installing basic software</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like\">What will your website look like?</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/Dealing_with_files\">Dealing with files</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/HTML_basics\">HTML basics</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics\">CSS basics</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics\">JavaScript basics</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website\">Publishing your website</a></li><li><a href=\"/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works\">How the web works</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/HTML\">HTML — Structuring the web</a></li><li><details><summary>Introduction to HTML</summary><ol><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML\">Introduction to HTML</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started\">Getting started with HTML</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML\">What's in the head? Metadata in HTML</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/HTML_text_fundamentals\">HTML text fundamentals</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks\">Creating hyperlinks</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Advanced_text_formatting\">Advanced text formatting</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Document_and_website_structure\">Document and website structure</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Debugging_HTML\">Debugging HTML</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Marking_up_a_letter\">Marking up a letter</a></li><li><a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML/Structuring_a_page_of_content\">Structuring a page of content</a></li></ol></details></li><li><details><summary>Multimedia and embedding</summary><ol><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding\">Multimedia and embedding</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Images_in_HTML\">Images in HTML</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Video_and_audio_content\">Video and audio content</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Other_embedding_technologies\">From object to iframe — other embedding technologies</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Adding_vector_graphics_to_the_Web\">Adding vector graphics to the web</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images\">Responsive images</a></li><li><a href=\"/en-US/docs/Learn/HTML/Multimedia_and_embedding/Mozilla_splash_page\">Mozilla splash page</a></li></ol></details></li><li><details><summary>HTML tables</summary><ol><li><a href=\"/en-US/docs/Learn/HTML/Tables\">HTML tables</a></li><li><a href=\"/en-US/docs/Learn/HTML/Tables/Basics\">HTML table basics</a></li><li><a href=\"/en-US/docs/Learn/HTML/Tables/Advanced\">HTML table advanced features and accessibility</a></li><li><a href=\"/en-US/docs/Learn/HTML/Tables/Structuring_planet_data\">Structuring planet data</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/CSS\">CSS — Styling the web</a></li><li><details><summary>CSS first steps</summary><ol><li><a href=\"/en-US/docs/Learn/CSS/First_steps\">CSS first steps</a></li><li><a href=\"/en-US/docs/Learn/CSS/First_steps/What_is_CSS\">What is CSS?</a></li><li><a href=\"/en-US/docs/Learn/CSS/First_steps/Getting_started\">Getting started with CSS</a></li><li><a href=\"/en-US/docs/Learn/CSS/First_steps/How_CSS_is_structured\">How CSS is structured</a></li><li><a href=\"/en-US/docs/Learn/CSS/First_steps/How_CSS_works\">How CSS works</a></li><li><a href=\"/en-US/docs/Learn/CSS/First_steps/Styling_a_biography_page\">Styling a biography page</a></li></ol></details></li><li><details><summary>CSS building blocks</summary><ol><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks\">CSS building blocks</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Selectors\">CSS selectors</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Selectors/Type_Class_and_ID_Selectors\">Type, class, and ID selectors</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Selectors/Attribute_selectors\">Attribute selectors</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Selectors/Pseudo-classes_and_pseudo-elements\">Pseudo-classes and pseudo-elements</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators\">Combinators</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance\">Cascade, specificity, and inheritance</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Cascade_layers\">Cascade layers</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/The_box_model\">The box model</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Backgrounds_and_borders\">Backgrounds and borders</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Handling_different_text_directions\">Handling different text directions</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Overflowing_content\">Overflowing content</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Values_and_units\">CSS values and units</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Sizing_items_in_CSS\">Sizing items in CSS</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Images_media_form_elements\">Images, media, and form elements</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Styling_tables\">Styling tables</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Advanced_styling_effects\">Advanced styling effects</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Debugging_CSS\">Debugging CSS</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Organizing\">Organizing your CSS</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Fundamental_CSS_comprehension\">Fundamental CSS comprehension</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/Creating_fancy_letterheaded_paper\">Creating fancy letterheaded paper</a></li><li><a href=\"/en-US/docs/Learn/CSS/Building_blocks/A_cool_looking_box\">A cool-looking box</a></li></ol></details></li><li><details><summary>Styling text</summary><ol><li><a href=\"/en-US/docs/Learn/CSS/Styling_text\">CSS styling text</a></li><li><a href=\"/en-US/docs/Learn/CSS/Styling_text/Fundamentals\">Fundamental text and font styling</a></li><li><a href=\"/en-US/docs/Learn/CSS/Styling_text/Styling_lists\">Styling lists</a></li><li><a href=\"/en-US/docs/Learn/CSS/Styling_text/Styling_links\">Styling links</a></li><li><a href=\"/en-US/docs/Learn/CSS/Styling_text/Web_fonts\">Web fonts</a></li><li><a href=\"/en-US/docs/Learn/CSS/Styling_text/Typesetting_a_homepage\">Typesetting a community school homepage</a></li></ol></details></li><li><details><summary>CSS layout</summary><ol><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout\">CSS layout</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Introduction\">Introduction to CSS layout</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Normal_Flow\">Normal Flow</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Flexbox\">Flexbox</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Grids\">Grids</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Floats\">Floats</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Positioning\">Positioning</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Multiple-column_Layout\">Multiple-column layout</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design\">Responsive design</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Media_queries\">Beginner's guide to media queries</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Legacy_Layout_Methods\">Legacy layout methods</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Supporting_Older_Browsers\">Supporting older browsers</a></li><li><a href=\"/en-US/docs/Learn/CSS/CSS_layout/Fundamental_Layout_Comprehension\">Fundamental layout comprehension</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/JavaScript\">JavaScript — Dynamic client-side scripting</a></li><li><details><summary>JavaScript first steps</summary><ol><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps\">JavaScript first steps</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript\">What is JavaScript?</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/A_first_splash\">A first splash into JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong\">What went wrong? Troubleshooting JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Variables\">Storing the information you need — Variables</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Math\">Basic math in JavaScript — numbers and operators</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Strings\">Handling text — strings in JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Useful_string_methods\">Useful string methods</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Arrays\">Arrays</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/First_steps/Silly_story_generator\">Silly story generator</a></li></ol></details></li><li><details><summary>JavaScript building blocks</summary><ol><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks\">JavaScript building blocks</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/conditionals\">Making decisions in your code — conditionals</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Looping_code\">Looping code</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Functions\">Functions — reusable blocks of code</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Build_your_own_function\">Build your own function</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Return_values\">Function return values</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Events\">Introduction to events</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Event_bubbling\">Event bubbling</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Building_blocks/Image_gallery\">Image gallery</a></li></ol></details></li><li><details><summary>Introducing JavaScript objects</summary><ol><li><a href=\"/en-US/docs/Learn/JavaScript/Objects\">Introducing JavaScript objects</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Basics\">JavaScript object basics</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Object_prototypes\">Object prototypes</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Object-oriented_programming\">Object-oriented programming</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Classes_in_JavaScript\">Classes in JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/JSON\">Working with JSON</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Object_building_practice\">Object building practice</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Objects/Adding_bouncing_balls_features\">Adding features to our bouncing balls demo</a></li></ol></details></li><li><details><summary>Asynchronous JavaScript</summary><ol><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous\">Asynchronous JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous/Introducing\">Introducing asynchronous JavaScript</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous/Promises\">How to use promises</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous/Implementing_a_promise-based_API\">How to implement a promise-based API</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous/Introducing_workers\">Introducing workers</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Asynchronous/Sequencing_animations\">Sequencing animations</a></li></ol></details></li><li><details><summary>Client-side web APIs</summary><ol><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs\">Client-side web APIs</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction\">Introduction to web APIs</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents\">Manipulating documents</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Fetching_data\">Fetching data from the server</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Third_party_APIs\">Third-party APIs</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Drawing_graphics\">Drawing graphics</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Video_and_audio_APIs\">Video and Audio APIs</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage\">Client-side storage</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Forms\">Web forms — Working with user data</a></li><li><details open=\"\"><summary>Web form building blocks</summary><ol><li><a href=\"/en-US/docs/Learn/Forms\">Web form building blocks</a></li><li><a href=\"/en-US/docs/Learn/Forms/Your_first_form\">Your first form</a></li><li><a href=\"/en-US/docs/Learn/Forms/How_to_structure_a_web_form\">How to structure a web form</a></li><li><em><a href=\"/en-US/docs/Learn/Forms/Basic_native_form_controls\" aria-current=\"page\">Basic native form controls</a></em></li><li><a href=\"/en-US/docs/Learn/Forms/HTML5_input_types\">The HTML5 input types</a></li><li><a href=\"/en-US/docs/Learn/Forms/Other_form_controls\">Other form controls</a></li><li><a href=\"/en-US/docs/Learn/Forms/Styling_web_forms\">Styling web forms</a></li><li><a href=\"/en-US/docs/Learn/Forms/Advanced_form_styling\">Advanced form styling</a></li><li><a href=\"/en-US/docs/Learn/Forms/UI_pseudo-classes\">UI pseudo-classes</a></li><li><a href=\"/en-US/docs/Learn/Forms/Form_validation\">Client-side form validation</a></li><li><a href=\"/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data\">Sending form data</a></li></ol></details></li><li><details><summary>Advanced web form techniques</summary><ol><li><a href=\"/en-US/docs/Learn/Forms/How_to_build_custom_form_controls\">How to build custom form controls</a></li><li><a href=\"/en-US/docs/Learn/Forms/Sending_forms_through_JavaScript\">Sending forms through JavaScript</a></li><li><a href=\"/en-US/docs/Learn/Forms/Property_compatibility_table_for_form_controls\">CSS property compatibility table for form controls</a></li><li><a href=\"/en-US/docs/Learn/Forms/HTML_forms_in_legacy_browsers\">HTML forms in legacy browsers</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Accessibility\">Accessibility — Make the web usable by everyone</a></li><li><details><summary>Accessibility guides</summary><ol><li><a href=\"/en-US/docs/Learn/Accessibility\">Accessibility</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/What_is_accessibility\">What is accessibility?</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/HTML\">HTML: A good basis for accessibility</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/CSS_and_JavaScript\">CSS and JavaScript accessibility best practices</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/WAI-ARIA_basics\">WAI-ARIA basics</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/Multimedia\">Accessible multimedia</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/Mobile\">Mobile accessibility</a></li><li><a href=\"/en-US/docs/Learn/Accessibility/Accessibility_troubleshooting\">Assessment: Accessibility troubleshooting</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Performance\">Performance — Making websites fast and responsive</a></li><li><details><summary>Performance guides</summary><ol><li><a href=\"/en-US/docs/Learn/Performance\">Web performance</a></li><li><a href=\"/en-US/docs/Learn/Performance/why_web_performance\">The \"why\" of web performance</a></li><li><a href=\"/en-US/docs/Learn/Performance/What_is_web_performance\">What is web performance?</a></li><li><a href=\"/en-US/docs/Learn/Performance/Perceived_performance\">Perceived performance</a></li><li><a href=\"/en-US/docs/Learn/Performance/Measuring_performance\">Measuring performance</a></li><li><a href=\"/en-US/docs/Learn/Performance/Multimedia\">Multimedia: Images</a></li><li><a href=\"/en-US/docs/Learn/Performance/video\">Multimedia: video</a></li><li><a href=\"/en-US/docs/Learn/Performance/JavaScript\">JavaScript performance optimization</a></li><li><a href=\"/en-US/docs/Learn/Performance/HTML\">HTML performance optimization</a></li><li><a href=\"/en-US/docs/Learn/Performance/CSS\">CSS performance optimization</a></li><li><a href=\"/en-US/docs/Learn/Performance/business_case_for_performance\">The business case for web performance</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/MathML\">MathML — Writing mathematics with MathML</a></li><li><details><summary>MathML first steps</summary><ol><li><a href=\"/en-US/docs/Learn/MathML/First_steps\">MathML first steps</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Getting_started\">Getting started with MathML</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Text_containers\">MathML Text Containers</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Fractions_and_roots\">MathML fractions and roots</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Scripts\">MathML scripted elements</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Tables\">MathML tables</a></li><li><a href=\"/en-US/docs/Learn/MathML/First_steps/Three_famous_mathematical_formulas\">Three famous mathematical formulas</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/../Games\">Games — Developing games for the web</a></li><li><details><summary>Guides and tutorials</summary><ol><li><a href=\"/en-US/docs/Games/Introduction\">Introduction to game development for the Web</a></li><li><a href=\"/en-US/docs/Games/Techniques\">Techniques for game development</a></li><li><a href=\"/en-US/docs/Games/Tutorials\">Tutorials</a></li><li><a href=\"/en-US/docs/Games/Publishing_games\">Publishing games</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Tools_and_testing\">Tools and testing</a></li><li><details><summary>Client-side web development tools</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools\">Understanding client-side web development tools</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Overview\">Client-side tooling overview</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line\">Command line crash course</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Package_management\">Package management basics</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Introducing_complete_toolchain\">Introducing a complete toolchain</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Deployment\">Deploying our app</a></li></ol></details></li><li><details><summary>Introduction to client-side frameworks</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Introduction\">Introduction to client-side frameworks</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Main_features\">Framework main features</a></li></ol></details></li><li><details><summary>React</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_getting_started\">Getting started with React</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning\">Beginning our React todo list</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_components\">Componentizing our React app</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_events_state\">React interactivity: Events and state</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_interactivity_filtering_conditional_rendering\">React interactivity: Editing, filtering, conditional rendering</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_accessibility\">Accessibility in React</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_resources\">React resources</a></li></ol></details></li><li><details><summary>Ember</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_getting_started\">Getting started with Ember</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_structure_componentization\">Ember app structure and componentization</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_interactivity_events_state\">Ember interactivity: Events, classes and state</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_conditional_footer\">Ember Interactivity: Footer functionality, conditional rendering</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_routing\">Routing in Ember</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Ember_resources\">Ember resources and troubleshooting</a></li></ol></details></li><li><details><summary>Vue</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_getting_started\">Getting started with Vue</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_first_component\">Creating our first Vue component</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_rendering_lists\">Rendering a list of Vue components</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_methods_events_models\">Adding a new todo form: Vue events, methods, and models</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_styling\">Styling Vue components with CSS</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_computed_properties\">Using Vue computed properties</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_conditional_rendering\">Vue conditional rendering: editing existing todos</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_refs_focus_management\">Vue refs and lifecycle methods for focus management</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Vue_resources\">Vue resources</a></li></ol></details></li><li><details><summary>Svelte</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_getting_started\">Getting started with Svelte</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_Todo_list_beginning\">Starting our Svelte to-do list app</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_variables_props\">Dynamic behavior in Svelte: working with variables and props</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_components\">Componentizing our Svelte app</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_reactivity_lifecycle_accessibility\">Advanced Svelte: Reactivity, lifecycle, accessibility</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_stores\">Working with Svelte stores</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_TypeScript\">TypeScript support in Svelte</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_deployment_next\">Deployment and next steps</a></li></ol></details></li><li><details><summary>Angular</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_getting_started\">Getting started with Angular</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_todo_list_beginning\">Beginning our Angular todo list app</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_styling\">Styling our Angular app</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_item_component\">Creating an item component</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_filtering\">Filtering our to-do items</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Angular_building\">Building Angular applications and further resources</a></li></ol></details></li><li><details><summary>Git and GitHub</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/GitHub\">Git and GitHub</a></li></ol></details></li><li><details><summary>Cross browser testing</summary><ol><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing\">Cross browser testing</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Introduction\">Introduction to cross-browser testing</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Testing_strategies\">Strategies for carrying out testing</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/HTML_and_CSS\">Handling common HTML and CSS problems</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/JavaScript\">Handling common JavaScript problems</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Accessibility\">Handling common accessibility problems</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection\">Implementing feature detection</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Automated_testing\">Introduction to automated testing</a></li><li><a href=\"/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Your_own_automation_environment\">Setting up your own test automation environment</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Server-side\">Server-side website programming</a></li><li><details><summary>First steps</summary><ol><li><a href=\"/en-US/docs/Learn/Server-side/First_steps\">Server-side website programming first steps</a></li><li><a href=\"/en-US/docs/Learn/Server-side/First_steps/Introduction\">Introduction to the server side</a></li><li><a href=\"/en-US/docs/Learn/Server-side/First_steps/Client-Server_overview\">Client-Server Overview</a></li><li><a href=\"/en-US/docs/Learn/Server-side/First_steps/Web_frameworks\">Server-side web frameworks</a></li><li><a href=\"/en-US/docs/Learn/Server-side/First_steps/Website_security\">Website security</a></li></ol></details></li><li><details><summary>Django web framework (Python)</summary><ol><li><a href=\"/en-US/docs/Learn/Server-side/Django\">Django Web Framework (Python)</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Introduction\">Django introduction</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/development_environment\">Setting up a Django development environment</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Tutorial_local_library_website\">Django Tutorial: The Local Library website</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/skeleton_website\">Django Tutorial Part 2: Creating a skeleton website</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Models\">Django Tutorial Part 3: Using models</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Admin_site\">Django Tutorial Part 4: Django admin site</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Home_page\">Django Tutorial Part 5: Creating our home page</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Generic_views\">Django Tutorial Part 6: Generic list and detail views</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Sessions\">Django Tutorial Part 7: Sessions framework</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Authentication\">Django Tutorial Part 8: User authentication and permissions</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Forms\">Django Tutorial Part 9: Working with forms</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Testing\">Django Tutorial Part 10: Testing a Django web application</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/Deployment\">Django Tutorial Part 11: Deploying Django to production</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/web_application_security\">Django web application security</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Django/django_assessment_blog\">Assessment: DIY Django mini blog</a></li></ol></details></li><li><details><summary>Express Web Framework (Node.js/JavaScript)</summary><ol><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs\">Express web framework (Node.js/JavaScript)</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/Introduction\">Express/Node introduction</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/development_environment\">Setting up a Node development environment</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/Tutorial_local_library_website\">Express Tutorial: The Local Library website</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/skeleton_website\">Express Tutorial Part 2: Creating a skeleton website</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/mongoose\">Express Tutorial Part 3: Using a Database (with Mongoose)</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/routes\">Express Tutorial Part 4: Routes and controllers</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/Displaying_data\">Express Tutorial Part 5: Displaying library data</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/forms\">Express Tutorial Part 6: Working with forms</a></li><li><a href=\"/en-US/docs/Learn/Server-side/Express_Nodejs/deployment\">Express Tutorial Part 7: Deploying to production</a></li></ol></details></li><li class=\"section\"><a href=\"/en-US/docs/Learn/Common_questions\">Further resources</a></li><li><details><summary>Common questions</summary><ol><li><a href=\"/en-US/docs/Learn/Common_questions\">Common questions</a></li><li><a href=\"/en-US/docs/Learn/HTML/Howto\">Use HTML to solve common problems</a></li><li><a href=\"/en-US/docs/Learn/CSS/Howto\">Use CSS to solve common problems</a></li><li><a href=\"/en-US/docs/Learn/JavaScript/Howto\">Solve common problems in your JavaScript code</a></li><li><a href=\"/en-US/docs/Learn/Common_questions/Web_mechanics\">Web mechanics</a></li><li><a href=\"/en-US/docs/Learn/Common_questions/Tools_and_setup\">Tools and setup</a></li><li><a href=\"/en-US/docs/Learn/Common_questions/Design_and_accessibility\">Design and accessibility</a></li></ol></details></li></ol>","sidebarMacro":"LearnSidebar","body":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<ul class=\"prev-next\">\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms/How_to_structure_a_web_form\"><span class=\"button-wrap\"> Previous </span></a></li>\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms\"><span class=\"button-wrap\"> Overview: Web form building blocks</span></a></li>\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms/HTML5_input_types\"><span class=\"button-wrap\"> Next </span></a></li>\n</ul>\n<p>In the <a href=\"/en-US/docs/Learn/Forms/How_to_structure_a_web_form\">previous article</a>, we marked up a functional web form example, introducing some form controls and common structural elements, and focusing on accessibility best practices. Next, we will look at the functionality of the different form controls, or widgets, in detail — studying all the different options available to collect different types of data. In this particular article, we will look at the original set of form controls, available in all browsers since the early days of the web.</p>\n<figure class=\"table-container\"><table>\n <tbody>\n <tr>\n <th scope=\"row\">Prerequisites:</th>\n <td>\n A basic\n <a href=\"/en-US/docs/Learn/HTML/Introduction_to_HTML\">understanding of HTML</a>.\n </td>\n </tr>\n <tr>\n <th scope=\"row\">Objective:</th>\n <td>\n To understand in detail the original set of native form widgets\n available in browsers for collecting data, and how to implement them\n using HTML.\n </td>\n </tr>\n </tbody>\n</table></figure>\n<p>You've already met some form elements, including <a href=\"/en-US/docs/Web/HTML/Element/form\"><code>&lt;form&gt;</code></a>, <a href=\"/en-US/docs/Web/HTML/Element/fieldset\"><code>&lt;fieldset&gt;</code></a>, <a href=\"/en-US/docs/Web/HTML/Element/legend\"><code>&lt;legend&gt;</code></a>, <a href=\"/en-US/docs/Web/HTML/Element/textarea\"><code>&lt;textarea&gt;</code></a>, <a href=\"/en-US/docs/Web/HTML/Element/label\"><code>&lt;label&gt;</code></a>, <a href=\"/en-US/docs/Web/HTML/Element/button\"><code>&lt;button&gt;</code></a>, and <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a>. This article covers:</p>\n<ul>\n <li>The common input types <a href=\"/en-US/docs/Web/HTML/Element/input/button\">button</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/checkbox\">checkbox</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/file\">file</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/hidden\">hidden</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/image\">image</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/password\">password</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/radio\">radio</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/reset\">reset</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/submit\">submit</a>, and <a href=\"/en-US/docs/Web/HTML/Element/input/text\">text</a>.</li>\n <li>Some of the attributes that are common to all form controls.</li>\n</ul>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> We cover additional, more powerful form controls in the next two articles. If you want a more advanced reference, you should consult our <a href=\"/en-US/docs/Web/HTML/Element#forms\">HTML forms element reference</a>, and in particular our extensive <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code> types</a> reference.</p>\n</div>"}},{"type":"prose","value":{"id":"text_input_fields","title":"Text input fields","isH3":false,"content":"<p>Text <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> fields are the most basic form widgets. They are a very convenient way to let the user enter any kind of data, and we've already seen a few simple examples.</p>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> HTML form text fields are simple plain text input controls. This means that you cannot use them to perform rich text editing (bold, italic, etc.). All rich text editors you'll encounter are custom widgets created with HTML, CSS, and JavaScript.</p>\n</div>\n<p>All basic text controls share some common behaviors:</p>\n<ul>\n <li>They can be marked as <a href=\"/en-US/docs/Web/HTML/Element/input#readonly\"><code>readonly</code></a> (the user cannot modify the input value but it is still sent with the rest of the form data) or <a href=\"/en-US/docs/Web/HTML/Element/input#disabled\"><code>disabled</code></a> (the input value can't be modified and is never sent with the rest of the form data).</li>\n <li>They can have a <a href=\"/en-US/docs/Web/HTML/Element/input#placeholder\"><code>placeholder</code></a>; this is the text that appears inside the text input box that should be used to briefly describe the purpose of the box.</li>\n <li>They can be constrained in <a href=\"/en-US/docs/Web/HTML/Attributes/size\"><code>size</code></a> (the physical size of the box) and <a href=\"/en-US/docs/Web/HTML/Attributes/maxlength\"><code>maxlength</code></a> (the maximum number of characters that can be entered into the box).</li>\n <li>They can benefit from spell-checking (using the <a href=\"/en-US/docs/Web/HTML/Global_attributes/spellcheck\"><code>spellcheck</code></a> attribute).</li>\n</ul>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> The <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element is unique amongst HTML elements because it can take many forms depending on its <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute value. It is used for creating most types of form widgets including single line text fields, time and date controls, controls without text input like checkboxes, radio buttons, and color pickers, and buttons.</p>\n</div>"}},{"type":"prose","value":{"id":"single_line_text_fields","title":"Single line text fields","isH3":true,"content":"<p>A single line text field is created using an <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element whose <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute value is set to <code>text</code>, or by omitting the <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute altogether (<code>text</code> is the default value). The value <code>text</code> for this attribute is also the fallback value if the value you specify for the <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute is unknown by the browser (for example if you specify <code>type=\"color\"</code> and the browser doesn't support native color pickers).</p>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> You can find examples of all the single line text field types on GitHub at <a href=\"https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/single-line-text-fields.html\" class=\"external\" target=\"_blank\">single-line-text-fields.html</a> (<a href=\"https://mdn.github.io/learning-area/html/forms/native-form-widgets/single-line-text-fields.html\" class=\"external\" target=\"_blank\">see it live also</a>).</p>\n</div>\n<p>Here is a basic single line text field example:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"text\" id=\"comment\" name=\"comment\" value=\"I'm a text field\" /&gt;\n</code></pre></div>\n<p>Single line text fields have only one true constraint: if you type text with line breaks, the browser removes those line breaks before sending the data to the server.</p>\n<p>The screenshot below shows a text input in default, focused, and disabled states. Most browsers indicate the focused state using a focus ring around the control and the disabled state using grey text or a faded/semi-opaque control.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/disabled.png\" alt=\"Screenshot of the default, focused and disabled states text input in Chrome on macOS\" width=\"657\" height=\"88\" loading=\"lazy\">\n</p>\n<p>The screenshots used in this document were taken in the Chrome browser on macOS. There may be minor variations in these fields/buttons across different browsers, but the basic highlighting technique remains similar.</p>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> We discuss values for the <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute that enforce specific validation constraints including color, email, and url input types, in the next article, <a href=\"/en-US/docs/Learn/Forms/HTML5_input_types\">The HTML5 input types</a>.</p>\n</div>\n<h4 id=\"password_field\">Password field</h4>\n<p>One of the original input types was the <code>password</code> text field type:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"password\" id=\"pwd\" name=\"pwd\" /&gt;\n</code></pre></div>\n<p>The following screenshot shows Password input field in which each input character is shown as a dot.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/password.png\" alt=\"Password field in chrome 115 on macOS\" width=\"638\" height=\"115\" loading=\"lazy\">\n</p>\n<p>The <code>password</code> value doesn't add any special constraints to the entered text, but it does obscure the value entered into the field (e.g. with dots or asterisks) so it can't be easily read by others.</p>\n<p>Keep in mind this is just a user interface feature; unless you submit your form securely, it will get sent in plain text, which is bad for security — a malicious party could intercept your data and steal passwords, credit card details, or whatever else you've submitted. The best way to protect users from this is to host any pages involving forms over a secure connection (i.e. located at an <code>https://</code> address), so the data is encrypted before it is sent.</p>\n<p>Browsers recognize the security implications of sending form data over an insecure connection, and have warnings to deter users from using insecure forms. For more information on what Firefox implements, see <a href=\"/en-US/docs/Web/Security/Insecure_passwords\">Insecure passwords</a>.</p>"}},{"type":"prose","value":{"id":"hidden_content","title":"Hidden content","isH3":true,"content":"<p>Another original text control is the <code>hidden</code> input type. This is used to create a form control that is invisible to the user, but is still sent to the server along with the rest of the form data once submitted — for example you might want to submit a timestamp to the server stating when an order was placed. Because it is hidden, the user can not see nor intentionally edit the value, it will never receive focus, and a screen reader will not notice it either.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"hidden\" id=\"timestamp\" name=\"timestamp\" value=\"1286705410\" /&gt;\n</code></pre></div>\n<p>If you create such an element, it's required to set its <code>name</code> and <code>value</code> attributes. The value can be dynamically set via JavaScript. The <code>hidden</code> input type should not have an associated label.</p>\n<p>Other text input types, like <a href=\"/en-US/docs/Web/HTML/Element/input/search\">search</a>, <a href=\"/en-US/docs/Web/HTML/Element/input/url\">url</a>, and <a href=\"/en-US/docs/Web/HTML/Element/input/tel\">tel</a>, will be covered in the next tutorial, <a href=\"/en-US/docs/Learn/Forms/HTML5_input_types\">HTML5 input types</a>.</p>"}},{"type":"prose","value":{"id":"checkable_items_checkboxes_and_radio_buttons","title":"Checkable items: checkboxes and radio buttons","isH3":false,"content":"<p>Checkable items are controls whose state you can change by clicking on them or their associated labels. There are two kinds of checkable items: the checkbox and the radio button. Both use the <a href=\"/en-US/docs/Web/HTML/Element/input/checkbox#checked\"><code>checked</code></a> attribute to indicate whether the widget is checked by default or not.</p>\n<p>It's worth noting that these widgets do not behave exactly like other form widgets. For most form widgets, once the form is submitted all widgets that have a <a href=\"/en-US/docs/Web/HTML/Element/input#name\"><code>name</code></a> attribute are sent, even if no value has been filled out. In the case of checkable items, their values are sent only if they are checked. If they are not checked, nothing is sent, not even their name. If they are checked but have no value, the name is sent with a value of <em>on.</em></p>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> You can find the examples from this section on GitHub as <a href=\"https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/checkable-items.html\" class=\"external\" target=\"_blank\">checkable-items.html</a> (<a href=\"https://mdn.github.io/learning-area/html/forms/native-form-widgets/checkable-items.html\" class=\"external\" target=\"_blank\">see it live also</a>).</p>\n</div>\n<p>For maximum usability/accessibility, you are advised to surround each list of related items in a <a href=\"/en-US/docs/Web/HTML/Element/fieldset\"><code>&lt;fieldset&gt;</code></a>, with a <a href=\"/en-US/docs/Web/HTML/Element/legend\"><code>&lt;legend&gt;</code></a> providing an overall description of the list. Each individual pair of <a href=\"/en-US/docs/Web/HTML/Element/label\"><code>&lt;label&gt;</code></a>/<a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> elements should be contained in its own list item (or similar). The associated <a href=\"/en-US/docs/Web/HTML/Element/label\"><code>&lt;label&gt;</code></a> is generally placed immediately before or after the radio button or checkbox, with the instructions for the group of radio button or checkboxes generally being the content of the <a href=\"/en-US/docs/Web/HTML/Element/legend\"><code>&lt;legend&gt;</code></a>. See the examples linked above for structural examples.</p>"}},{"type":"prose","value":{"id":"checkbox","title":"Checkbox","isH3":true,"content":"<p>A checkbox is created using the <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element with a <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute set to the value <a href=\"/en-US/docs/Web/HTML/Element/input/checkbox\">checkbox</a>.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"checkbox\" id=\"questionOne\" name=\"subscribe\" value=\"yes\" checked /&gt;\n</code></pre></div>\n<p>Related checkbox items should use the same <a href=\"/en-US/docs/Web/HTML/Element/input#name\"><code>name</code></a> attribute. Including the <a href=\"/en-US/docs/Web/HTML/Element/input/checkbox#checked\"><code>checked</code></a> attribute makes the checkbox checked automatically when the page loads. Clicking the checkbox or its associated label toggles the checkbox on and off.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;fieldset&gt;\n &lt;legend&gt;Choose all the vegetables you like to eat&lt;/legend&gt;\n &lt;ul&gt;\n &lt;li&gt;\n &lt;label for=\"carrots\"&gt;Carrots&lt;/label&gt;\n &lt;input\n type=\"checkbox\"\n id=\"carrots\"\n name=\"vegetable\"\n value=\"carrots\"\n checked /&gt;\n &lt;/li&gt;\n &lt;li&gt;\n &lt;label for=\"peas\"&gt;Peas&lt;/label&gt;\n &lt;input type=\"checkbox\" id=\"peas\" name=\"vegetable\" value=\"peas\" /&gt;\n &lt;/li&gt;\n &lt;li&gt;\n &lt;label for=\"cabbage\"&gt;Cabbage&lt;/label&gt;\n &lt;input type=\"checkbox\" id=\"cabbage\" name=\"vegetable\" value=\"cabbage\" /&gt;\n &lt;/li&gt;\n &lt;/ul&gt;\n&lt;/fieldset&gt;\n</code></pre></div>\n<p>The following screenshot shows checkboxes in the default, focused, and disabled states. Checkboxes in the default and disabled states appear checked, whereas in the focused state, the checkbox is unchecked, with focus ring around it.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/checkboxes.png\" alt=\"Default, focused and disabled Checkboxes in chrome 115 on macOS\" width=\"691\" height=\"101\" loading=\"lazy\">\n</p>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> Any checkboxes and radio buttons with the <a href=\"/en-US/docs/Web/HTML/Element/input/checkbox#checked\"><code>checked</code></a> attribute on load match the <a href=\"/en-US/docs/Web/CSS/:default\"><code>:default</code></a> pseudo-class, even if they are no longer checked. Any that are currently checked match the <a href=\"/en-US/docs/Web/CSS/:checked\"><code>:checked</code></a> pseudo-class.</p>\n</div>\n<p>Due to the on-off nature of checkboxes, the checkbox is considered a toggle button, with many developers and designers expanding on the default checkbox styling to create buttons that look like toggle switches. You can <a href=\"https://mdn.github.io/learning-area/html/forms/toggle-switch-example/\" class=\"external\" target=\"_blank\">see an example in action here</a> (also see the <a href=\"https://github.com/mdn/learning-area/blob/main/html/forms/toggle-switch-example/index.html\" class=\"external\" target=\"_blank\">source code</a>).</p>"}},{"type":"prose","value":{"id":"radio_button","title":"Radio button","isH3":true,"content":"<p>A radio button is created using the <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element with its <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute set to the value <code>radio</code>:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"radio\" id=\"soup\" name=\"meal\" value=\"soup\" checked /&gt;\n</code></pre></div>\n<p>Several radio buttons can be tied together. If they share the same value for their <a href=\"/en-US/docs/Web/HTML/Element/input#name\"><code>name</code></a> attribute, they will be considered to be in the same group of buttons. Only one button in a given group may be checked at a time; this means that when one of them is checked all the others automatically get unchecked. When the form is sent, only the value of the checked radio button is sent. If none of them are checked, the whole pool of radio buttons is considered to be in an unknown state and no value is sent with the form. Once one of the radio buttons in a same-named group of buttons is checked, it is not possible for the user to uncheck all the buttons without resetting the form.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;fieldset&gt;\n &lt;legend&gt;What is your favorite meal?&lt;/legend&gt;\n &lt;ul&gt;\n &lt;li&gt;\n &lt;label for=\"soup\"&gt;Soup&lt;/label&gt;\n &lt;input type=\"radio\" id=\"soup\" name=\"meal\" value=\"soup\" checked /&gt;\n &lt;/li&gt;\n &lt;li&gt;\n &lt;label for=\"curry\"&gt;Curry&lt;/label&gt;\n &lt;input type=\"radio\" id=\"curry\" name=\"meal\" value=\"curry\" /&gt;\n &lt;/li&gt;\n &lt;li&gt;\n &lt;label for=\"pizza\"&gt;Pizza&lt;/label&gt;\n &lt;input type=\"radio\" id=\"pizza\" name=\"meal\" value=\"pizza\" /&gt;\n &lt;/li&gt;\n &lt;/ul&gt;\n&lt;/fieldset&gt;\n</code></pre></div>\n<p>The following screenshot shows default and disabled radio buttons in the checked state, along with a focused radio button in the unchecked state.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/radios.png\" alt=\"Default, focused and disabled Radio buttons in chrome 115 on macOS\" width=\"661\" height=\"104\" loading=\"lazy\">\n</p>"}},{"type":"prose","value":{"id":"actual_buttons","title":"Actual buttons","isH3":false,"content":"<p>The radio button isn't actually a button, despite its name; let's move on and look at actual buttons! There are three input types that produce buttons:</p>\n<dl>\n <dt id=\"submit\"><a href=\"#submit\"><code>submit</code></a></dt>\n <dd>\n <p>Sends the form data to the server. For <a href=\"/en-US/docs/Web/HTML/Element/button\"><code>&lt;button&gt;</code></a> elements, omitting the <code>type</code> attribute (or an invalid value of <code>type</code>) results in a submit button.</p>\n </dd>\n <dt id=\"reset\"><a href=\"#reset\"><code>reset</code></a></dt>\n <dd>\n <p>Resets all form widgets to their default values.</p>\n </dd>\n <dt id=\"button\"><a href=\"#button\"><code>button</code></a></dt>\n <dd>\n <p>Buttons that have no automatic effect but can be customized using JavaScript code.</p>\n </dd>\n</dl>\n<p>Then we also have the <a href=\"/en-US/docs/Web/HTML/Element/button\"><code>&lt;button&gt;</code></a> element itself. This can take a <code>type</code> attribute of value <code>submit</code>, <code>reset</code>, or <code>button</code> to mimic the behavior of the three <code>&lt;input&gt;</code> types mentioned above. The main difference between the two is that actual <code>&lt;button&gt;</code> elements are much easier to style.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"submit\" value=\"Submit this form\" /&gt;\n&lt;input type=\"reset\" value=\"Reset this form\" /&gt;\n&lt;input type=\"button\" value=\"Do Nothing without JavaScript\" /&gt;\n\n&lt;button type=\"submit\"&gt;Submit this form&lt;/button&gt;\n&lt;button type=\"reset\"&gt;Reset this form&lt;/button&gt;\n&lt;button type=\"button\"&gt;Do Nothing without JavaScript&lt;/button&gt;\n</code></pre></div>\n<div class=\"code-example\"><pre class=\"brush: html hidden notranslate\"><code>&lt;div class=\"button-demo\"&gt;\n &lt;p&gt;Using &amp;lt;input&gt;&lt;/p&gt;\n &lt;p&gt;\n &lt;input type=\"submit\" value=\"Submit this form\" /&gt;\n &lt;input type=\"reset\" value=\"Reset this form\" /&gt;\n &lt;input type=\"button\" value=\"Do Nothing without JavaScript\" /&gt;\n &lt;/p&gt;\n &lt;p&gt;Using &amp;lt;button&gt;&lt;/p&gt;\n &lt;p&gt;\n &lt;button type=\"submit\"&gt;Submit this form&lt;/button&gt;\n &lt;button type=\"reset\"&gt;Reset this form&lt;/button&gt;\n &lt;button type=\"button\"&gt;Do Nothing without JavaScript&lt;/button&gt;\n &lt;/p&gt;\n&lt;/div&gt;\n</code></pre></div>\n<div class=\"code-example\"><pre class=\"brush: css hidden notranslate\"><code>button,\ninput {\n display: none;\n}\n.button-demo button,\n.button-demo input {\n all: revert;\n}\n</code></pre></div><div class=\"code-example\"><div class=\"example-header\"></div><iframe class=\"sample-code-frame\" title=\"Actual buttons sample\" id=\"frame_actual_buttons\" width=\"500\" height=\"250\" src=\"about:blank\" data-live-path=\"/en-US/docs/Learn/Forms/Basic_native_form_controls\" data-live-id=\"actual_buttons\" sandbox=\"allow-same-origin allow-scripts\" loading=\"lazy\"></iframe></div>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> The <code>image</code> input type also renders as a button. We'll cover that later too.</p>\n</div>\n<div class=\"notecard note\">\n <p><strong>Note:</strong> You can find the examples from this section on GitHub as <a href=\"https://github.com/mdn/learning-area/blob/main/html/forms/native-form-widgets/button-examples.html\" class=\"external\" target=\"_blank\">button-examples.html</a> (<a href=\"https://mdn.github.io/learning-area/html/forms/native-form-widgets/button-examples.html\" class=\"external\" target=\"_blank\">see it live also</a>).</p>\n</div>\n<p>Below you can find examples of each button <code>&lt;input&gt;</code> type, along with the equivalent <code>&lt;button&gt;</code> type.</p>"}},{"type":"prose","value":{"id":"submit_2","title":"submit","isH3":true,"content":"<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;button type=\"submit\"&gt;This is a &lt;strong&gt;submit button&lt;/strong&gt;&lt;/button&gt;\n\n&lt;input type=\"submit\" value=\"This is a submit button\" /&gt;\n</code></pre></div>"}},{"type":"prose","value":{"id":"reset_2","title":"reset","isH3":true,"content":"<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;button type=\"reset\"&gt;This is a &lt;strong&gt;reset button&lt;/strong&gt;&lt;/button&gt;\n\n&lt;input type=\"reset\" value=\"This is a reset button\" /&gt;\n</code></pre></div>"}},{"type":"prose","value":{"id":"anonymous","title":"anonymous","isH3":true,"content":"<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;button type=\"button\"&gt;This is an &lt;strong&gt;anonymous button&lt;/strong&gt;&lt;/button&gt;\n\n&lt;input type=\"button\" value=\"This is an anonymous button\" /&gt;\n</code></pre></div>\n<p>Buttons always behave the same whether you use a <a href=\"/en-US/docs/Web/HTML/Element/button\"><code>&lt;button&gt;</code></a> element or an <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element. As you can see from the examples, however, <a href=\"/en-US/docs/Web/HTML/Element/button\"><code>&lt;button&gt;</code></a> elements let you use HTML in their content, which is inserted between the opening and closing <code>&lt;button&gt;</code> tags. <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> elements on the other hand are <a href=\"/en-US/docs/Glossary/Void_element\">void elements</a>; their displayed content is inserted inside the <code>value</code> attribute, and therefore only accepts plain text as content.</p>\n<p>The following screenshot shows a button in the default, focused, and disabled states. In the focused state, there is a focus ring around the button, and in the disabled state, the button is greyed out.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/buttons.png\" alt=\"Default, focus, and disabled button states in chrome 115 on macOS\" width=\"715\" height=\"105\" loading=\"lazy\">\n</p>"}},{"type":"prose","value":{"id":"image_button","title":"Image button","isH3":true,"content":"<p>The <strong>image button</strong> control is rendered exactly like an <a href=\"/en-US/docs/Web/HTML/Element/img\"><code>&lt;img&gt;</code></a> element, except that when the user clicks on it, it behaves like a submit button.</p>\n<p>An image button is created using an <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element with its <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute set to the value <code>image</code>. This element supports exactly the same set of attributes as the <a href=\"/en-US/docs/Web/HTML/Element/img\"><code>&lt;img&gt;</code></a> element, plus all the attributes supported by other form buttons.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"image\" alt=\"Click me!\" src=\"my-img.png\" width=\"80\" height=\"30\" /&gt;\n</code></pre></div>\n<p>If the image button is used to submit the form, this control doesn't submit its value — instead, the X and Y coordinates of the click on the image are submitted (the coordinates are relative to the image, meaning that the upper-left corner of the image represents the coordinate (0, 0)). The coordinates are sent as two key/value pairs:</p>\n<ul>\n <li>The X value key is the value of the <a href=\"/en-US/docs/Web/HTML/Element/input#name\"><code>name</code></a> attribute followed by the string \"<em>.x</em>\".</li>\n <li>The Y value key is the value of the <a href=\"/en-US/docs/Web/HTML/Element/input#name\"><code>name</code></a> attribute followed by the string \"<em>.y</em>\".</li>\n</ul>\n<p>So for example when you click on the image at coordinate (123, 456) and it submits via the <code>get</code> method, you'll see the values appended to the URL as follows:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">url</span></div><pre class=\"brush: url notranslate\"><code>http://foo.com?pos.x=123&amp;pos.y=456\n</code></pre></div>\n<p>This is a very convenient way to build a \"hot map\". How these values are sent and retrieved is detailed in the <a href=\"/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data\">Sending form data</a> article.</p>"}},{"type":"prose","value":{"id":"file_picker","title":"File picker","isH3":false,"content":"<p>There is one last <code>&lt;input&gt;</code> type that came to us in early HTML: the file input type. Forms are able to send files to a server (this specific action is also detailed in the <a href=\"/en-US/docs/Learn/Forms/Sending_and_retrieving_form_data\">Sending form data</a> article). The file picker widget can be used to choose one or more files to send.</p>\n<p>To create a <a href=\"/en-US/docs/Web/HTML/Element/input/file\">file picker widget</a>, you use the <a href=\"/en-US/docs/Web/HTML/Element/input\"><code>&lt;input&gt;</code></a> element with its <a href=\"/en-US/docs/Web/HTML/Element/input#type\"><code>type</code></a> attribute set to <code>file</code>. The types of files that are accepted can be constrained using the <a href=\"/en-US/docs/Web/HTML/Element/input#accept\"><code>accept</code></a> attribute. In addition, if you want to let the user pick more than one file, you can do so by adding the <a href=\"/en-US/docs/Web/HTML/Element/input#multiple\"><code>multiple</code></a> attribute.</p>"}},{"type":"prose","value":{"id":"example","title":"Example","isH3":true,"content":"<p>In this example, a file picker is created that requests graphic image files. The user is allowed to select multiple files in this case.</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"file\" name=\"file\" id=\"file\" accept=\"image/*\" multiple /&gt;\n</code></pre></div>\n<p>On some mobile devices, the file picker can access photos, videos, and audio captured directly by the device's camera and microphone by adding capture information to the <code>accept</code> attribute like so:</p>\n<div class=\"code-example\"><div class=\"example-header\"><span class=\"language-name\">html</span></div><pre class=\"brush: html notranslate\"><code>&lt;input type=\"file\" accept=\"image/*;capture=camera\" /&gt;\n&lt;input type=\"file\" accept=\"video/*;capture=camcorder\" /&gt;\n&lt;input type=\"file\" accept=\"audio/*;capture=microphone\" /&gt;\n</code></pre></div>\n<p>The following screenshot shows the file picker widget in the default, focus, and disabled states when no file is selected.</p>\n<p>\n <img src=\"/en-US/docs/Learn/Forms/Basic_native_form_controls/filepickers.png\" alt=\"File picker widget in default, focus, and disabled states in chrome 115 on macOS\" width=\"991\" height=\"111\" loading=\"lazy\">\n</p>"}},{"type":"prose","value":{"id":"common_attributes","title":"Common attributes","isH3":false,"content":"<p>Many of the elements used to define form controls have some of their own specific attributes. However, there is a set of attributes common to all form elements. You've met some of these already, but below is a list of those common attributes, for your reference:</p>\n<figure class=\"table-container\"><table class=\"no-markdown\">\n <thead>\n <tr>\n <th scope=\"col\">Attribute name</th>\n <th scope=\"col\">Default value</th>\n <th scope=\"col\">Description</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><code><a href=\"/en-US/docs/Web/HTML/Global_attributes/autofocus\">autofocus</a></code></td>\n <td>false</td>\n <td>\n This Boolean attribute lets you specify that the element should automatically have input focus when the page loads.\n Only one form-associated element in a document can have this attribute specified.\n </td>\n </tr>\n <tr>\n <td><code><a href=\"/en-US/docs/Web/HTML/Attributes/disabled\">disabled</a></code></td>\n <td>false</td>\n <td>\n This Boolean attribute indicates that the user cannot interact with the element.\n If this attribute is not specified, the element inherits its setting from the containing element, for example, <a href=\"/en-US/docs/Web/HTML/Element/fieldset\"><code>&lt;fieldset&gt;</code></a>;\n if there is no containing element with the <code>disabled</code> attribute set, then the element is enabled.\n </td>\n </tr>\n <tr>\n <td><code><a href=\"/en-US/docs/Web/HTML/Element/input#form\">form</a></code></td>\n <td></td>\n <td>\n The <code>&lt;form&gt;</code> element that the widget is associated with, used if it is not nested within that form.\n The value of the attribute must be the <code>id</code> attribute of a <a href=\"/en-US/docs/Web/HTML/Element/form\"><code>&lt;form&gt;</code></a> element in the same document.\n This lets you associate a form control with a form it is outside of, even if it is inside a different form element.\n </td>\n </tr>\n <tr>\n <td><code><a href=\"/en-US/docs/Web/HTML/Element/input#name\">name</a></code></td>\n <td></td>\n <td>The name of the element; this is submitted with the form data.</td>\n </tr>\n <tr>\n <td><code><a href=\"/en-US/docs/Web/HTML/Element/input#value\">value</a></code></td>\n <td></td>\n <td>The element's initial value.</td>\n </tr>\n </tbody>\n</table></figure>"}},{"type":"prose","value":{"id":"test_your_skills!","title":"Test your skills!","isH3":false,"content":"<p>You've reached the end of this article, but can you remember the most important information? You can find some further tests to verify that you've retained this information before you move on — see <a href=\"/en-US/docs/Learn/Forms/Test_your_skills:_Basic_controls\">Test your skills: Basic controls</a>.</p>"}},{"type":"prose","value":{"id":"summary","title":"Summary","isH3":false,"content":"<p>This article has covered the older input types — the original set introduced in the early days of HTML that is well-supported in all browsers. In the next section, we'll take a look at the more modern values of the <code>type</code> attribute.</p><ul class=\"prev-next\">\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms/How_to_structure_a_web_form\"><span class=\"button-wrap\"> Previous </span></a></li>\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms\"><span class=\"button-wrap\"> Overview: Web form building blocks</span></a></li>\n <li><a class=\"button secondary\" href=\"/en-US/docs/Learn/Forms/HTML5_input_types\"><span class=\"button-wrap\"> Next </span></a></li>\n</ul>"}},{"type":"prose","value":{"id":"advanced_topics","title":"Advanced Topics","isH3":true,"content":"<ul>\n <li><a href=\"/en-US/docs/Learn/Forms/How_to_build_custom_form_controls\">How to build custom form controls</a></li>\n <li><a href=\"/en-US/docs/Learn/Forms/Sending_forms_through_JavaScript\">Sending forms through JavaScript</a></li>\n <li><a href=\"/en-US/docs/Learn/Forms/Property_compatibility_table_for_form_controls\">Property compatibility table for form widgets</a></li>\n</ul>"}}],"toc":[{"text":"Text input fields","id":"text_input_fields"},{"text":"Checkable items: checkboxes and radio buttons","id":"checkable_items_checkboxes_and_radio_buttons"},{"text":"Actual buttons","id":"actual_buttons"},{"text":"File picker","id":"file_picker"},{"text":"Common attributes","id":"common_attributes"},{"text":"Test your skills!","id":"test_your_skills!"},{"text":"Summary","id":"summary"}],"summary":"This article has covered the older input types — the original set introduced in the early days of HTML that is well-supported in all browsers. In the next section, we'll take a look at the more modern values of the type attribute.","popularity":0.002,"modified":"2024-10-25T00:08:46.000Z","other_translations":[{"locale":"de","title":"Basis-Native Formularelemente","native":"Deutsch"},{"locale":"es","title":"Controles de formulario originales","native":"Español"},{"locale":"fr","title":"Les contrôles de formulaire natifs","native":"Français"},{"locale":"ja","title":"基本的なネイティブフォームコントロール","native":"日本語"},{"locale":"ko","title":"기본 네이티브 양식 컨트롤","native":"한국어"},{"locale":"zh-CN","title":"原生表单部件","native":"中文 (简体)"}],"pageType":"learn-module-chapter","source":{"folder":"en-us/learn/forms/basic_native_form_controls","github_url":"https://github.com/mdn/content/blob/main/files/en-us/learn/forms/basic_native_form_controls/index.md","last_commit_url":"https://github.com/mdn/content/commit/baac7f2a43813a7930ff97b11d9c38b413f97c78","filename":"index.md"},"short_title":"Basic native form controls","parents":[{"uri":"/en-US/docs/Learn","title":"Guides"},{"uri":"/en-US/docs/Learn/Forms","title":"Web form building blocks"},{"uri":"/en-US/docs/Learn/Forms/Basic_native_form_controls","title":"Basic native form controls"}],"pageTitle":"Basic native form controls - Learn web development | MDN","noIndexing":false}}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10