textarea的placeholder属性必须直接写在标签内,仅空且未聚焦时显示,不参与提交;需配合label或aria-label保障无障碍,样式须用::placeholder伪元素,移动端和旧浏览器存在兼容问题。

HTML 表格里不能直接给 <textarea></textarea> 套上 title 或 placeholder 就完事——因为 <textarea></textarea> 是表单控件,不是表格语义元素;提示文字必须落在 <textarea></textarea> 自身上,和它在不在 <td> 里无关。
<h3>textarea 的 placeholder 属性必须写在标签内部</h3>
<p>表格单元格中嵌套 <code><textarea></textarea> 时,提示文字仍靠 placeholder 属性实现。它只在内容为空且未聚焦时显示,不参与提交,也不影响语义。
-
placeholder值必须是纯文本,不能含 HTML 标签(比如<br>或<strong></strong>) - 别写成
value="提示文字"—— 那会变成真实默认值,用户不删就直接提交 - 如果
<textarea></textarea>已有初始内容(比如从后端渲染的编辑态数据),placeholder自动不显示 - 示例正确写法:
<td><textarea placeholder="请输入备注信息"></textarea></td>
移动端和无障碍支持不能只靠 placeholder
placeholder 在 iOS Safari 和部分安卓 WebView 中存在渲染异常(如软键盘弹出后残留、换行错位),且屏幕阅读器对其支持不稳定——有些跳过不读,有些只在聚焦瞬间读一次。
- 必须配
<label for="xxx"></label>或aria-label,否则键盘用户无法知道这个输入框用途 - 关键说明(如“最多 200 字”“仅支持英文”)不能塞进
placeholder,得放在<label></label>旁或用aria-describedby关联额外<div> <li>若表格列宽窄导致 <code><textarea></textarea>高度受限,placeholder可能被截断——需加 CSS:textarea { overflow: auto; resize: vertical; } - 各浏览器前缀尚未完全统一,建议写全:
textarea::placeholder、textarea::-webkit-input-placeholder、textarea::-moz-placeholder、textarea:-ms-input-placeholder - Firefox 在 focus 状态下默认隐藏
::-moz-placeholder,如需常驻,得加opacity: 1 - 避免用太浅的灰(如
#ccc),实测在强光屏下几乎不可见,推荐#666起步 - React:应通过
useState控制placeholder属性,而非ref.current.placeholder = ... - Vue:用
:placeholder="dynamicHint"绑定 data 或 computed 属性 - 老安卓 WebView(如 Android 4.3)对
<textarea placeholder></textarea>渲染有偏移 bug,必要时可加style="line-height: 1.5;"缓解
样式定制必须用 ::placeholder 伪元素
直接对 <textarea></textarea> 写 color 或 font-size 不会影响提示文字,必须用伪类选择器。
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
立即学习“前端免费学习笔记(深入)”;
动态修改 placeholder 值要注意框架绑定方式
原生 JS 改 el.placeholder = "新提示" 没问题,但在 React/Vue 中直接操作 DOM 属性会破坏响应式链路。
真正容易被忽略的是:表格中多个 <textarea></textarea> 共享同一套提示逻辑时,别为了“省事”把 placeholder 写死成相同文案——每个输入框的上下文不同,提示必须具体到字段含义,比如“订单备注(买家可见)”和“内部处理说明(仅客服可见)”绝不能混用。


















