我正在使用占位符进行文本输入,这很好 . 但是我也想为我的选择框使用占位符 . 当然我可以使用这段代码:
<select>
<option value="">Select your option</option>
<option value="hurr">Durr</option>
</select>
但是“选择你的选项”是黑色而不是光泽 . 所以我的解决方案可能是基于CSS的 . jQuery也很好 .
这只会使下拉列表中的选项变为灰色(因此点击箭头后):
option:first {
color: #999;
}
编辑:问题是:人们如何在选择框中创建占位符?但它已经得到了回答,欢呼 .
使用此选项会导致所选值始终为灰色(即使选择了实际选项后):
select {
color:#999;
}
23 回答
这是我的
这是一个非常有效的 CSS 解决方案 . 在包含元素( via :after pseudo-class )之后添加内容(并相对于容器绝对定位) . 它从我定义的占位符属性获取其文本,我使用该指令( attr(placeholder) ) . 另一个关键因素是 pointer-events: none - 这允许对占位符文本的点击传递给选择 . 否则,如果用户单击文本,则不会下拉 .
我在我的select指令中自己添加了 .empty 类,但通常我发现angular为我添加/删除 .ng-empty (我假设它在我的代码示例中注入了Angular 1.2版本's b/c I')
(该示例还演示了如何在angularJS中包装HTML元素以创建自己的自定义输入)
我'm not content with HTML/CSS only solutions, so I'已决定使用JS创建自定义
select
.这是我在过去30分钟内写的,因此可以进一步改进 .
您所要做的就是创建一个包含少量数据属性的简单列表 . 代码会自动将列表转换为可选择的下拉列表 . 它还添加了一个隐藏的
input
来保存选定的值,因此可以在表单中使用它 .输入:
输出:
应该是占位符的项目的文本显示为灰色 . 如果用户想要恢复他/她的选择,则占位符是可选择的 . 同样使用CSS,可以克服
select
的所有缺点(例如,无法选择样式) .Update :我对此进行了改进(使用上/下/输入键进行选择) . 稍微整理输出并将其转换为对象 . 当前输出:
初始化:
进一步检查:JSFiddle,_ 2009993(重命名) .
Update: 再次改写 . 我们可以使用select而不是列表 . 这样它'll work even without JS (in case it' s禁用) .
输入:
输出:
JSFiddle,GitHub .
我希望SELECT在选择之前是灰色的,这样对于这段HTML:
我添加了这些CSS定义:
它在Chrome / Safari中可以正常工作,也可能在其他浏览器中使用,但我还没有检查过 .
对于上面的所有解决方案,但由于HTML规范,这个似乎最有效:
UPDATE: 请原谅我这个错误答案,这绝对不是
select
元素的占位符解决方案,而是打开的select
元素列表下的分组选项的 Headers .输入[type =“text”]选择元素的样式占位符
以下解决方案模拟占位符,因为它与
input[type="text"]
元素相关:我看到了正确答案的迹象,但要将它们整合在一起,这将是我的解决方案 .
对于必填字段,现代浏览器中有一个纯CSS解决方案:
如果你使用角度就像这样
JS的另一种可能性:
JSFiddle
试试这个改变
这是我的贡献 . HAML Coffeescript SCSS
HAML
Coffeescript
SCSS
通过更改服务器代码并仅根据属性的当前值设置类样式,可以仅使用CSS,但这种方式似乎更简单,更清晰 .
您可以添加更多CSS(
select option:first-child
)以在占位符打开时保持灰色,但我并不关心 .在这里我修改了大卫的答案(接受了答案) . 在他的回答中,他在选项标签上放置了禁用和选择的属性,但是当我们也放置隐藏标签时,它看起来会更好 . 通过在选项标签上添加额外的隐藏属性,将阻止在选择“Durr”选项后重新选择“选择您的选项”选项 .
该解决方案也适用于FireFox:
没有任何JS .
我遇到了同样的问题,在搜索时遇到了这个问题,在我找到好的解决方案之后,我想与你们分享,以防有人可以从中受益 . 这是:HTML:
CSS:
JS:
客户首先选择后不需要灰色,因此JS删除了类
place_holder
. 我希望这可以帮助别人 :)Update: 感谢@ user1096901,作为IE浏览器的解决方案,你可以再次添加
place_holder
class,以防再次选择第一个选项:)用户不应在选择选项中看到占位符 . 我建议使用
hidden
属性作为占位符选项,你不需要selected
属性这个选项,你可以把它作为第一个 .只是偶然发现了这个问题,这里有什么适用于FireFox和Chrome(至少)
“禁用”选项会停止使用鼠标和键盘选择
<option>
,而只使用'display:none'
允许用户仍然通过键盘箭头进行选择 .'display:none'
样式只使列表框看起来像'nice' .注意:在"placeholder"选项上使用空
value
属性允许验证(必需属性)解决"placeholder",因此如果选项未更改但需要;浏览器应提示用户从列表中选择一个选项 .Update (July 2015):
在以下浏览器中确认此方法:
谷歌浏览器 - v.43.0.2357.132
Mozilla Firefox - v.39.0
Safari - v.8.0.7(占位符在下拉列表中可见,但不可选)
Microsoft Internet Explorer - v.11(占位符在下拉列表中可见,但不可选)
Project Spartan - v.15.10130(占位符在下拉列表中可见,但不可选)
Update (October 2015):
删除了
style="display: none"
,转而支持广泛支持的HTML5属性hidden
.hidden
元素与Safari,IE中的display: none
具有相似的特征(Project Spartan需要检查),其中option
在下拉列表中可见但不可选 .Update (January 2016):
当
select
元素是required
时,它允许使用:invalid
CSS伪类,它允许您在select
元素处于"placeholder"状态时设置样式 . 由于占位符option
中的空值,:invalid
在这里工作 .一旦设置了值,
:invalid
伪类将被删除 . 如果您愿意,也可以选择使用:valid
.大多数浏览器都支持这种伪类 . IE10 . 这适用于自定义样式的
select
元素;在某些情况下(例如Chrome / Safari中的Mac),您需要更改select
框的默认外观,以便显示某些样式,即background-color
,color
. 您可以在developer.mozilla.org找到一些关于兼容性的示例和更多信息 .Chrome中的原生元素外观Mac:
在Chrome中使用更改的边框元素Mac:
我刚刚在下面的选项中添加了隐藏属性,它对我来说很好 .
不需要任何JS或CSS,只需要3个属性:
它根本不显示选项,只是将选项的值设置为默认值 .
但是,如果你只是 don't like a placeholder that's the same color as the rest ,你可以像这样内联修复它:
显然,您可以将函数和至少select的CSS分离为单独的文件 .
Note: onload函数纠正了刷新错误 .
非CSS怎么样 - 没有javascript / jQuery的答案?
这样的事可能吗?
HTML:
CSS:
JavaScript的:
工作示例:http://jsfiddle.net/Zmf6t/
我目前无法使这些工作正常工作,因为对我而言,(1)不需要,(2)需要选项返回默认选择 . 所以如果你使用jquery,这里是一个沉重的选择: