简单问题...如何更改文件输入类型的光标类型?
我尝试了以下内容:
<!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>
出于某种原因,它不会打球。
答案 0 :(得分:40)
它在不同浏览器中的工作方式不同。我想这是因为文件输入类型非常特殊。
您使用的浏览器/版本是什么?
我知道IE6不支持在样式中指定类型。
完美无缺。
问题是固定的,所以现在它完美无缺。有关此问题,请参阅bug report 在3.5版本中它根本不起作用。
在按钮上方使用箭头,但在其余部分上使用定义的光标。
完美无缺。
请注意,有几种解决方法会使用不同的技术来解决此问题。 answer by BjarkeCK是我喜欢的一个优雅的解决方案,它适用于所有主流浏览器。
答案 1 :(得分:31)
cursor:pointer
对输入文件无效。这里没有特别的理由。您需要通过此代码删除其外观,请注意font-size:0
。
input[type='file']{
opacity: 0;
cursor: pointer;
width: 24px;
height: 24px;
font-size: 0;
position: absolute;
}
&#13;
<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=" />
&#13;
它在Chrome,Firefox和IE上运行良好。
答案 2 :(得分:29)
知道这是一个旧线程。但谷歌的结果带来了这个...我刚刚找到了一个部分解决方案的铬(不是invalving flash,javascript,溢出隐藏的额外DOM操作)
input[type=file], /* FF, IE7+, chrome (except button) */
input[type=file]::-webkit-file-upload-button { /* chromes and blink button */
cursor: pointer;
}
问题是按钮不会继承一般(?)中的游标属性,而是输入[type = file]字段的其余部分。 这就是为什么chrome除了按钮
之外还有指针答案 3 :(得分:16)
我今天遇到了这个问题并且:
/* 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;
}
似乎没问题: - )
答案 4 :(得分:10)
如果强> 你想强制光标移动,以便将它放在图像上,这是一个
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;" />
答案 5 :(得分:6)
我做了以下事情:
<li>file<input id="file_inp" type="file" /></li>
for li:
li { /*...*/ position:relative; overflow:hidden; /*...*/ }
输入:
input#file_inp {
/*...*/
position: absolute;
width: 400px;
left: -200px;
top:0;
cursor: pointer;
/*...*/
}
如前所述,光标变为&#34;指针&#34;在整个输入上,不包括按钮。在大多数浏览器中,按钮位于左侧或右侧。好!让我们给输入一个巨大的宽度,只显示中间...按钮将被隐藏。可点击是整个输入。
这适合我。
答案 6 :(得分:2)
如果您正在尝试使用Ajax上传器,您可以尝试使用兼容浏览器的其他技术,例如FireFox和Chrome。它们支持在完全不可见的文件输入上触发单击事件。除了将其display属性设置为none之外,您可以以任何方式隐藏文件输入。设置{height:0;父表单上的overflow:hidden}可以解决问题。我为每个上传者使用单独的表单。
将自定义按钮点击事件重定向到隐藏文件输入,您就完成了。
要使用此技术,您必须对Gecko或WebKit引擎执行navigator.userAgent检查。对于其他引擎,您必须使用旧的透明文件输入法。
答案 7 :(得分:1)
首先,您的代码适用于Internet Explorer,但不适用于Firefox。
其次,W3C Css标准不允许像<input />
这样的复杂标签样式。即使是游标属性。
Endly,见this page。我没有尝试他的解决方案,所以告诉我们它是否有效以及如何。
答案 8 :(得分:1)
Chrome也给了我这个问题。我尝试设置各种CSS选择器,但似乎没有什么效果好。但是,我确实通过使用FORM元素找到了解决方案。
<style> #file { height:0px; opacity:0; } #span { left:0px; position:absolute; cursor: pointer; } </style> <form name="form"> <input type="file" id="file" name="file"/> <span id="span">My File label!!!!</span> </form> <script> var span = document.getElementById("span"); span.onclick = function(event) { document.form.file.click(event); }; </script>
我在Chrome和FF中对此进行了测试,但并非如此,但我希望这会有所帮助。 jsfiddle http://jsfiddle.net/aressler38/L5r8L/1/
答案 9 :(得分:1)
我发现还有另一种方法可以实现。在Opera New,FF,Chrome和Safari中完美运行。不幸的是,它在IE中并不完美(但对我的情况来说还不错)。
我们的想法是用固定大小的div和隐藏的溢出来包装input=file
元素并设置cursor: pointer;
。比我们使用左边填充移动div外部的按钮。
<div class="input-file-wrap">
<input class="file-input" type="file" />
</div>
和样本样式
.input-file-wrap {
background: red;
height: 33px;
width: 240px;
overflow: hidden;
position: relative;
cursor: pointer;
}
.file-input {
width: 100%;
height: 100%;
opacity: 0;
padding-left: 240px;
margin-right: -240px;
cursor: pointer;
}
您可以在此处找到实时示例:http://jsfiddle.net/5c5RH/2/
答案 10 :(得分:0)
尝试使用:
input[type=file] {
cursor: pointer; cursor: hand;
}
看看是否有效。我必须把指针+手放在我的手中才能使它在FF / Chrome /等中运行。另外,我不确定它是否重要,但我认为css中的'file'周围没有引号。
答案 11 :(得分:0)
<span class="btn btn-success fileinput-button">
<span><i class="icon-plus icon-white"></i> Select Image</span>
<input type="file" name="files[]">
</span>
css:
.btn {光标:指针;}
您可以在此处看到它:http://blueimp.github.com/jQuery-File-Upload/
这不是jquery这样做的。这是http://blueimp.github.com/cdn/css/bootstrap-responsive.min.css文件。我刚刚抓住了我需要的东西,没有任何jquery,它的效果很好。
答案 12 :(得分:0)
基于https://stackoverflow.com/a/3030174/2325676 - 使用不透明度0隐藏输入。
让光标在整个区域上工作的关键是将font-size
设置为大于按钮高度的值,以便将文件输入按钮推到可见区域下方,鼠标悬停为在文件输入的文本部分:
<div style="display: block; width: 100px; height: 50px; overflow: hidden">
<button style="width: 110px; height: 50px; position: relative; top: -5px; left: -5px;" ><a href="javascript: void(0)">Upload File</a></button>
<input type="file" id="upload_input" name="upload" style="height:50px; width: 120px; opacity: 0; filter:alpha(opacity: 0); font-size: 70px; position: relative; top: -50px; left: -20px; cursor:pointer" />
</div>
答案 13 :(得分:0)
我是怎么做到的:
/* Upoload */
#upload-profile-file {
z-index: 1;
}
.uploadButton input[type="file"] {
cursor:pointer;
position:absolute;
top:0px;
opacity:0;
}
#upload-profile-file:hover ~ #upload-profile-pic-btn
{
text-decoration:underline;
}
#upload-profile-pic-btn {
z-index:-1;
}
然后在我的观看页面上:
<form id="upload-profile-pic-form">
<div class="uploadButton">
<input type="file" id="upload-profile-file" name="upload" style="width: 88px; opacity:0.0; filter:alpha(opacity=0); " onchange='upload()'/>
<a id="upload-profile-pic-btn" href="#" class="expand">Upload</a>
</div>
</form>
然后我只需通过AJAX将表单提交到服务器并处理其余部分。
所以tl; dr - &gt;我转发可见链接的点击(包括所有样式和铃声和口哨),我实际上点击了文件输入。 :)
希望这有助于某人。