📝 Forms Overview
Forms are the way websites collect information from users — like names, emails, passwords, choices, feedback, etc.
Think of them like the digital version of filling out a form at a bank or for a school.
Master Code Block (This will be used for further examples)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Forms Example</title>
</head>
<body>
<!--All content to be added here-->
</body>
</html>🔁 <form> Element – The Wrapper
Every input field lives inside a <form> tag.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Anatomy</title>
<style>
.infographic-form {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-form[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.ha-filetab:hover { color: #e5e5e5; }
.ha-filetab.ha-tab-on {
color: #ffffff;
border-bottom-color: #5b8def;
background: #0b0b0b;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
line-height: 1.85;
overflow-x: auto;
}
.ha-codepane { display: none; }
.ha-codepane.ha-pane-on { display: block; }
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-id-str { color: #f472b6; font-weight: 700; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 { font-size: 1.3rem; font-weight: 700; margin: 0 0 0.9rem; }
.ha-out-row { display: flex; align-items: center; gap: 0.4rem; margin-bottom: 0.8rem; }
.ha-out-label, .ha-out-input, .ha-out-submit {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.88rem;
padding: 0.1rem 0.3rem;
border-radius: 5px;
transition: background 0.2s ease, outline 0.2s ease;
}
.ha-out-input {
padding: 0.3rem 0.5rem;
border: 1px solid #999;
}
.ha-out-submit {
padding: 0.3rem 0.7rem;
border: 1px solid #999;
background: #f0f0f0;
cursor: pointer;
width: fit-content;
}
.ha-out-lit { background: var(--accent-soft); outline: 2px solid var(--accent); }
.ha-out-form {
border-radius: 8px;
padding: 0.4rem;
margin: -0.4rem;
transition: outline 0.2s ease;
}
.ha-out-form.ha-out-lit { background: none; outline: 2px dashed var(--accent); }
</style>
</head>
<body>
<div class="infographic-form" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab ha-tab-on" id="tab-html">index.html</button>
</div>
<div class="ha-code">
<div class="ha-codepane ha-pane-on" id="pane-html">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line ha-clickable" data-part="h1"> <<span class="ha-tag">h1</span>>Sample Form</<span class="ha-tag">h1</span>></span>
<span class="ha-line ha-clickable ha-active" data-part="form"> <<span class="ha-tag">form</span> <span class="ha-attr">action</span>=<span class="ha-str">"/submit"</span> <span class="ha-attr">method</span>=<span class="ha-str">"post"</span>></span>
<span class="ha-line ha-clickable" data-part="label"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"name"</span>>Name:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="input"> <<span class="ha-tag">input</span></span>
<span class="ha-line ha-clickable" data-part="input"> <span class="ha-attr">type</span>=<span class="ha-str">"text"</span></span>
<span class="ha-line ha-clickable" data-part="input"> <span class="ha-attr">id</span>=<span class="ha-id-str">"name"</span></span>
<span class="ha-line ha-clickable" data-part="input"> <span class="ha-attr">name</span>=<span class="ha-str">"name"</span></span>
<span class="ha-line ha-clickable" data-part="input"> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Enter your name"</span></span>
<span class="ha-line ha-clickable" data-part="input"> <span class="ha-attr">required</span></span>
<span class="ha-line ha-clickable" data-part="input"> /></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line ha-clickable" data-part="submit"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"submit"</span> <span class="ha-attr">value</span>=<span class="ha-str">"Submit"</span> /></span>
<span class="ha-line ha-clickable ha-active" data-part="form"> </<span class="ha-tag">form</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Form Example</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<div class="ha-out-h1">Sample Form</div>
<div class="ha-out-form ha-out-lit" id="out-form">
<div class="ha-out-row">
<label class="ha-out-label" id="out-label">Name:</label>
<input class="ha-out-input" id="out-input" placeholder="Enter your name">
</div>
<button class="ha-out-submit" id="out-submit">Submit</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const outMap = { h1: ['out-h1'], label: ['out-label'], input: ['out-input'], submit: ['out-submit'], form: ['out-form'] };
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
const part = line.getAttribute('data-part');
document.querySelectorAll('.ha-line').forEach(l => {
l.classList.toggle('ha-active', l.getAttribute('data-part') === part);
});
document.querySelectorAll('.ha-out-label, .ha-out-input, .ha-out-submit, .ha-out-form').forEach(el => el.classList.remove('ha-out-lit'));
(outMap[part] || []).forEach(id => {
const el = document.getElementById(id);
if (el) el.classList.add('ha-out-lit');
});
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🔤 <input> – For Short Entries
Used for things like text boxes, emails, passwords, etc.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Label Input Anatomy</title>
<style>
.infographic-labelinput {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-labelinput[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid #5b8def;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.8rem;
line-height: 1.85;
overflow-x: auto;
}
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-id-str { color: #f472b6; font-weight: 700; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 { font-size: 1.3rem; font-weight: 700; margin: 0 0 0.9rem; }
.ha-out-row { display: flex; align-items: center; gap: 0.4rem; }
.ha-out-label, .ha-out-input {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.88rem;
padding: 0.1rem 0.3rem;
border-radius: 5px;
transition: background 0.2s ease, outline 0.2s ease;
}
.ha-out-input {
padding: 0.3rem 0.5rem;
border: 1px solid #999;
}
.ha-out-lit { background: var(--accent-soft); outline: 2px solid var(--accent); }
</style>
</head>
<body>
<div class="infographic-labelinput" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab">index.html</button>
</div>
<div class="ha-code">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line ha-clickable" data-part="h1"> <<span class="ha-tag">h1</span>>Enter Your Name</<span class="ha-tag">h1</span>></span>
<span class="ha-line"> <<span class="ha-tag">form</span>></span>
<span class="ha-line ha-clickable" data-part="label"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"name"</span>>Name:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable ha-active" data-part="input"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"text"</span> <span class="ha-attr">id</span>=<span class="ha-id-str">"name"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Enter your name"</span> /></span>
<span class="ha-line"> </<span class="ha-tag">form</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Input Field Example</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<div class="ha-out-h1" id="out-h1">Enter Your Name</div>
<div class="ha-out-row">
<label class="ha-out-label" id="out-label">Name:</label>
<input class="ha-out-input ha-out-lit" id="out-input" placeholder="Enter your name">
</div>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const outMap = { h1: ['out-h1'], label: ['out-label'], input: ['out-input'] };
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
const part = line.getAttribute('data-part');
document.querySelectorAll('.ha-line').forEach(l => {
l.classList.toggle('ha-active', l.getAttribute('data-part') === part);
});
document.querySelectorAll('.ha-out-label, .ha-out-input, .ha-out-h1').forEach(el => el.classList.remove('ha-out-lit'));
(outMap[part] || []).forEach(id => {
const el = document.getElementById(id);
if (el) el.classList.add('ha-out-lit');
});
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🛠️ Common type values:
text – for names or any short input
email – for email fields
password – hides what you type
number – allows only numbers
checkbox – multiple selections
radio – choose just one option from a group
Example:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Input Types Anatomy</title>
<style>
.infographic-inputtypes {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-inputtypes[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid transparent;
transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}
.ha-filetab:hover { color: #e5e5e5; }
.ha-filetab.ha-tab-on {
color: #ffffff;
border-bottom-color: #5b8def;
background: #0b0b0b;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.72rem;
line-height: 1.75;
overflow-x: auto;
max-height: 340px;
overflow-y: auto;
}
.ha-codepane { display: none; }
.ha-codepane.ha-pane-on { display: block; }
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-id-str { color: #f472b6; }
.ha-sel { color: #f472b6; font-weight: 700; }
.ha-bracket { color: #ffd166; font-weight: 800; }
.ha-prop { color: #c586c0; }
.ha-val { color: #ce9178; }
.ha-comment { color: #5c6370; font-style: italic; }
.ha-pseudo { color: #ffd166; font-weight: 800; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 { font-size: 1.25rem; font-weight: 700; margin: 0 0 0.9rem; }
.ha-field { margin-bottom: 0.9rem; }
.ha-field label { font-size: 0.88rem; display: block; margin-bottom: 0.25rem; }
.ha-out-wrap {
display: inline-block;
border-radius: 8px;
padding: 2px;
transition: outline 0.2s ease;
}
.ha-out-lit { outline: 2px solid var(--accent); }
.ha-out-email {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 8px;
border: 2px solid blue;
border-radius: 5px;
background-color: #f0f8ff;
}
.ha-out-password {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 8px;
border: 2px solid green;
border-radius: 5px;
background-color: #f5fff0;
}
.ha-out-number {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 8px;
border: 2px solid purple;
border-radius: 5px;
background-color: #fef6ff;
width: 70px;
}
.ha-out-checkbox { accent-color: crimson; }
.ha-out-radio { accent-color: teal; }
.ha-out-submit {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background-color: #4caf50;
color: white;
padding: 10px 20px;
font-size: 0.95rem;
border: none;
border-radius: 5px;
cursor: pointer;
}
.ha-check-row, .ha-radio-row { display: flex; align-items: center; gap: 0.4rem; font-size: 0.88rem; margin-bottom: 0.3rem; }
</style>
</head>
<body>
<div class="infographic-inputtypes" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab ha-tab-on" id="tab-html">index.html</button>
<button class="ha-filetab" id="tab-css">style.css</button>
</div>
<div class="ha-code">
<div class="ha-codepane ha-pane-on" id="pane-html">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line"> <<span class="ha-tag">h1</span>>Form with Multiple Input Types</<span class="ha-tag">h1</span>></span>
<span class="ha-line"> <<span class="ha-tag">form</span>></span>
<span class="ha-line ha-comment"> <!-- Email --></span>
<span class="ha-line"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"email"</span>>Email:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="email"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"email"</span> <span class="ha-attr">id</span>=<span class="ha-id-str">"email"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"codeveda.dev@gmail.com"</span> <span class="ha-attr">required</span> /></span>
<span class="ha-line ha-comment"> <!-- Password --></span>
<span class="ha-line"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"password"</span>>Password:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="password"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"password"</span> <span class="ha-attr">id</span>=<span class="ha-id-str">"password"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Enter your password"</span> /></span>
<span class="ha-line ha-comment"> <!-- Number --></span>
<span class="ha-line"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"age"</span>>Age:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="number"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"number"</span> <span class="ha-attr">id</span>=<span class="ha-id-str">"age"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"18"</span> <span class="ha-attr">min</span>=<span class="ha-str">"1"</span> <span class="ha-attr">max</span>=<span class="ha-str">"100"</span> /></span>
<span class="ha-line ha-comment"> <!-- Checkbox --></span>
<span class="ha-line ha-clickable" data-part="checkbox"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"checkbox"</span> <span class="ha-attr">checked</span> /> Subscribe to newsletter</span>
<span class="ha-line ha-comment"> <!-- Radio buttons --></span>
<span class="ha-line"> <<span class="ha-tag">label</span>>Gender:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="radio"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"radio"</span> <span class="ha-attr">name</span>=<span class="ha-str">"gender"</span> /> Male</span>
<span class="ha-line ha-clickable" data-part="radio"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"radio"</span> <span class="ha-attr">name</span>=<span class="ha-str">"gender"</span> /> Female</span>
<span class="ha-line ha-clickable" data-part="submit"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"submit"</span> <span class="ha-attr">value</span>=<span class="ha-str">"Submit"</span> /></span>
<span class="ha-line"> </<span class="ha-tag">form</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
<div class="ha-codepane" id="pane-css">
<span class="ha-line ha-comment">/* Email field */</span>
<span class="ha-line ha-clickable" data-part="email"><span class="ha-sel">input</span><span class="ha-bracket">[type="email"]</span> {</span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-prop">border</span>: <span class="ha-val">2px solid blue</span>;</span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-prop">padding</span>: <span class="ha-val">8px</span>;</span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-prop">border-radius</span>: <span class="ha-val">5px</span>;</span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-prop">background-color</span>: <span class="ha-val">#f0f8ff</span>;</span>
<span class="ha-line ha-clickable" data-part="email">}</span>
<span class="ha-line ha-comment">/* Password field */</span>
<span class="ha-line ha-clickable" data-part="password"><span class="ha-sel">input</span><span class="ha-bracket">[type="password"]</span> {</span>
<span class="ha-line ha-clickable" data-part="password"> <span class="ha-prop">border</span>: <span class="ha-val">2px solid green</span>;</span>
<span class="ha-line ha-clickable" data-part="password"> <span class="ha-prop">padding</span>: <span class="ha-val">8px</span>;</span>
<span class="ha-line ha-clickable" data-part="password"> <span class="ha-prop">border-radius</span>: <span class="ha-val">5px</span>;</span>
<span class="ha-line ha-clickable" data-part="password"> <span class="ha-prop">background-color</span>: <span class="ha-val">#f5fff0</span>;</span>
<span class="ha-line ha-clickable" data-part="password">}</span>
<span class="ha-line ha-comment">/* Number field */</span>
<span class="ha-line ha-clickable" data-part="number"><span class="ha-sel">input</span><span class="ha-bracket">[type="number"]</span> {</span>
<span class="ha-line ha-clickable" data-part="number"> <span class="ha-prop">border</span>: <span class="ha-val">2px solid purple</span>;</span>
<span class="ha-line ha-clickable" data-part="number"> <span class="ha-prop">padding</span>: <span class="ha-val">8px</span>;</span>
<span class="ha-line ha-clickable" data-part="number"> <span class="ha-prop">border-radius</span>: <span class="ha-val">5px</span>;</span>
<span class="ha-line ha-clickable" data-part="number"> <span class="ha-prop">background-color</span>: <span class="ha-val">#fef6ff</span>;</span>
<span class="ha-line ha-clickable" data-part="number">}</span>
<span class="ha-line ha-comment">/* Checkbox */</span>
<span class="ha-line ha-clickable" data-part="checkbox"><span class="ha-sel">input</span><span class="ha-bracket">[type="checkbox"]</span> {</span>
<span class="ha-line ha-clickable" data-part="checkbox"> <span class="ha-prop">accent-color</span>: <span class="ha-val">crimson</span>;</span>
<span class="ha-line ha-clickable" data-part="checkbox">}</span>
<span class="ha-line ha-comment">/* Radio buttons */</span>
<span class="ha-line ha-clickable" data-part="radio"><span class="ha-sel">input</span><span class="ha-bracket">[type="radio"]</span> {</span>
<span class="ha-line ha-clickable" data-part="radio"> <span class="ha-prop">accent-color</span>: <span class="ha-val">teal</span>;</span>
<span class="ha-line ha-clickable" data-part="radio">}</span>
<span class="ha-line ha-comment">/* Submit button */</span>
<span class="ha-line ha-clickable" data-part="submit"><span class="ha-sel">input</span><span class="ha-bracket">[type="submit"]</span> {</span>
<span class="ha-line ha-clickable" data-part="submit"> <span class="ha-prop">background-color</span>: <span class="ha-val">#4caf50</span>;</span>
<span class="ha-line ha-clickable" data-part="submit"> <span class="ha-prop">color</span>: <span class="ha-val">white</span>;</span>
<span class="ha-line ha-clickable" data-part="submit"> <span class="ha-prop">padding</span>: <span class="ha-val">10px 20px</span>;</span>
<span class="ha-line ha-clickable" data-part="submit"> <span class="ha-prop">border-radius</span>: <span class="ha-val">5px</span>;</span>
<span class="ha-line ha-clickable" data-part="submit">}</span>
<span class="ha-line ha-clickable" data-part="submit"><span class="ha-sel">input</span><span class="ha-bracket">[type="submit"]</span><span class="ha-pseudo">:hover</span> {</span>
<span class="ha-line ha-clickable" data-part="submit"> <span class="ha-prop">background-color</span>: <span class="ha-val">#45a049</span>;</span>
<span class="ha-line ha-clickable" data-part="submit">}</span>
</div>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Input Types Example</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/html</div>
<div class="ha-screen">
<div class="ha-out-h1">Form with Multiple Input Types</div>
<div class="ha-field">
<label>Email:</label>
<span class="ha-out-wrap" id="wrap-email"><input class="ha-out-email" placeholder="codeveda.dev@gmail.com"></span>
</div>
<div class="ha-field">
<label>Password:</label>
<span class="ha-out-wrap" id="wrap-password"><input class="ha-out-password" placeholder="Enter your password"></span>
</div>
<div class="ha-field">
<label>Age:</label>
<span class="ha-out-wrap" id="wrap-number"><input class="ha-out-number" placeholder="18"></span>
</div>
<div class="ha-check-row">
<span class="ha-out-wrap" id="wrap-checkbox"><input class="ha-out-checkbox" type="checkbox" checked></span>
Subscribe to newsletter
</div>
<div class="ha-field">
<label>Gender:</label>
<div class="ha-radio-row">
<span class="ha-out-wrap" id="wrap-radio1"><input class="ha-out-radio" type="radio" name="gender-demo"></span> Male
</div>
<div class="ha-radio-row">
<span class="ha-out-wrap" id="wrap-radio2"><input class="ha-out-radio" type="radio" name="gender-demo"></span> Female
</div>
</div>
<span class="ha-out-wrap" id="wrap-submit"><button class="ha-out-submit">Submit</button></span>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const tabHtml = document.getElementById('tab-html');
const tabCss = document.getElementById('tab-css');
const paneHtml = document.getElementById('pane-html');
const paneCss = document.getElementById('pane-css');
tabHtml.addEventListener('click', () => {
tabHtml.classList.add('ha-tab-on');
tabCss.classList.remove('ha-tab-on');
paneHtml.classList.add('ha-pane-on');
paneCss.classList.remove('ha-pane-on');
});
tabCss.addEventListener('click', () => {
tabCss.classList.add('ha-tab-on');
tabHtml.classList.remove('ha-tab-on');
paneCss.classList.add('ha-pane-on');
paneHtml.classList.remove('ha-pane-on');
});
const outMap = {
email: ['wrap-email'], password: ['wrap-password'], number: ['wrap-number'],
checkbox: ['wrap-checkbox'], radio: ['wrap-radio1', 'wrap-radio2'], submit: ['wrap-submit']
};
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
const part = line.getAttribute('data-part');
document.querySelectorAll('.ha-line').forEach(l => {
l.classList.toggle('ha-active', l.getAttribute('data-part') === part);
});
document.querySelectorAll('.ha-out-wrap').forEach(el => el.classList.remove('ha-out-lit'));
(outMap[part] || []).forEach(id => {
const el = document.getElementById(id);
if (el) el.classList.add('ha-out-lit');
});
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🧾 <textarea> – For Longer Text
Used when someone needs to type more than a few words (like comments, messages, or descriptions).
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Textarea Anatomy</title>
<style>
.infographic-textarea {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-textarea[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid #5b8def;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
line-height: 1.8;
overflow-x: auto;
}
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-id-str { color: #f472b6; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 { font-size: 1.25rem; font-weight: 700; margin: 0 0 0.9rem; }
.ha-out-wrap {
display: inline-block;
border-radius: 8px;
padding: 2px;
transition: outline 0.2s ease;
}
.ha-out-lit { outline: 2px solid var(--accent); }
.ha-out-textarea {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
color: #555;
border: 1px solid #999;
padding: 0.4rem 0.5rem;
width: 220px;
height: 90px;
resize: both;
}
.ha-out-submit {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.82rem;
padding: 0.3rem 0.7rem;
border: 1px solid #999;
background: #f0f0f0;
cursor: pointer;
}
</style>
</head>
<body>
<div class="infographic-textarea" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab">index.html</button>
</div>
<div class="ha-code">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line ha-clickable" data-part="h1"> <<span class="ha-tag">h1</span>>Message Form</<span class="ha-tag">h1</span>></span>
<span class="ha-line"> <<span class="ha-tag">form</span> <span class="ha-attr">action</span>=<span class="ha-str">"/submit-message"</span> <span class="ha-attr">method</span>=<span class="ha-str">"post"</span>></span>
<span class="ha-line ha-clickable" data-part="label"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"message"</span>>Your Message:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="textarea"> <<span class="ha-tag">textarea</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">id</span>=<span class="ha-id-str">"message"</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">name</span>=<span class="ha-str">"message"</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">rows</span>=<span class="ha-str">"5"</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">cols</span>=<span class="ha-str">"30"</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Write your message here..."</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> <span class="ha-attr">required</span></span>
<span class="ha-line ha-clickable" data-part="textarea"> ></<span class="ha-tag">textarea</span>></span>
<span class="ha-line ha-clickable" data-part="submit"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"submit"</span> <span class="ha-attr">value</span>=<span class="ha-str">"Send Message"</span> /></span>
<span class="ha-line"> </<span class="ha-tag">form</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Textarea Example</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<div class="ha-out-h1" id="out-h1">Message Form</div>
<label id="out-label" style="font-size:0.88rem; display:block; margin-bottom:0.3rem;">Your Message:</label>
<span class="ha-out-wrap" id="wrap-textarea">
<textarea class="ha-out-textarea">Write your message here...</textarea>
</span>
<br><br>
<span class="ha-out-wrap" id="wrap-submit">
<button class="ha-out-submit">Send Message</button>
</span>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const outMap = { h1: ['out-h1'], label: ['out-label'], textarea: ['wrap-textarea'], submit: ['wrap-submit'] };
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
const part = line.getAttribute('data-part');
document.querySelectorAll('.ha-line').forEach(l => {
l.classList.toggle('ha-active', l.getAttribute('data-part') === part);
});
document.querySelectorAll('.ha-out-wrap, #out-h1, #out-label').forEach(el => el.classList.remove('ha-out-lit'));
(outMap[part] || []).forEach(id => {
const el = document.getElementById(id);
if (el) el.classList.add('ha-out-lit');
});
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});🔽 4. <select> – Drop-down Menus
Great when you want the user to choose one option from a list.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Select Dropdown Anatomy</title>
<style>
.infographic-select {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-select[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid #5b8def;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
line-height: 1.8;
overflow-x: auto;
}
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-id-str { color: #f472b6; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-out-h1 { font-size: 1.25rem; font-weight: 700; margin: 0 0 0.9rem; }
.ha-out-row { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.9rem; }
.ha-out-row label { font-size: 0.88rem; }
.ha-out-select {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 0.2rem 0.3rem;
border-radius: 8px;
transition: outline 0.2s ease;
}
.ha-out-lit { outline: 2px solid var(--accent); }
.ha-out-submit {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.82rem;
padding: 0.3rem 0.7rem;
border: 1px solid #999;
background: #f0f0f0;
cursor: pointer;
}
.ha-hint { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 0.72rem; color: var(--ink-soft); }
</style>
</head>
<body>
<div class="infographic-select" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab">index.html</button>
</div>
<div class="ha-code">
<span class="ha-line"><<span class="ha-tag">body</span>></span>
<span class="ha-line"> <<span class="ha-tag">h1</span>>Select a Language</<span class="ha-tag">h1</span>></span>
<span class="ha-line"> <<span class="ha-tag">form</span> <span class="ha-attr">action</span>=<span class="ha-str">"/submit-choice"</span> <span class="ha-attr">method</span>=<span class="ha-str">"post"</span>></span>
<span class="ha-line"> <<span class="ha-tag">label</span> <span class="ha-attr">for</span>=<span class="ha-id-str">"language"</span>>Choose a language:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">select</span> <span class="ha-attr">id</span>=<span class="ha-id-str">"language"</span> <span class="ha-attr">name</span>=<span class="ha-str">"language"</span> <span class="ha-attr">required</span>></span>
<span class="ha-line ha-clickable" data-part="" data-val=""> <<span class="ha-tag">option</span> <span class="ha-attr">value</span>=<span class="ha-str">""</span>>--Select--</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="" data-val="html"> <<span class="ha-tag">option</span> <span class="ha-attr">value</span>=<span class="ha-str">"html"</span>>HTML</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="" data-val="css"> <<span class="ha-tag">option</span> <span class="ha-attr">value</span>=<span class="ha-str">"css"</span>>CSS</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="" data-val="js"> <<span class="ha-tag">option</span> <span class="ha-attr">value</span>=<span class="ha-str">"js"</span>>JavaScript</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="select"> </<span class="ha-tag">select</span>></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"submit"</span> <span class="ha-attr">value</span>=<span class="ha-str">"Submit"</span> /></span>
<span class="ha-line"> </<span class="ha-tag">form</span>></span>
<span class="ha-line"></<span class="ha-tag">body</span>></span>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 Select Dropdown Example</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<div class="ha-out-h1">Select a Language</div>
<div class="ha-out-row">
<label>Choose a language:</label>
<select class="ha-out-select" id="out-select">
<option value="">--Select--</option>
<option value="html" selected>HTML</option>
<option value="css">CSS</option>
<option value="js">JavaScript</option>
</select>
<span class="ha-hint">← click an <option> line to jump here</span>
</div>
<button class="ha-out-submit">Submit</button>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const select = document.getElementById('out-select');
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
document.querySelectorAll('.ha-line').forEach(l => l.classList.remove('ha-active'));
line.classList.add('ha-active');
select.classList.add('ha-out-lit');
if (line.hasAttribute('data-val')) {
select.value = line.getAttribute('data-val');
}
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});✔️ You can also allow multiple selections with multiple
💡 Full Example:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Combined Form Anatomy</title>
<style>
.infographic-combform {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
box-sizing: border-box;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background: var(--paper);
color: var(--ink);
border-radius: 14px;
overflow: hidden;
}
.infographic-combform[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
}
.ha-layout { display: flex; flex-direction: column; gap: 1.5rem; }
.ha-code-wrap {
background: #0b0b0b;
border: 1px solid #2a2a2a;
border-radius: 10px;
overflow: hidden;
}
.ha-filetabs {
display: flex;
background: #161616;
border-bottom: 1px solid #2a2a2a;
}
.ha-filetab {
border: none;
background: transparent;
color: #8a8a8a;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.78rem;
font-weight: 700;
padding: 0.6rem 1rem;
cursor: pointer;
border-bottom: 2px solid #5b8def;
}
.ha-code {
padding: 1rem 1.8rem 1rem 0.9rem;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 0.75rem;
line-height: 1.8;
overflow-x: auto;
max-height: 340px;
overflow-y: auto;
}
.ha-line {
display: block;
white-space: pre;
color: #8a8a8a;
border-radius: 5px;
padding: 0.05rem 0.4rem;
}
.ha-line.ha-clickable {
cursor: pointer;
color: #e5e5e5;
transition: background 0.15s ease, box-shadow 0.15s ease;
}
.ha-line.ha-clickable:hover { background: #1c2333; }
.ha-line.ha-active {
background: #1c2333;
box-shadow: inset 3px 0 0 #5b8def;
color: #ffffff;
}
.ha-tag { color: #60a5fa; font-weight: 700; }
.ha-attr { color: #f2b96b; }
.ha-str { color: #9ece6a; }
.ha-browser {
border: 1px solid var(--line);
border-radius: 10px;
overflow: hidden;
background: var(--paper);
}
.ha-browser-bar {
background: var(--paper-alt);
padding: 0.5rem 0.7rem;
display: flex;
align-items: center;
gap: 0.5rem;
border-bottom: 1px solid var(--line);
}
.ha-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--line); }
.ha-tab {
background: var(--paper);
border: 1px solid var(--line);
border-bottom: none;
border-radius: 6px 6px 0 0;
font-size: 0.72rem;
color: var(--ink-soft);
padding: 0.25rem 0.6rem;
}
.ha-urlrow {
background: var(--paper-alt);
padding: 0.35rem 0.7rem 0.6rem;
font-size: 0.72rem;
color: var(--ink-soft);
font-family: "SFMono-Regular", Consolas, monospace;
}
.ha-screen {
background: #ffffff;
color: #111;
padding: 1.2rem 1.4rem 1.4rem;
font-family: Georgia, "Times New Roman", serif;
}
.ha-field { margin-bottom: 0.9rem; }
.ha-field label { font-size: 0.9rem; }
.ha-out-wrap {
display: inline-block;
border-radius: 8px;
padding: 2px;
transition: outline 0.2s ease;
}
.ha-out-lit { outline: 2px solid var(--accent); }
.ha-screen input[type="text"], .ha-screen input[type="email"] {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 0.3rem 0.5rem;
border: 1px solid #999;
border-radius: 3px;
}
.ha-screen textarea {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
color: #555;
border: 1px solid #999;
padding: 0.4rem 0.5rem;
}
.ha-screen select {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 0.2rem 0.3rem;
}
.ha-screen .ha-out-submit {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size: 0.85rem;
padding: 0.3rem 0.8rem;
border: 1px solid #999;
background: #f0f0f0;
cursor: pointer;
}
</style>
</head>
<body>
<div class="infographic-combform" id="ha-root">
<div class="ha-inner">
<div class="ha-layout">
<div class="ha-code-wrap">
<div class="ha-filetabs">
<button class="ha-filetab">index.html</button>
</div>
<div class="ha-code">
<span class="ha-line"><<span class="ha-tag">form</span> <span class="ha-attr">action</span>=<span class="ha-str">"/submit"</span> <span class="ha-attr">method</span>=<span class="ha-str">"post"</span>></span>
<span class="ha-line ha-clickable" data-part="name"> <<span class="ha-tag">label</span>>Name:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="name"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"text"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Your name"</span> /></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line"> </span>
<span class="ha-line ha-clickable" data-part="email"> <<span class="ha-tag">label</span>>Email:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="email"> <<span class="ha-tag">input</span></span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-attr">type</span>=<span class="ha-str">"email"</span></span>
<span class="ha-line ha-clickable" data-part="email"> <span class="ha-attr">placeholder</span>=<span class="ha-str">"you@example.com"</span></span>
<span class="ha-line ha-clickable" data-part="email"> /></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line"> </span>
<span class="ha-line ha-clickable" data-part="feedback"> <<span class="ha-tag">label</span>>Feedback:</<span class="ha-tag">label</span>><<span class="ha-tag">br</span> /></span>
<span class="ha-line ha-clickable" data-part="feedback"> <<span class="ha-tag">textarea</span> <span class="ha-attr">rows</span>=<span class="ha-str">"4"</span> <span class="ha-attr">cols</span>=<span class="ha-str">"40"</span> <span class="ha-attr">placeholder</span>=<span class="ha-str">"Write here..."</span>></<span class="ha-tag">textarea</span>></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line"> </span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">label</span>>Choose a topic:</<span class="ha-tag">label</span>></span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">select</span>></span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">option</span>>HTML</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">option</span>>CSS</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="select"> <<span class="ha-tag">option</span>>JavaScript</<span class="ha-tag">option</span>></span>
<span class="ha-line ha-clickable" data-part="select"> </<span class="ha-tag">select</span>></span>
<span class="ha-line"> <<span class="ha-tag">br</span> /><<span class="ha-tag">br</span> /></span>
<span class="ha-line"> </span>
<span class="ha-line ha-clickable" data-part="submit"> <<span class="ha-tag">input</span> <span class="ha-attr">type</span>=<span class="ha-str">"submit"</span> <span class="ha-attr">value</span>=<span class="ha-str">"Send"</span> /></span>
<span class="ha-line"></<span class="ha-tag">form</span>></span>
</div>
</div>
<div class="ha-browser">
<div class="ha-browser-bar">
<span class="ha-dot"></span><span class="ha-dot"></span><span class="ha-dot"></span>
<div class="ha-tab">🌐 127.0.0.1:5500/basicstructure.html</div>
</div>
<div class="ha-urlrow">127.0.0.1:5500/basicstructure.html</div>
<div class="ha-screen">
<div class="ha-field">
<span class="ha-out-wrap" id="wrap-name"><label>Name:</label> <input type="text" placeholder="Your name"></span>
</div>
<div class="ha-field">
<span class="ha-out-wrap" id="wrap-email"><label>Email:</label> <input type="email" placeholder="you@example.com"></span>
</div>
<div class="ha-field">
<span class="ha-out-wrap" id="wrap-feedback">
<label>Feedback:</label><br>
<textarea rows="4" cols="40" placeholder="Write here..."></textarea>
</span>
</div>
<div class="ha-field">
<span class="ha-out-wrap" id="wrap-select">
<label>Choose a topic:</label>
<select>
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
</select>
</span>
</div>
<span class="ha-out-wrap" id="wrap-submit"><button class="ha-out-submit">Send</button></span>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
const wrapper = document.getElementById('ha-root');
const bodyAttr = document.body.getAttribute('data-darkmode');
let dark;
if (bodyAttr === 'true') {
dark = true;
} else if (bodyAttr === 'false') {
dark = false;
} else {
const match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) wrapper.setAttribute('data-theme', 'dark');
})();
(function () {
const outMap = {
name: 'wrap-name', email: 'wrap-email', feedback: 'wrap-feedback',
select: 'wrap-select', submit: 'wrap-submit'
};
document.querySelectorAll('.ha-line.ha-clickable').forEach(line => {
line.addEventListener('click', () => {
const part = line.getAttribute('data-part');
document.querySelectorAll('.ha-line').forEach(l => {
l.classList.toggle('ha-active', l.getAttribute('data-part') === part);
});
document.querySelectorAll('.ha-out-wrap').forEach(el => el.classList.remove('ha-out-lit'));
const el = document.getElementById(outMap[part]);
if (el) el.classList.add('ha-out-lit');
});
});
})();
</script>
</body>
</html>.demo {
font-family: system-ui, sans-serif;
padding: 16px;
}
.demo h1 {
color: #2563eb;
margin: 0 0 8px;
}
.demo p {
color: #4b5563;
margin: 0;
}document.querySelector('.demo h1')?.addEventListener('click', () => {
alert('Hello from live preview!');
});✅ Summary (in plain words):
Element | Use it for... |
|---|---|
<input> | Short answers like name, email, etc. |
<textarea> | Longer answers like messages or comments |
<select> | Let users pick from a list of choices. |