placeholder是HTML5为输入框提供的占位符属性,用户还没输入内容时,输入框里会显示一段灰色提示文字。很多同学想当然地写input { color: red; },结果发现提示文字纹丝不动。这是因为placeholder的样式独立于输入框本身的文字样式,普通的选择器根本选不中它,必须使用专门的伪元素选择器::placeholder才能生效。本文将完整讲解它的用法和常见的踩坑点。

一、::placeholder伪元素的基本用法
在CSS3标准中,占位符样式通过::placeholder伪元素来控制。它的语法非常简单,把它当成一个挂在input或textarea上的伪元素即可:
input::placeholder {
color: #999;
font-size: 14px;
letter-spacing: 2px;
}
textarea::placeholder {
color: #4a90d9;
font-style: italic;
}
需要注意的是,::placeholder前面必须紧跟选择器本身,中间可以有空格也可以没有,但一般推荐写在一起。你可以单独针对某个输入框设置,比如给它加一个类名.search-input::placeholder,这样只影响搜索框而不影响其他表单控件。
伪元素写法也支持单冒号形式:placeholder,在部分老浏览器中单冒号会被当作伪类解析。按照规范,伪元素推荐使用双冒号,伪类使用单冒号,现代浏览器两种写法都识别,但为了代码可读性,建议统一使用双冒号。
二、浏览器兼容与厂商前缀写法
::placeholder在早期的Firefox和WebKit内核浏览器中,需要加上各自的私有前缀才能生效。Firefox使用:-moz-placeholder(旧版)和::-moz-placeholder(新版),Chrome和Safari使用::-webkit-input-placeholder,IE10和IE11则使用:-ms-input-placeholder。如果你的项目需要兼容这些老环境,就需要把多种写法全部列出来:
/* Chrome / Safari / 新版Opera */
input::-webkit-input-placeholder {
color: #c0c4cc;
}
/* IE10 / IE11 */
input:-ms-input-placeholder {
color: #c0c4cc;
}
/* Firefox 4到18 */
input:-moz-placeholder {
color: #c0c4cc;
}
/* Firefox 19+ */
input::-moz-placeholder {
color: #c0c4cc;
opacity: 1;
}
/* 标准写法,放在最后兜底 */
input::placeholder {
color: #c0c4cc;
}
这里有一个重要细节:这些带前缀的选择器互不兼容,所以不能合并写成一行逗号分隔的形式。一旦某个浏览器解析到不认识的选择器,整条规则都会被丢弃,因此每一条必须单独声明。
另一个Firefox特有的问题是,它默认给placeholder设置了opacity不到1的样式,导致你明明写了浅色却发现颜色发虚。解决办法是在规则里显式加上opacity: 1;来覆盖,这一点在上面的代码中已经体现。
三、可设置的属性与常见踩坑
::placeholder并不是所有CSS属性都能用。文字类的属性基本都支持,比如color、font-size、font-weight、letter-spacing、text-transform、text-overflow等。背景类属性如background-color在部分浏览器上也能生效。但盒子模型相关的属性(宽高、边距、浮动等)多数无效,因为伪元素依附于文本渲染层,不是一个真正的布局元素。
常见的坑主要有三个。第一,忘记写厂商前缀导致某个浏览器下样式完全丢失,尤其是Firefox的opacity问题。第二,以为placeholder会自动继承input上设置的color,实际上大多数浏览器给placeholder内置了默认的半透明灰色,不主动覆盖就不会变。第三,想让超长的占位文字显示省略号,可以配合text-overflow: ellipsis;,但要注意同时设置overflow: hidden;才能稳定生效:
.input-ellipsis::placeholder {
color: #909399;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
最后补充一个小技巧:如果你想区分placeholder文字大小与用户输入文字大小,可以只在::placeholder里设置较小的字号,输入框本身保持正常字号,这样提示信息更低调,用户输入后视觉上更突出,是表单设计中很常用的细节处理方式。
placeholderCSS伪元素表单样式修改时间:2026-09-15 14:36:34