多くの人々のように、私はいinput type=file
をカスタマイズしたいと思います。そして、いくつかのハックやjavascript
なしではできないことを知っています。でも、私の場合、アップロードファイルボタンは画像をアップロードするためだけのものである(jpeg | jpg | png | gif)ので、入力タイプファイルとして正確に機能する「clickable
」画像を使用できる場合(ダイアログボックスを表示し、送信されたページに同じ$ _FILE)。
いくつかの回避策を見つけました ここ 、および この興味深いもの (ただし、Chrome = /では動作しません)。
ファイルボタンにスタイルを追加する場合はどうしますか?あなたはそれについて何か意見がある場合は、単に答えボタンを押してください;)
これは私にとって本当にうまくいきます:
.image-upload>input {
display: none;
}
<div class="image-upload">
<label for="file-input">
<img src="placeholder.jpg"/>
</label>
<input id="file-input" type="file" />
</div>
基本的に、ラベルのfor属性は、ラベルのクリックが指定された入力をクリックと同じになるようにします。
また、表示プロパティをnoneに設定すると、ファイル入力がまったくレンダリングされず、非表示になります。
Chromeでテストされていますが、Webによれば、すべての主要なブラウザーで動作するはずです。 :)
EDIT:ここにJSFiddleを追加しました: https://jsfiddle.net/c5s42vdz/
実際には、純粋なCSSで行うことができ、非常に簡単です...
HTMLコード
<label class="filebutton">
Browse For File!
<span><input type="file" id="myfile" name="myfile"></span>
</label>
CSSスタイル
label.filebutton {
width:120px;
height:40px;
overflow:hidden;
position:relative;
background-color:#ccc;
}
label span input {
z-index: 999;
line-height: 0;
font-size: 50px;
position: absolute;
top: -2px;
left: -700px;
opacity: 0;
filter: alpha(opacity = 0);
-ms-filter: "alpha(opacity=0)";
cursor: pointer;
_cursor: hand;
margin: 0;
padding:0;
}
アイデアは、ラベル内に絶対に入力を配置することです。入力のフォントサイズを大きな値に設定すると、「参照」ボタンのサイズが大きくなります。次に、負の左/上プロパティを使用して、ラベルの後ろに入力参照ボタンを配置する試行錯誤を行います。
ボタンを配置するときは、アルファを1に設定します。終了したら0に設定し直します(これで、何をしているかがわかります!)
ブラウザーはすべて入力ボタンをわずかに異なるサイズでレンダリングするため、ブラウザー間で必ずテストしてください。
ここに例を見ることができます([トラックを追加]ボタン): http://rakmastering.com/upload/
@hardsettingによる優れたソリューションですが、WindowsでSafari(5.1.7)で動作するようにいくつかの改善を行いました
.image-upload > input {
visibility:hidden;
width:0;
height:0
}
<div class="image-upload">
<label for="file-input">
<img src="https://placehold.it/100/000000/ffffff?text=UPLOAD" style="pointer-events: none"/>
</label>
<input id="file-input" type="file" />
</div>
サファリの問題にvisibility: hidden, width:0
の代わりにdisplay: none
を使用し、img
タグにpointer-events: none
を追加して、入力ファイルタイプタグがFORMタグにある場合に機能するようにしました。
すべての主要なブラウザで動作しているようです。
それが誰かを助けることを願っています。
私はあなたのポイントを得た場合、これは私の方法です
<label for="FileInput">
<img src="tools/img/upload2.png" style="cursor:pointer" onmouseover="this.src='tools/img/upload.png'" onmouseout="this.src='tools/img/upload2.png'" alt="Injaz Msila" style="float:right;margin:7px" />
</label>
<form action="upload.php">
<input type="file" id="FileInput" style="cursor: pointer; display: none"/>
<input type="submit" id="Up" style="display: none;" />
</form>
<script type="text/javascript">
$( "#FileInput" ).change(function() {
$( "#Up" ).click();
});
</script>
これは本当に簡単です:
$("#image id").click(function(){
$("#input id").click();
});
代わりに画像を配置して、次のように実行できます。
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');
});
警告:IE9およびIE10では、javascriptを介してファイル入力でonclickをトリガーすると、フォームに「危険」のフラグが付けられ、javascriptを使用してサブミットできません。
form input[type="file"] {
display: none;
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Simple File Upload</title>
<meta name="" content="">
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<label for="fileToUpload">
<img src="http://s3.postimg.org/mjzvuzi5b/uploader_image.png" />
</label>
<input type="File" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
SNIPPETを実行するか、上記のコードをコピーして実行します。必要なものが得られます。JavaScriptを使用しなくても非常にシンプルで効果的です。お楽しみください!!!
入力自体はCSS visibility:hiddenで非表示になっています。
その後、どの要素でもアンカーまたは画像を使用できます。アンカー/画像をクリックすると、非表示の入力フィールドをクリックします-ファイルを選択するためのダイアログボックスが表示されます。
編集:実際にはChromeとSafariで動作しますが、FF4Betaではそうではないことに気付きました
作業コード:
入力部分を非表示にしてこのようにします。
<div class="ImageUpload">
<label for="FileInput">
<img src="../../img/Upload_Panel.png" style="width: 18px; margin-top: -316px; margin-left: 900px;"/>
</label>
<input id="FileInput" type="file" onchange="readURL(this,'Picture')" style="cursor: pointer; display: none"/>
</div>