这是一种模仿您所追求的行为的方法,带有一些定位魔术和 jQuery。该代码仅在 Chrome 上进行了测试,因此可能需要进行一些调整才能在所有浏览器中看起来都不错。另请参阅 IE7 页面底部的注释
http://jsfiddle.net/FvFVJ/
html相当简单。只需在input
您的选择旁边添加一个字段并将两者包装在一个 div 中。您可以将属性添加readonly
到输入字段,如果您愿意,可以禁用编辑
.wrap {
position: relative;
border: 1px solid #ccc;
height: 21px;
border-radius: 4px;
}
.wrap select {
opacity: 0;
position: absolute;
top: -3px;
left: -3px;
z-index: 1;
}
.wrap input {
display: inline-block;
position: absolute;
top: 0;
left: 2px;
z-index: 2;
border: 0;
}
.wrap:after{
content: "\25BE";
font-size: 1.5em;
position: absolute;
right: 0;
top: -3px;
z-index: 0;
}
这两个元素都position:absolute
在包装内。注意事项
- 该
select
元素具有opacity:0
使其不可见但仍可单击的
- 伪元素
.wrap:after
,用作下拉箭头 (*)
- 将输入置于选择之上的
z-index
排序,期望角落将充当下拉按钮
- 宽度需要在 css(静态)或 javascript(动态)中正确固定
$(function () {
$(".wrap").width($(".wrap select").width());
$(".wrap input").width($(".wrap select").width() - 20);
$(".wrap select").on("change", function () {
var txt = $(this).find(':checked').text();
$(".wrap input").val(txt);
});
});
最后是一些 javascript 来为我们的元素设置正确的宽度,并在每次我们从选择中选择一个新值时更新输入文本。
(*) : 伪元素在 IE7 或 . 一种解决方法是为.wrap
元素使用背景图像