Textarea for Multi-line Input
Collect multi-line text with the textarea element.
Textarea for Multi-line Input is a free HTML Academy lesson on CoddyKit. This is lesson 2 of 4. Any 3 lessons of this learning path are free to read in full — after that, CoddyKit PRO unlocks every lesson, plus hands-on practice with a built-in code editor and a 24/7 AI tutor. It is part of the HTML Academy learning path, and your progress syncs across the web and the CoddyKit app. The HTML Academy course includes 4 lessons in total.
The textarea Element
The <textarea> element accepts multi-line text input:
<label for="message">Message</label>
<textarea
id="message"
name="message"
rows="5"
cols="40"
placeholder="Enter your message here..."
></textarea>
<!-- textarea is NOT a void element -- it has a closing tag -->
<!-- Default content goes between the tags, not in a value attribute -->rows and cols Attributes
rows and cols set the initial visible size:
<!-- rows: height in lines (default: 2) -->
<!-- cols: width in characters (default: 20) -->
<textarea rows="6" cols="50">...</textarea>
<!-- Better: use CSS for sizing -->
<textarea style="width: 100%; height: 150px; resize: vertical;">Setting Default Content
Default text goes between the opening and closing tags:
<textarea name="bio">
Hello! I am a developer who loves HTML.
</textarea>
<!-- Note: whitespace inside textarea IS rendered -->
<!-- The newline after the opening tag will appear in the textarea -->
<!-- Avoid whitespace between tags if you don't want it -->resize with CSS
Control user resizing with the CSS resize property:
textarea {
resize: vertical; /* allow only vertical resize */
/* resize: horizontal -- only horizontal */
/* resize: both -- both directions (default) */
/* resize: none -- prevent resizing */
width: 100%;
min-height: 120px;
max-height: 400px;
padding: 0.5rem;
box-sizing: border-box;
}Auto-growing Textarea
Make a textarea grow as the user types with JavaScript:
<textarea id="auto-grow" rows="3" style="overflow: hidden;"></textarea>
<script>
const ta = document.getElementById('auto-grow');
ta.addEventListener('input', () => {
ta.style.height = 'auto';
ta.style.height = ta.scrollHeight + 'px';
});
</script>maxlength and minlength
Limit text length in a textarea:
<label for="bio">Bio (max 500 characters)</label>
<textarea
id="bio"
name="bio"
maxlength="500"
minlength="10"
rows="4"
></textarea>
<!-- Live character count: -->
<small id="char-count">0/500</small>
<script>
document.getElementById('bio').addEventListener('input', function() {
document.getElementById('char-count').textContent =
this.value.length + '/500';
});
</script>spellcheck Attribute
The spellcheck attribute controls spell checking:
<!-- Enable (default for textarea) -->
<textarea spellcheck="true">...</textarea>
<!-- Disable (for code editors, technical input) -->
<textarea spellcheck="false">...</textarea>wrap Attribute
The wrap attribute controls how line wrapping is submitted:
<!-- wrap="soft" (default): text wraps visually but newlines not added -->
<textarea wrap="soft">...</textarea>
<!-- wrap="hard": newlines inserted at wrap points when submitted -->
<!-- Requires cols to be set -->
<textarea wrap="hard" cols="40">...</textarea>readonly and disabled
Make textarea non-editable:
<!-- readonly: visible, selectable, submitted -->
<textarea readonly>This is read-only text.</textarea>
<!-- disabled: cannot interact, not submitted -->
<textarea disabled>Disabled textarea.</textarea>Textarea Accessibility
Accessibility notes for textareas:
- Always associate a
<label>usingfor/id - Use
aria-describedbyto link help text or character counters - Announce character limit changes to screen readers with live regions
<label for="comment">Comment</label>
<textarea id="comment" aria-describedby="comment-hint"></textarea>
<p id="comment-hint">Maximum 200 characters.</p>Styling Textarea
Common textarea styling:
textarea {
width: 100%;
padding: 0.75rem;
border: 1px solid #ddd;
border-radius: 0.375rem;
font-family: inherit; /* match surrounding font */
font-size: 1rem;
line-height: 1.5;
resize: vertical;
min-height: 100px;
box-sizing: border-box;
transition: border-color 0.2s;
}
textarea:focus {
outline: none;
border-color: #0070f3;
box-shadow: 0 0 0 3px rgba(0,112,243,0.2);
}Quick Check
How do you set pre-filled text in a textarea?
Recap: Textarea
Textarea essentials:
- Multi-line text input with a closing tag
- Default content between opening and closing tags (not value attribute)
rowsandcolsset initial size; prefer CSSmaxlengthandminlengthcontrol lengthresize: verticalin CSS for controlled resizing- Auto-grow: set
height: scrollHeighton input event
Learn HTML with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 40
- Lessons
- 159
Frequently Asked Questions
Is the “Textarea for Multi-line Input” lesson free?
Yes — any 3 lessons of the HTML Academy learning path, including “Textarea for Multi-line Input”, are free to read in full here on the web. After that, CoddyKit PRO unlocks every lesson, plus interactive practice with a built-in code editor and a 24/7 AI tutor. The HTML Academy course includes 4 lessons in total.
What will I learn in “Textarea for Multi-line Input”?
Collect multi-line text with the textarea element. You practise HTML Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start HTML Academy?
No prior experience is required. HTML Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 2 of 4.
How long does the “Textarea for Multi-line Input” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this HTML Academy lesson?
Yes. Every HTML Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Select and option Dropdown Menus
- Textarea for Multi-line Input
- Checkbox and Radio Button Groups
- Datalist for Autocomplete