私は同じ問題を抱えていましたが、私はまだきれいなソリューションを見つけていません。
しかし、私は回避策を発見しました。下記のソリューションはベストプラクティスを完全に無視しています(私の謙虚な意見では)、誰かがこれを行うための標準に準拠したより良い方法を持っているなら、ここに投稿してください。研究のかなりの量の後ボタンクリックイベント
を修正
、多くの人々は、彼らが絶対にそのボタンの上にすぐに<input type="file" />
を配置し、ゼロに不透明度を設定することにより、トリックを使用しているようです。つまり、ユーザーはボタンをクリックしているように見えますが、ブラウザは<input type="file" />
をクリックしたと見なします(したがって、IEの問題を回避します)。私は、Quirksmodeが実際にこのアプローチを推奨していることに驚いていました。
固定ボタンスタイル
さて、これはさらに化粧品の問題を紹介しません。あなたのボタンは<input type="file" />
をボタンの中に入れない限り、:hover
と:active
のCSS疑似クラスを起動しなくなり、<input type="file" />
に適用したCSSにもかかわらずマウスカーソルがデフォルトのマウスカーソルになる可能性がありますまたはボタンをクリックします。
クラスはJavaScriptの回避策(私はあなたに任せます)で簡単に修正できますが、カーソルは依然として問題です。不思議なことに、path
の<input type="file" \>
の右側のcursor
をスタイルすることができますが、これはBrowse
ボタンには影響しません。残念ながら、この(透明になっている)ボタンは、あなたのスタイリングされたボタンの一部の上にあり、ホバー上にデフォルトのカーソルが表示されます。
これを解決するために、this work-around(JSFiddle here)を見つけました。基本的に、誰かがイベントをボタンのイベントmousemove
にバインドし、ボタンの上にマウスカーソルを置くたびに、<input type="file" />
の右側を配置しました。ボタンが固定サイズでなく、overflow: hidden
が設定されている場合、<input type="file" />
がボタンの座標の外側からクリックされないようにするには、これをさらに強化する必要があります。
結論
全体的に、私は<input type="file" />
をスタイリングするだけでそれだけの価値はないことを発見しました。ハッキングがあまりにも多くあります。JavaScriptを無効にしている人をサポートしようとしている場合は、本当にうまく見えるようにするには、ある時点でJavaScriptを使用する必要があります。私はまた、これがどのようにモバイルにも影響を与えないかどうかわかりません。
あなたがHtml5 File APIをサポートする新しいブラウザをターゲットにしている場合は、AJAXドラッグ/(hereが素晴らしいものである)、アップロードソリューションをドロップ実装し、完全<input type="file" />
を取り除きます。サポートしていないブラウザ(旧式のブラウザやJavaScriptを無効にしているブラウザ)の場合は、フチなしでの文字列をそのまま残してください。
出典
2013-04-22 15:46:36
vee
jQueryを使用できますか? –
@ThanhTrungどのように役立ちますか?それはできません。 – Esailija
@エーザイジャーそれは単なる質問です。ネイティブのjavascriptを使用すると、ブラウザ間の互換性を提供することは難しいです。それはIEで必要かもしれませんが、FFやChromeではありません。ですから、jQuery/Mootools/Prototypeソリューションが必要かどうかを尋ねます... jQueryには '.click()'メソッドがあります。 –