::placeholder伪元素必须用双冒号书写,仅支持color、font-size等有限样式,不支持尺寸布局属性,且ie完全不支持;暗色模式需手动适配颜色。

placeholder 伪元素必须用 ::placeholder
直接写 input::placeholder 才生效,::-webkit-input-placeholder 或 ::-moz-placeholder 这类旧前缀在现代浏览器里不是必须的,但保留它们能覆盖 Chrome 50 以下、Firefox 18 以下等老环境。如果只写 ::placeholder,Firefox 51+ 和 Chrome 57+ 没问题,但 IE 完全不支持——IE 根本没实现这个伪元素。
常见错误是漏掉双冒号,写成 :placeholder(单冒号),这在所有浏览器里都无效。
颜色、字体、透明度可以改,但不能改尺寸或布局
::placeholder 支持的样式非常有限:能设 color、font-size、font-weight、opacity、text-transform,但不能设 width、height、padding、margin、line-height(部分浏览器会忽略),也不能用 background 覆盖输入框底色。
示例:
input::placeholder {
color: #999;
font-size: 14px;
opacity: 0.8;
}
注意:opacity 会影响整个 placeholder 文字的透明度,不是用 color: rgba(0,0,0,0.5) 更稳妥——因为某些安卓 WebView 对 opacity 渲染异常。
placeholder 文字无法垂直居中对齐
很多人想用 line-height 或 padding-top 把 placeholder 往上/下拉,结果发现没用。这是因为 placeholder 是内联内容,且浏览器对其盒模型控制极弱。真正起作用的是父 input 元素的 line-height 和 padding,placeholder 只能被动跟随。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
所以调整占位符“视觉位置”的正确做法是:
- 统一设置
input的height、padding、line-height(三者需匹配) - 避免给
::placeholder加vertical-align或transform: translateY()(后者在 Safari 里可能触发重绘异常) - 如需更精细控制,考虑用 JS 模拟 placeholder(比如用
label浮层 +focus/input事件切换显隐)
暗色模式下 placeholder 颜色容易看不清
如果页面启用了 @media (prefers-color-scheme: dark),但没同步调整 placeholder 颜色,深背景配默认灰色文字(如 #999)会几乎看不见。
推荐写法:
input::placeholder {
color: #999;
}
@media (prefers-color-scheme: dark) {
input::placeholder {
color: #666;
}
}
别依赖系统自动适配——placeholder 没有继承 color-scheme,必须手动指定。
复杂点在于:有些设计系统用 CSS 变量控制主题色,这时 placeholder 应该读取变量而非写死值;但变量在伪元素里不总能生效(尤其在 Shadow DOM 中),得加一层 fallback。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










