問題描述
簡單的問題… 如何在文件輸入類型上更改光標類型?
我嘗試過以下操作:
<!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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。