设置文本输入框与文本区域样式
为文本输入框和文本区域应用边框、内边距、环形和焦点实用程序,创建简洁且无障碍的表单字段。
设置文本输入框与文本区域样式 是 CoddyKit 上的免费 Tailwind CSS Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Tailwind CSS Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Tailwind CSS Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
The Problem With Unstyled Inputs
Browsers render text inputs and textareas with their own default styles — different on every operating system and browser. On Chrome, the default input has a blue ring on focus; on Firefox, it may look different entirely.
Tailwind resets form elements with its preflight base styles, giving you a clean slate. From there, you apply your own border, padding, background, and focus styles explicitly, creating a consistent experience across all browsers.
<!-- Without styling: browser-dependent appearance -->
<input type="text" placeholder="Enter name" />
<!-- With Tailwind: consistent, styled input -->
<input
type="text"
placeholder="Enter name"
class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
/>Base Input Structure
A well-styled text input combines sizing, border, background, and focus utilities. The core pattern is w-full px-3 py-2 text-sm bg-white border border-gray-300 rounded-lg for the default state.
Add placeholder:text-gray-400 to soften the placeholder text and text-gray-900 to ensure actual input text is dark and readable. The w-full utility ensures the input fills its container, which is the expected behavior for form fields.
<input
type="text"
placeholder="Full name"
class="w-full px-3 py-2 text-sm text-gray-900 bg-white
border border-gray-300 rounded-lg
placeholder:text-gray-400"
/>Focus Ring and Outline
The focus state is the most important interactive style for an input. Users navigating by keyboard need a clear visual indicator of which field is active. Use focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent to replace the browser's default outline with a Tailwind ring.
The focus:border-transparent removes the gray border when focused so the blue ring is not competing with it visually. Add transition-shadow duration-150 for a smooth ring appearance.
<input
type="email"
placeholder="you@example.com"
class="w-full px-3 py-2 text-sm text-gray-900 bg-white
border border-gray-300 rounded-lg
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent
transition-shadow duration-150"
/>Label and Input Pairing
Every input must have an associated label for accessibility. Wrap the label and input in a flex flex-col gap-1 container so they stack neatly. The label uses text-sm font-medium text-gray-700 and is connected to the input with matching for and id attributes.
Never rely solely on placeholder text as a label substitute — placeholders disappear when the user starts typing, leaving the field context-less.
<div class="flex flex-col gap-1">
<label for="email" class="text-sm font-medium text-gray-700">
Email address
</label>
<input
id="email"
type="email"
placeholder="you@example.com"
class="w-full px-3 py-2 text-sm text-gray-900 bg-white
border border-gray-300 rounded-lg
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
/>
</div>Input With Icon Prefix
Many inputs benefit from a prefix icon that communicates the expected input type — a search magnifier, an envelope for email, or a lock for passwords. Use relative on the wrapper, absolute left-3 top-1/2 -translate-y-1/2 on the icon, and pl-10 on the input to indent the text past the icon.
This technique keeps the icon and input cleanly aligned without any extra wrapper elements affecting layout.
<div class="relative">
<svg class="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"
fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
</svg>
<input
type="email"
placeholder="you@example.com"
class="w-full pl-10 pr-3 py-2 text-sm text-gray-900 bg-white
border border-gray-300 rounded-lg
focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</div>Input With Suffix Button
A suffix button sits attached to the right edge of an input — common in password fields (show/hide toggle) or search inputs (submit button). Use a flex wrapper with overflow-hidden rounded-lg border border-gray-300 flex, set the input to flex-1 border-0 focus:ring-0, and style the button with a left border separator.
The border-0 on the input removes its border since the outer flex wrapper provides the shared border.
<div class="flex overflow-hidden rounded-lg border border-gray-300 focus-within:ring-2 focus-within:ring-blue-500">
<input
type="text"
placeholder="Search..."
class="flex-1 px-3 py-2 text-sm text-gray-900 border-0 focus:ring-0 focus:outline-none"
/>
<button class="px-4 py-2 bg-blue-600 text-white text-sm font-semibold
border-l border-gray-300 hover:bg-blue-700 transition-colors">
Search
</button>
</div>Styling Textareas
Textareas use the same utility classes as text inputs. Set a minimum height with min-h-24 or a fixed height with h-32, and add resize-none or resize-y to control whether the user can resize the element.
Use resize-y to allow vertical resizing (the most natural behavior for textareas) and prevent horizontal resizing that can break the layout. Adding leading-relaxed improves readability as users type multi-line content.
<div class="flex flex-col gap-1">
<label for="message" class="text-sm font-medium text-gray-700">Message</label>
<textarea
id="message"
rows="4"
placeholder="Write your message here..."
class="w-full px-3 py-2 text-sm text-gray-900 bg-white
border border-gray-300 rounded-lg
resize-y leading-relaxed
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
></textarea>
</div>Disabled Input Styling
Disabled inputs should be visually distinguished from active ones. Apply disabled:bg-gray-50 disabled:text-gray-400 disabled:cursor-not-allowed to create a lighter, greyed-out appearance. Also add disabled:border-gray-200 to soften the border.
Always include the HTML disabled attribute — Tailwind's disabled: variant reads this attribute, so the styles only apply when the attribute is present.
<input
type="text"
value="Cannot edit this"
disabled
class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg
disabled:bg-gray-50 disabled:text-gray-400
disabled:cursor-not-allowed disabled:border-gray-200"
/>Read-Only Input Style
A readonly input displays a value users can read and copy but not modify. Unlike disabled, read-only inputs are still focusable and keyboard-navigable. Style them with read-only:bg-gray-50 read-only:text-gray-600 to subtly indicate they cannot be edited.
Read-only fields are used for computed values, confirmation fields, or reference data that users need to see but should not change.
<div class="flex flex-col gap-1">
<label for="ref" class="text-sm font-medium text-gray-700">Reference ID</label>
<input
id="ref"
type="text"
value="ORD-2026-00847"
readonly
class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg
read-only:bg-gray-50 read-only:text-gray-600
focus:outline-none focus:ring-2 focus:ring-gray-400"
/>
</div>Input Size Variants
Forms in different contexts need different input sizes. Define a small, medium, and large variant by changing the padding and text size. A small input is ideal for inline filters; a large input suits hero search bars.
- Small:
px-2.5 py-1.5 text-xs - Medium:
px-3 py-2 text-sm(default) - Large:
px-4 py-3 text-base
<!-- Small -->
<input type="text" placeholder="Small" class="w-full px-2.5 py-1.5 text-xs border border-gray-300 rounded-md focus:outline-none focus:ring-1 focus:ring-blue-500" />
<!-- Medium (default) -->
<input type="text" placeholder="Medium" class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" />
<!-- Large -->
<input type="text" placeholder="Large" class="w-full px-4 py-3 text-base border border-gray-300 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500" />Character Count Helper Text
Textareas for user-generated content often include a character count displayed below the field. Use a flex row with flex items-center justify-between mt-1 to position helper text on the left and the count on the right.
Style the helper text with text-xs text-gray-500 and the count with matching small gray text. JavaScript updates the count on each input event. When near the limit, switch the count color to text-red-600 as a warning.
<div class="flex flex-col gap-1">
<label for="bio" class="text-sm font-medium text-gray-700">Bio</label>
<textarea
id="bio"
maxlength="160"
rows="3"
oninput="document.getElementById('count').textContent = this.value.length"
class="w-full px-3 py-2 text-sm border border-gray-300 rounded-lg resize-none
focus:outline-none focus:ring-2 focus:ring-blue-500"
></textarea>
<div class="flex items-center justify-between">
<span class="text-xs text-gray-500">Tell us about yourself</span>
<span class="text-xs text-gray-400"><span id="count">0</span>/160</span>
</div>
</div>Quick Check
Test your understanding of Tailwind CSS Mastery concepts from this lesson.
Lesson Recap
In this lesson you learned: base input styling with border border-gray-300 rounded-lg px-3 py-2; focus rings replacing browser outlines using focus:outline-none focus:ring-2 focus:ring-blue-500; and special input patterns like icon prefixes with absolute positioning, suffix buttons using flex layout, and disabled/read-only variants. Next up we style select menus and checkboxes.
用 AI 导师学习 HTML — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「设置文本输入框与文本区域样式」课时是免费的吗?
是的 — 「设置文本输入框与文本区域样式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Tailwind CSS Academy 课程的其余内容,请升级到 CoddyKit PRO。 Tailwind CSS Academy 课程共包含 4 节课。
「设置文本输入框与文本区域样式」这节课中我会学到什么?
为文本输入框和文本区域应用边框、内边距、环形和焦点实用程序,创建简洁且无障碍的表单字段。 你通过在浏览器中直接运行的动手代码来练习 Tailwind CSS Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Tailwind CSS Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Tailwind CSS Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「设置文本输入框与文本区域样式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Tailwind CSS Academy 课中编写并运行代码吗?
能。每节 Tailwind CSS Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。