disabled
Prevents interaction and usually prevents submission.
Learn disabled, checked, selected, readonly, multiple, autofocus as part of the HTML attribute system: what they configure, where they belong and which mistakes to avoid.
Boolean
Boolean attributes work differently from normal name-value attributes. If the attribute is present, the setting is true. If it is missing, the setting is false.
Writing disabled="false" does not make a control enabled. The attribute is still present, so it is still disabled.
disabled, checked, selected, readonly, multiple, autofocus. Attributes where presence means true and absence means false. What belongs here
disabledPrevents interaction and usually prevents submission.
checkedMarks a checkbox or radio as selected by default.
selectedMarks an option as selected by default.
readonlyAllows reading/copying but not editing.
multipleAllows multiple values for certain controls.
autofocusRequests initial focus when the page loads.
Syntax in context
Write boolean attributes without a value, or with the same name as value if you must. Do not write false.
<input type="checkbox" name="terms" checked> <input type="email" name="email" readonly value="student@example.com"> <button type="submit" disabled>Send later</button>
Good versus weak
<input type="checkbox" name="terms" checked> <input type="email" name="email" readonly value="student@example.com"> <button type="submit" disabled>Send later</button>
<button disabled="false">This is still disabled</button> <input checked="no" type="checkbox">
HTML quick reference
Use these patterns when you need the syntax quickly. Each example has its own anchor, so search engines and readers can land directly on the exact pattern instead of only at the top of the lesson.
A clean version of the markup from this lesson. Use it when you need the correct HTML shape quickly.
<input type="checkbox" name="terms" checked> <input type="email" name="email" readonly value="student@example.com"> <button type="submit" disabled>Send later</button>
Meaningful markup that stays understandable before CSS and JavaScript are added.
The starting point from the practice lab. Change the HTML first, then use CSS only for presentation.
<main class="demo-card"> <form> <label><input type="checkbox" checked> I want updates</label> <input type="text" value="Readonly value" readonly> <button type="submit" disabled>Submit disabled</button> </form> </main> <style> * { box-sizing: border-box; } body { min-height: 100vh; margin: 0; display: grid; place-content: center; padding: 24px; font-family: system-ui, sans-serif; background: #07111f; color: #ffffff; } .demo-card { width: min(760px, calc(100vw - 48px)); border-radius: 24px; padding: 28px; background: rgba(8, 12, 20, 0.94); border: 1px solid rgba(140, 255, 193, 0.26); box-shadow: 0 24px 80px rgba(0, 0, 0, 0.32); } .content-panel { margin-top: 18px; border-radius: 18px; padding: 18px; background: rgba(255, 255, 255, 0.06); } .muted-card { color: #b8c4d6; } .label, caption { color: #8cffc1; font-size: 12px; font-weight: 900; letter-spacing: 0.16em; text-transform: uppercase; } h1, h2, strong { color: #8cffc1; } p, li, dd, figcaption { color: #d6deec; line-height: 1.65; } a { color: #62d5ff; font-weight: 800; } img, iframe, video, svg { max-width: 100%; border-radius: 18px; } iframe { width: 100%; min-height: 180px; border: 1px solid rgba(255,255,255,0.16); } label { display: block; margin-top: 14px; color: #d6deec; font-weight: 800; } input, button { display: block; width: 100%; margin-top: 8px; border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.16); padding: 12px 14px; font: inherit; } button { margin-top: 16px; border: 0; background: #8cffc1; color: #07111f; font-weight: 900; cursor: pointer; } button:disabled { opacity: 0.56; cursor: not-allowed; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid rgba(255, 255, 255, 0.16); padding: 12px 14px; } </style>
A complete practice snippet that shows how the HTML behaves in context.
A weak pattern from the lesson. Use it as a warning sign when reviewing real pages.
<button disabled="false">This is still disabled</button> <input checked="no" type="checkbox">
A recognizable mistake you can search for and refactor.
Rules that matter
Boolean attributes do not become false because the string says false.
To turn the state off, remove the attribute from the element.
Do not disable a field if the server still needs its value.
Automatic focus can be annoying and disorienting.
Production thinking
Attributes are small, but they change how an element works. A good attribute can make a link usable, an image understandable, a form easier to complete or a script safer to load.
Disabled and readonly controls should be visually and semantically clear so users understand what can be changed.
Boolean attributes often represent interface state. JavaScript should add and remove them intentionally.
Live code lab
Edit the HTML or CSS, then use Run to refresh the preview. The preview is isolated, so links and forms stay inside this practice area.
Mini assignment
Practice assignment
Try it yourself
Self-check
Do not only read this page. Answer these questions out loud or write the answers in your own notes. If one answer feels vague, revisit the examples before moving on.