问题描述
简单的问题… 如何在文件输入类型上更改光标类型?
我尝试过以下操作:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<style>
input[type="file"] {
cursor: pointer;
}
</style>
</head>
<body>
<input type="file">
</body>
</html>
由于某种原因,它不会打球。
最佳解决方案
我在这里用 jquery 做了一个解决方案:http://jsfiddle.net/gKVKm/36/
看看 here 看看发生了什么:
它适用于 Opera,Safari,IE,Chrome 和 Firefox 。
次佳解决方案
它在不同的浏览器中的工作方式不同。我猜这是因为文件输入类型是非常特别的。
你使用什么浏览器/版本?
我知道 IE6 不支持在样式中指定类型。
它在不同浏览器中的工作原理
IE7 +
工作完美
FireFox
问题是固定的,所以现在它的工作完美。有关此问题,请参阅 bug report 。在版本 3.5 中,它根本没有工作。
Chrome 和 Safari(相同的行为)
使用箭头按钮,但您定义的光标在其余部分。
Opera
工作完美
请注意,有几种解决方法使用不同的技术来解决这个问题。 answer by BjarkeCK 是我喜欢的一个优雅的解决方案,它适用于所有主流浏览器。
第三种解决方案
cursor:pointer
在输入文件上不起作用,因为默认按钮。这里没有特别的原因您需要通过此代码删除其外观,请注意 font-size:0
。
input[type='file']{
opacity: 0;
cursor: pointer;
width: 24px;
height: 24px;
font-size: 0;
position: absolute;
}
<input type="file">
<img width="24" height="24" title="" alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADs0lEQVR42rWVa2iOYRjH9+zd+dw2oWaGwkjzRY5flDC1nBaxsTnVYkaWc8oHoZalETWHsVGkZo0yIyEmGzkWpZhDbBhmxE7v63fp/0j7YGq89e/+XfdzuJ7/dV/3/Tp+//nndHdD2o4RIQHBnilgIPL3+XytjuO0MkZ4O3zllevve3uUYMaulDxeePL0mruNXeaTmJ/IfMlfJZhekBLv+PuNBEPRq8427wN/jxPmeJxM4seoAH0yF+g9WonmVOTfK+o2weTNyZ6w2KC9fNFuQtz7AuF0+DV8Ft4GZ6OvxPXE7xlLGZ8wF4CLK39MMLNwZDoPJPPAHcJwOAiOhp/Ct+Ba3d9J/I3YEjUzTmNuNuwHd8DtcAg8FK4ica2jeuYyFKM4cyB1aGEz0BoUYw6QLWoEakLLUY25UOl+foSubaB8O1wHmWS+R+YadUojbEmi4WjYo4Rv5SCWMdic2LzYEjfBAXAynImDI78nqOXCWcIk2KsHgmB/+ARs6/BE8UDGuYw5KmkbfA5O1QckwfNJUOqWaCnDdVRuL5WsXO1oobrIXpYgJ9W6N9VKgdZRjmreUwqPReYgg7mjroMlZL5K5v2E8XA/2JKshc9okfui78QNxLaYdxgteQkcCVfCW+HX8LiuDqwFr6Ey1B/1Rm/QMJSP8lCkus4cNNheQbt032G5s4+qR8PRIhwccB1kk/kmmSsIB8GdcDVfkEbyU/B45ntZt3Ctg9icfGQ8zdwW+AY8WG36UA7m8XyZm2CxbrqkElmC2/AE+DKcCMeaC/W8nUUtWthVcJ0WtlXNMhmeS4LjXbvoolmF22ErwSh4BTzTuguFaRPadm9iXG0NAFfA1hQvtEaT4CwSHHLXYBHDLWQJ4lXnp2ifuuUYStRC2zPB6LwdYagQzdImeydNtaOFNTjoOsiSTXuot3q9BW6Bc+E62Hb7EOJQ4irGYsY5zO2E4+FmrYE5GA0vsJPWTbBMtbZWG6AyeJXgkxbTDsKXWoPBKp3tn2DY0c5vhp/BY7TIv9p0idrUNlAfnS3uUW6J3uqsaZM8OnPsQAyRfLr3g1rd2rTYdZAjB0WyGadzphHuBQfqhd+I39jX6p5OObCjIspaWQ7NQQ4OitwEm7hQRMYvfv/gx/vM2UIS7HFLtFG7tUUd1C67Udqdn63HVYpoufmuebtuR/kXlS9cu3w7H3zBTWB/laOxlqDNlABbu37VUWw9bn+lIdrBnxljbMPpno/6w7Hj/B383E4GEjzq9k+/p78fan0xNyGwEGgAAAAASUVORK5CYII=" />
它可以在 Chrome,Firefox 和 IE 上工作。
第四种方案
如果你想强制光标为了把它放在一个图像上,这里是一个
简单的方式,它在所有浏览器中如何工作:
HTML:
<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1" name="file1" style="display:none" />
JQuery 的:
$("#upfile1").click(function () {
$("#file1").trigger('click');
});
然后您可以按任意按钮上传文件,并且您有一个指针光标。
在 Chrome 和 Opera 中,光标只能填充填充的指针,如果是 display:block;
,那么为什么这些浏览器应该这样做:
<input type="file" id="file1" name="file1" style="display:block; padding:29px 0 0 0;" />
第五种方案
知道这是一个旧线程。但是谷歌的结果带来了这个… 我刚刚发现了一个部分的解决方案的 chrome(不是无效的 Flash,javascript,额外的 DOM 操作与溢出隐藏)
-
firefox 已经修复了这个 bug
-
safari(此时为 7), chrome 不具有相同的行为
-
safari(7,mac)dosen’t 为我工作
-
chrome(也可能是 Opera 当它的 webkit) 可以使用:: webkit-file-upload 按钮 pseudo-class
。
input[type=file], /* FF, IE7+, chrome (except button) */
input[type=file]::-webkit-file-upload-button { /* chromes and blink button */
cursor: pointer;
}
问题是按钮’s doesn’t 继承了一般 (?)的游标属性,但其余的输入 [type = file] 字段的剂量。这就是为什么 chrome 得到指针,除了按钮
第六种方案
我今天遇见了这个问题:
/* Chrome/Safari and web-kit-based browsers
(if it doesn't work, try maybe also on the parent/wrapper)
*/
::-webkit-file-upload-button {
cursor:pointer;
}
/* IE11 (if it doesn't work, try maybe also on the parent/wrapper) */
input[type=file] {
cursor:pointer;
}
似乎做得很好:-)
第七种方案
我做了以下:
<li>file<input id="file_inp" type="file" /></li>
对于李:
li { /*...*/ position:relative; overflow:hidden; /*...*/ }
输入:
input#file_inp {
/*...*/
position: absolute;
width: 400px;
left: -200px;
top:0;
cursor: pointer;
/*...*/
}
如前所述,光标在整个输入上变为”pointer”,不包括按钮。在大多数浏览器中,按钮位于左侧或右侧。好!让输入一个巨大的宽度,只显示中间… 按钮将被隐藏。可点击是整个输入。
这对我行得通。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。