簡単な質問...ファイル入力タイプのカーソルタイプを変更するにはどうすればよいですか?
私は次を試しました:
<!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>
何らかの理由で、ボールをプレーしません。
ブラウザによって動作が異なります。ファイル入力タイプが非常に特殊だからだと思います。
どのブラウザ/バージョンを使用していますか?
IE6は、スタイルでタイプを指定することをサポートしていないことを知っています。
完全に動作します。
問題は修正されたため、完全に機能するようになりました。この問題については bug report をご覧ください。
バージョン3.5では、まったく機能しませんでした。
ボタンの上に矢印を使用しますが、残りの上に定義されたカーソルを使用します。
完全に動作します。
この問題を回避するさまざまな手法を使用したいくつかの回避策があることに注意してください。 BjarkeCKによる回答 は、私が気に入っているエレガントなソリューションの1つであり、すべての主要なブラウザーで機能します。
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で完全に動作します。
これは古いスレッドです。しかし、Googleの結果はこれをもたらします...私はちょうどchrome(フラッシュ、javascript、オーバーフローが隠された余分なDOM操作ではない)の部分的な解決策を見つけました)
。
input[type=file], /* FF, IE7+, chrome (except button) */
input[type=file]::-webkit-file-upload-button { /* chromes and blink button */
cursor: pointer;
}
問題は、ボタンのカーソルプロパティが一般的に継承されないことです。 (?) が、input [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;
}
それはうまくいくようです:-)
Ifカーソルを画像上に置くために強制的に手にしたい場合、ここに
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');
});
次に、任意のボタンを押してファイルをアップロードすると、ポインターカーソルがあります。
In Chrome and Operaカーソルはパディングのポインタになり、display:block;
、そのため、これらのブラウザではこれを行う必要があります。
<input type="file" id="file1" name="file1" style="display:block; padding:29px 0 0 0;" />
以下を作成しました。
<li>file<input id="file_inp" type="file" /></li>
liの場合:
li { /*...*/ position:relative; overflow:hidden; /*...*/ }
入力用:
input#file_inp {
/*...*/
position: absolute;
width: 400px;
left: -200px;
top:0;
cursor: pointer;
/*...*/
}
前述のように、カーソルはボタンを除く入力全体で「ポインター」になります。ほとんどのブラウザでは、ボタンは左側または右側にあります。 OK!入力に大きな幅を与え、中央のみを表示します...ボタンは非表示になります。そして、クリック可能なのは入力全体です。
それは私のために働く。
Ajaxアップローダーを実行しようとしている場合は、FireFoxやChromeなどの互換性のあるブラウザーで別の手法を試してみてください。完全に不可視のファイル入力でクリックイベントをトリガーできます。ファイル入力を非表示にするには、表示プロパティをnoneに設定する以外の方法を使用します。設定{高さ:0;オーバーフロー:親フォームのhidden}がトリックを行います。アップローダーごとに個別のフォームを使用します。
カスタムボタンクリックイベントを非表示のファイル入力にリダイレクトすれば完了です。
この手法を使用するには、GeckoまたはWebKitエンジンのnavigator.userAgentチェックを実行する必要があります。他のエンジンでは、古い透過ファイル入力メソッドを使用する必要があります。
私はそれを作る別のアプローチがあることがわかりました。 Opera New、FF、Chrome and Safari。残念ながら、IE(私の場合は十分です)。
input=file
要素を固定サイズのdivと非表示のオーバーフローでラップし、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/
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/
まず、コードはInternet Explorerで動作しますが、Firefoxでは動作しません。
第二に、W3C Css標準では、<input />
のような複雑なタグのスタイリングが許可されていません。カーソルプロパティでも。
最後に、 このページ を参照してください。私は彼の解決策を試していないので、それが機能するかどうか、どのように機能するかを教えてください。
使用してみてください:
input[type=file] {
cursor: pointer; cursor: hand;
}
それが機能するかどうかを確認します。 FF/Chrome /などで動作させるために、ポインターと手を私のものに入れなければなりませんでした。また、それが重要かどうかはわかりませんが、CSSの「ファイル」の周りに引用符があるとは思いません。
<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 {cursor:pointer;}
ここで実際に動作を確認できます: http://blueimp.github.com/jQuery-File-Upload/
それを行うjqueryではありません。 http://blueimp.github.com/cdn/css/bootstrap-responsive.min.css ファイルです。必要なものを取得しただけで、jqueryを使用しなくてもうまく機能します。
私がやった方法:
/* 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->私は目に見えるリンクのクリックを中継し(すべてのスタイルとベルとホイッスル)、実際にファイル入力をクリックします。 :)
これが誰かを助けることを願っています。
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>