placeholder 属性仅对 input(text、search 等)和 textarea 有效,非全局 CSS 或 JS 方法;显示为浅灰色提示文字,不提交、非默认值,需用 value 或 defaultValue 设默认值;样式须用 ::placeholder 及各浏览器前缀;无语义权重,不可用于校验或替代 label。

placeholder 属性写在 input 或 textarea 里才生效
它不是全局 CSS 属性,也不是 JavaScript 方法,只对部分表单控件有效。浏览器会自动在空值时显示浅灰色提示文字,聚焦后消失。
-
input类型为text、search、url、tel、email、password、number时支持placeholder -
textarea支持,但select、checkbox、radio、file不支持 - 如果用了
contenteditable或自定义组件,placeholder不起作用,得用 JS 模拟
placeholder 的文本不会提交,也不算 value 值
用户没输内容时,表单提交或 JS 读取 value 得到的是空字符串,不是 placeholder 文本。这点常被误当成“默认值”来用。
- 想设默认值,该用
value="xxx"(input)或defaultValue(React 受控组件需配合 state) - 用
placeholder做必填校验提示?不行——提交时它已消失,后端或 JS 校验仍要单独处理空值 - 屏幕阅读器会读出
placeholder,但它语义上只是提示,不是标签;应配label元素确保可访问性
placeholder 样式不能直接用 class 控制,得靠伪元素
它的颜色、字体等样式无法通过普通 CSS 类设置,必须用 ::placeholder 伪元素,且各浏览器前缀不同。
- Chrome / Edge / Firefox 95+:直接写
::placeholder - 旧版 Firefox:用
::-moz-placeholder - Safari / iOS Safari:用
::-webkit-input-placeholder - 别漏掉透明度问题:
opacity: 1有时比color更可靠,尤其在深色主题下
input::placeholder {
color: #999;
opacity: 1;
}
input::-webkit-input-placeholder { color: #999; }
input::-moz-placeholder { color: #999; }
placeholder 在中文输入法下可能闪烁或延迟隐藏
用户用拼音输入时,刚点进框还没打字,placeholder 有时会闪一下才消失;或者输入中途切换中英文,placeholder 错误重现。这不是 bug,是浏览器对 input 事件时机的判断差异。
- React/Vue 等框架里,别依赖
placeholder控制显隐逻辑——它不响应 state 变化,只看 DOM 的value是否为空 - 如果需要“输入中提示 + 输入完成替换”,得用额外
span层 +focus/input事件手动控制 - 移动端键盘弹起时,placeholder 位置偏移?大概率是 viewport 缩放或
height计算异常,和 placeholder 本身无关
真正容易被忽略的是:placeholder 的语义权重很低,既不参与表单验证,也不影响 ARIA 属性读取顺序,更不会被搜索引擎索引。把它当视觉糖可以,当成交互逻辑的一部分,就容易翻车。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











