出于某种原因,如果您为文本框提供背景图像,大多数现代浏览器将停止将其默认输入边框样式应用于文本框。相反,你会得到那种丑陋的插图风格。据我所知,也没有 CSS 方法可以应用默认浏览器样式。
IE 8 没有这个问题。Chrome 2 和 Firefox 3.5 可以,我假设其他浏览器也是如此。从我在网上阅读的内容来看,IE 7 也有同样的问题,但那篇文章没有解决方案。
这是一个例子:
<html>
<head>
<style>
.pictureInput {
background-image: url(http://storage.conduit.com/images/searchengines/search_icon.gif);
background-position: 0 1px;
background-repeat: no-repeat;
}
</style>
<body>
<input type="text" class="pictureInput" />
<br />
<br />
<input type="text">
</body>
</html>
在 Chrome 2 中,它看起来像这样:http ://www.screencast.com/users/jadeonly/folders/Snagit/media/d4ee9819-c92a-4bc2-b84e-e3a4ed6843b6
在 Firefox 3.5 中:http ://www.screencast.com/users/jadeonly/folders/Snagit/media/d70dd690-9273-45fb-9893-14b38202ddcc
更新:JS 解决方案:我仍然希望找到一个纯 CSS-on-the-input 解决方案,但这是我现在要使用的解决方法。请注意,这是从我的应用程序中直接粘贴的,因此不是像上面那样好的独立示例。我刚刚从我的大型网络应用程序中包含了相关部分。你应该能够得到这个想法。HTML 是带有“链接”类的输入。大的垂直背景位置是因为它是一个精灵。在 IE6、IE7、IE8、FF2、FF3.5、Opera 9.6、Opera 10、Chrome 2、Safari 4 中测试。我仍然需要在某些浏览器中调整几个像素的背景位置:
JS:
$$('input.link').each(function(el) {
new Element('span',{'class':'linkIcon'}).setText(' ').injectBefore(el);
if (window.gecko) el.setStyle('padding', '2px 2px 2px 19px');
});
CSS:
input.link { padding-left: 19px; }
span.linkIcon { z-index: 2; width: 19px; height: 19px; position: absolute; background-image: url(img/fields.gif); background-position: 1px -179px; background-repeat: no-repeat; }
更新:CSS 足够接近 解决方案:根据 kRON 的建议,这里的 CSS 可以使输入与 Vista 中的 FF 和 IE 匹配,如果您决定放弃纯默认设置并强制使用一种样式,这是一个不错的选择。我稍微修改了他并添加了“蓝色”效果:
CSS:
input[type=text], select, textarea {
border-top: 1px #acaeb4 solid;
border-left: 1px #dde1e7 solid;
border-right: 1px #dde1e7 solid;
border-bottom: 1px #e3e9ef solid;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
padding: 2px;
}
input[type=text]:hover, select:hover, textarea:hover, input[type=text]:focus, select:focus, textarea:focus {
border-top: 1px #5794bf solid;
border-left: 1px #c5daed solid;
border-right: 1px #b7d5ea solid;
border-bottom: 1px #c7e2f1 solid;
}
select { border: 1px; }