Saya akan menambahkan jawaban saya sendiri untuk melakukannya dengan cara yang saya lakukan ... tapi di sini adalah contoh berdasarkan bootstrap yang mungkin membantu .. geniuscarrier.com/…
Vishnu Narang
Jawaban:
235
Input file gaya sangat sulit, karena sebagian besar browser tidak akan mengubah tampilan dari CSS atau javascript.
Bahkan ukuran input tidak akan menanggapi suka:
<inputtype="file"style="width:200px">
Sebagai gantinya, Anda harus menggunakan atribut ukuran:
<inputtype="file"size="60"/>
Untuk gaya apa pun yang lebih canggih dari itu (mis. Mengubah tampilan tombol jelajah), Anda perlu melihat pendekatan yang rumit dengan cara overlay tombol bergaya dan kotak input di atas input file asli. Artikel yang telah disebutkan oleh rm di www.quirksmode.org/dom/inputfile.html adalah yang terbaik yang pernah saya lihat.
MEMPERBARUI
Meskipun sulit membuat <input>tag secara langsung, ini mudah dilakukan dengan bantuan <label>tag. Lihat jawaban di bawah ini dari @JoshCrozier: https://stackoverflow.com/a/25825731/10128619
@TLK Jawaban Ryan tidak akan berfungsi di IE ketika mencoba melakukan unggahan iframe. Ini memberi Anda kesalahan akses ditolak. Untuk unggahan normal, saya setuju itu yang paling mudah!
frostymarvelous
3
Solusi yang jauh lebih sederhana daripada quirksmode dijelaskan di sini . Taruh saja tautan itu di sini, karena jawaban ini pada dasarnya adalah jawaban hanya tautan.
Joeytje50
10
Bagi siapa pun yang tertarik pada pendekatan modern, saya sarankan melihat jawaban ini . Itu tidak memerlukan JavaScript seperti beberapa jawaban lainnya.
Josh Crozier
3
@JoshCrozier memposting solusi gila yang jauh lebih baik. Bahkan mengalahkan solusi mouseclicking :)
Lodewijk
1018
Anda tidak perlu JavaScript untuk ini! Berikut ini adalah solusi lintas-browser:
Pendekatan terbaik adalah memiliki elemen label kustom dengan foratribut yang melekat pada elemen input file tersembunyi . ( forAtribut label harus cocok dengan elemen file idagar ini berfungsi).
1 - Perlu dicatat bahwa jika Anda menyembunyikan elemen menggunakan display: none, itu tidak akan berfungsi di IE8 dan di bawah. Perhatikan juga fakta bahwa jQuery memvalidasi tidak memvalidasi bidang tersembunyi secara default. Jika salah satu dari hal-hal tersebut menjadi masalah bagi Anda, berikut adalah dua metode berbeda untuk menyembunyikan input ( 1 , 2 ) yang berfungsi dalam keadaan ini.
Saya punya pertanyaan dengan yang satu ini, ketika memilih file bagaimana kita akan pergi kemudian menampilkan nama file?
Richlewis
17
Bagaimana cara menampilkan nama file yang dipilih jika display: nonediatur input[type=file]?
Sarthak Singhal
38
Solusi hebat, tetapi Anda sebenarnya perlu javascript. Jika Anda ingin menampilkan nama file, seperti yang ditanyakan orang lain, Anda perlu menambahkan rentang antara label dan input tersembunyi: <span id = "file-selected"> </span>. Kemudian perbarui rentang pada acara perubahan: $ ('# file-upload') .bind ('ubah', fungsi () {var fileName = ''; fileName = $ (ini) .val (); $ ('# file-dipilih '). html (fileName);})
Sam
9
Anda harus menggunakan position: absolute; left: -99999rembukan display: nonekarena alasan aksesibilitas. Sebagian besar waktu, pembaca layar tidak akan membaca elemen jika mereka disembunyikan menggunakan display: nonemetode ini.
Kapsul
10
Saya sangat terkejut menemukan tidak ada yang tampaknya telah mempertimbangkan aksesibilitas keyboard. labelelemen tidak dapat diakses keyboard, tidak seperti buttons dan inputs. Menambahkan tabindexbukan solusi karena labelmasih tidak akan ditindaklanjuti saat fokus dan pengguna menekan masuk. Saya memecahkan ini dengan menyembunyikan input secara visual , sehingga masih dapat difokuskan, dan kemudian menggunakan :focus-withinpada labelinduk: jsbin.com/fokexoc/2/edit?html,css .output
Oliver Joseph Ash
195
ikuti langkah-langkah ini maka Anda dapat membuat gaya khusus untuk formulir unggah file Anda:
ini adalah bentuk HTML sederhana (baca komentar HTML yang saya tulis di sini di bawah ini)
<formaction="#type your action here"method="POST"enctype="multipart/form-data"><divid="yourBtn"style="height:50px;width:100px;border:1px dashed #BBB;cursor:pointer;"onclick="getFile()">Click to upload!</div><!-- this is your file input tag, so i hide it!--><divstyle='height:0px;width:0px;overflow:hidden;'><inputid="upfile"type="file"value="upload"/></div><!-- here you can have file submit button or you can write a simple script to upload the file automatically--><inputtype="submit"value='submit'></form>
kemudian gunakan skrip sederhana ini untuk meneruskan acara klik ke file tag input.
function getFile(){
document.getElementById("upfile").click();}
Sekarang Anda dapat menggunakan semua jenis gaya tanpa khawatir tentang cara mengubah gaya default.
Saya tahu ini dengan sangat baik karena saya telah mencoba mengubah gaya default selama satu setengah bulan. percayalah, ini sangat sulit karena browser yang berbeda memiliki tag input unggah yang berbeda. Jadi gunakan yang ini untuk membuat formulir unggah file kustom Anda. Berikut adalah kode lengkap UPLOAD OTOMATIS.
<formaction="#type your action here"method="POST"enctype="multipart/form-data"name="myForm"><divid="yourBtn"onclick="getFile()">click to upload a file</div><!-- this is your file input tag, so i hide it!--><!-- i used the onchange event to fire the form submission--><divstyle='height:0px;width:0px;overflow:hidden;'><inputid="upfile"type="file"value="upload"onchange="sub(this)"/></div><!-- here you can have file submit button or you can write a simple script to upload the file automatically--><!-- <input type="submit" value='submit' > --></form>
@ user1053263 -> Terima kasih atas rekomendasinya .. di sini saya menggunakan skrip java yang sangat sederhana, tidak perlu menggunakan kerangka kerja seperti Jquery atau PrototypeJS.
teshguru
7
Saya mengalami masalah mengirimkan formulir di IE9. Saya mendapatkan kesalahan 'Akses Ditolak' yang mencoba mengirimkan formulir melalui javascript. Jika saya mengklik tombol kirim melalui UI, itu berfungsi. Apakah ada solusi untuk ini?
Kevin
1
@kevin -> Silakan coba event.preventDefault () setelah document.myForm.submit (), saya membuat perubahan pada kode di atas.
teshguru
1
Bekerja dengan baik di Chrome, Firefox, Safari & Opera - tetapi tidak di IE9. Di IE9 saya mendapatkan kesalahan 'Access is Denied' yang sama dengan @Kevin - dan terkadang hanya gagal diam tanpa kesalahan.
daveywc
10
Di IE10 (dan mungkin IE9, dll.) Anda akan mendapatkan "Akses ditolak" (atau tidak ada respons dari jQuery) jika Anda mencoba dan secara otomatis mengirimkan formulir setelah mengklik tombol input file melalui javascript. Jadi metode ini berfungsi untuk menata tombol input file selama pengguna masih yang mengirimkan formulir. Butuh waktu beberapa saat untuk menemukan ini dan saya melihat orang lain juga memiliki masalah yang sama. Lihat ini untuk info lebih lanjut stackoverflow.com/a/4335390/21579 .
Jeff Widmer
76
Sembunyikan dengan css dan gunakan tombol kustom dengan $ (selector) .click () untuk mengaktifkan tombol browse. kemudian atur interval untuk memeriksa nilai tipe input file. Interval dapat menampilkan nilai untuk pengguna sehingga pengguna dapat melihat apa yang diunggah. Interval akan dihapus ketika formulir dikirimkan [EDIT] Maaf saya sudah sangat sibuk artinya memperbarui posting ini, berikut adalah contohnya
<formaction="uploadScript.php"method="post"enctype="multipart/form-data"><div><!-- filename to display to the user --><pid="file-name"class="margin-10 bold-10"></p><!-- Hide this from the users view with css display:none; --><inputclass="display-none"id="file-type"type="file"size="4"name="file"/><!-- Style this button with type image or css whatever you wish --><inputid="browse-click"type="button"class="button"value="Browse for files"/><!-- submit button --><inputtype="submit"class="button"value="Change"/></div>
$(window).load(function(){var intervalFunc =function(){
$('#file-name').html($('#file-type').val());};
$('#browse-click').on('click',function(){// use .live() for older versions of jQuery
$('#file-type').click();
setInterval(intervalFunc,1);returnfalse;});});
Perhatikan bahwa jika Anda menggunakan cara ini, ia akan menembus penjelajah internet karena ini merupakan pengecualian keamanan ..
Rejinderi
1
terima kasih tipnya. Ketika saya menggunakan IE biasanya memiliki tata letak terpisah untuk yang lainnya. BENCI IE. tetapi saya menyederhanakan semuanya di IE.
Ryan
1
Dengan FF20, $ ('# file-type'). Klik () tampaknya tidak membuka dialg "Choose file" - pada kenyataannya tidak ada yang terjadi. Ada ide?
andig
2
Coba gunakan metode pemicu di jquery. Juga. Tinggal diubah menjadi .on () di jquery baru
Ryan
1
setelah Anda mengatur interval itu pada titik apa saya dapat menghapusnya? selain itu akan terus menembak
Hanya ingin tahu, apakah itu berfungsi di setiap browser generasi baru seperti Firefox, IE, Opera, Safari, Chrome, dll?
Wh1T3h4Ck5
Ini solusi paling sederhana untuk saya! Paling tidak di IE 9, Chrome 23 dan FF 16 dengan jQuery 1.7.2, jadi dengan versi yang diperbarui itu akan berfungsi.
Dani bISHOP
Adakah yang tahu cara mengubah .new_Btn jika pengguna telah memilih gambar. Sekarang hanya menunjukkan kelas yang sama. Adakah yang tahu cara melacaknya? Terima kasih
Ando
2
@MehdiKaramosly berfungsi bahkan pada IE 6 - tetapi itu benar hanya hingga jQuery 1.x , jQuery 2.x + tidak mendukung IEs lama
jave.web
1
@Ando via Javascript / jQuery => nilai input file kosong atau berisi path file lokal => gunakan event pertukaran dan uji val () :) lihat jsfiddle.net/ZrBPF
jave.web
55
Semua mesin rendering secara otomatis menghasilkan tombol ketika suatu <input type="file">dibuat. Secara historis, tombol itu benar-benar tidak bergaya. Namun, Trident dan WebKit telah menambahkan kait melalui elemen semu.
Trisula
Pada IE10, tombol input file dapat ditata menggunakan ::-ms-browseelemen pseudo. Pada dasarnya, aturan CSS apa pun yang Anda terapkan ke tombol biasa dapat diterapkan ke elemen pseudo. Sebagai contoh:
Ini ditampilkan sebagai berikut di IE10 pada Windows 8:
WebKit
WebKit menyediakan hook untuk tombol input file dengan ::-webkit-file-upload-buttonpseudo-element. Sekali lagi, hampir semua aturan CSS dapat diterapkan, oleh karena itu contoh Trident akan bekerja di sini juga:
Saat menata input file, Anda tidak boleh memutus interaksi asli apa pun yang disediakan input .
The display: nonePendekatan istirahat asli drag dan drop dukungan.
Untuk tidak merusak apa pun, Anda harus menggunakan opacity: 0pendekatan untuk input, dan posisikan menggunakan pola relatif / absolut dalam pembungkus.
Dengan menggunakan teknik ini, Anda dapat dengan mudah mendesain zona klik / jatuhkan untuk pengguna, dan menambahkan kelas khusus dalam javascript pada dragenteracara untuk memperbarui gaya dan memberikan umpan balik kepada pengguna untuk membuatnya melihat bahwa ia dapat menjatuhkan file.
HTML:
<labelfor="test"><div>Click or drop something here</div><inputtype="file"id="test"></label>
terima kasih untuk posting ini, bagaimana cara kerjanya jika atribut multiple = "multiple" ditambahkan, saya menyeret 2 gambar namun melihat jalur hanya untuk yang pertama
PirateApp
Anda memiliki kode yang terlewat di sini. Ada lebih banyak tentang biola. Perpustakaan apa?
ctrl-alt-delor
Hanya ada beberapa javascript pada biola dengan jQuery untuk menunjukkan file yang telah dijatuhkan. Itu saja
kevcha
Setelah menerapkan solusi ini dan mengujinya lebih lanjut, tampaknya tidak berfungsi baik di Edge.
ChrisA
1
Ah ok, saya ketinggalan bungkus dengan posisi relatif dalam jawaban Anda - Saya buruk. Jika input di bawah dimensi layar, browser mencoba menggulir ke sana dan dengan melakukan itu, memindahkan wadah gulir ke atas halaman. Berikut ini adalah demonstrasi: stackblitz.com/edit/input-file-overflow?file=style.css (hanya tidak menunjukkan persis bagaimana posisi absolut adalah penyebab perilaku)
Tom
23
Saya dapat melakukannya dengan CSS murni menggunakan kode di bawah ini. Saya telah menggunakan bootstrap dan font-mengagumkan.
Berikut adalah solusi yang tidak benar-benar menata <input type="file" />elemen tetapi menggunakan <input type="file" />elemen di atas elemen lainnya (yang dapat ditata). The <input type="file" />elemen tidak benar-benar terlihat karenanya, ilusi keseluruhan dari baik gaya control file upload.
Saya menemukan masalah ini baru-baru ini dan meskipun ada banyak jawaban di Stack Overflow, tidak ada yang benar-benar sesuai dengan tagihan. Pada akhirnya, saya akhirnya menyesuaikan ini sehingga memiliki solusi yang sederhana dan elegan.
Saya juga telah menguji ini di Firefox, IE (11, 10 & 9), Chrome dan Opera, iPad dan beberapa perangkat android.
$('input[type=file]').change(function(e){
$in = $(this);
$in.next().html($in.val());});
$('.uploadButton').click(function(){var fileName = $("#fileUpload").val();if(fileName){
alert(fileName +" can be uploaded.");}else{
alert("Please select a file to upload");}});
Pastikan untuk mengatur gaya pada input ketika Anda siap: opacity: 0
Anda tidak dapat mengatur display: nonekarena itu harus dapat diklik. Tetapi Anda dapat menempatkannya di bawah tombol "baru" atau memasukkan di bawah sesuatu yang lain dengan indeks-z jika Anda mau.
Siapkan beberapa jquery untuk mengklik input nyata ketika Anda mengklik gambar.
ini akan gagal dengan FF11 - alasan: karena Anda tidak dapat secara tepat memengaruhi ukuran bidang input (hanya dengan menggunakan ukuran html) dan tombol (Anda dapat mengatur ketinggian menggunakan css), jika bidang input Anda yang terlihat lebih besar daripada FF asli yang diberikan kepada kami, Anda dibiarkan dengan area buta yang sangat besar - sudut pandang pengguna: dalam banyak kasus dia akan mengeluh bahwa unggahan tidak berfungsi, ketika diklik
Jeffz
2
Ide bagus tapi ini tidak akan berfungsi pada IE. $ ('# the_real_file_input'). klik () akan memicu dialog terbuka tetapi file tidak akan dipilih ke dalam formulir dan unggahan akan gagal.
Tomas
11
Letakkan tombol unggah file di atas tombol atau elemen Anda yang bagus dan sembunyikan.
Sangat sederhana dan akan berfungsi di browser apa pun
style="visibility:hidden"terlalu panjang, cukup gunakan hidden. Juga, click()tidak berfungsi untuk browser apa pun dan tidak ada alasan keamanan yang sangat dapat diandalkan seperti sekarang dan pada perangkat apa pun itu adalah cara yang sah dan @Gianluca untuk penggunaan jQuery klasiktrigger()
Thielicious
1
Inilah solusi yang akan saya tambahkan ke ini! Ini berfungsi dan Anda dapat menampilkannya persis seperti yang Anda inginkan. Bekerja dengan Chrome, akan mencoba yang lain.
markthewizard1234
7
satu-satunya cara yang bisa saya pikirkan adalah menemukan tombol dengan javascript setelah itu diberikan dan menetapkan gaya untuk itu
Saya biasanya menggunakan javascript sederhana untuk menyesuaikan tag input file. Bidang input tersembunyi, pada klik tombol, javascript memanggil bidang tersembunyi, solusi sederhana tanpa css atau sekelompok jquery.
Anda tidak dapat menggunakan click()metode untuk memecat acara untuk file jenis input. sebagian besar browser tidak memungkinkan untuk alasan keamanan.
Mahi
6
Di sini kami menggunakan rentang untuk memicu input file jenis dan kami hanya menyesuaikan rentang itu , sehingga kami dapat menambahkan gaya apa pun menggunakan cara ini.
Perhatikan bahwa kami menggunakan tag input dengan visibilitas: opsi tersembunyi dan memicunya dalam rentang.
Ini bekerja sangat baik di sudut 2+. Tidak yakin mengapa pilihannya turun. Jika Anda menggunakan sudut, ini adalah solusi paling sederhana yang tersedia.
AndrewWhalan
4
HANYA CSS
Gunakan ini sangat sederhana dan MUDAH
Html:
<label>Attach your screenshort</label><inputtype="file"multipleclass="choose">
Jangan tertipu oleh solusi "luar biasa" CSS saja yang sebenarnya sangat spesifik browser, atau yang overlay tombol gaya di atas tombol nyata, atau yang memaksa Anda untuk menggunakan <label>bukan<button> , atau hack lainnya . JavaScript diperlukan untuk membuatnya berfungsi untuk penggunaan umum. Silakan pelajari bagaimana gmail dan DropZone melakukannya jika Anda tidak percaya kepada saya.
Cukup gaya tombol normal seperti yang Anda inginkan, lalu panggil fungsi JS sederhana untuk membuat dan menautkan elemen input tersembunyi ke tombol gaya Anda.
Perhatikan bagaimana kode di atas menghubungkan kembali setelah setiap kali pengguna memilih file. Ini penting karena "onchange" hanya dipanggil jika pengguna mengubah nama file. Tetapi Anda mungkin ingin mendapatkan file setiap kali pengguna menyediakannya.
Tepatnya, labelpendekatan ini berfungsi, kecuali itu tidak dapat menunjukkan nama file atau jalur yang dipilih. Jadi tentu saja, itulah satu-satunya masalah yang perlu dipecahkan JS.
Hassan Baig
4
Solusi beberapa file dengan nama file yang dikonversi
Bagaimana hanya menampilkan nama file, dan bukan fakepathpath?
Hassan Baig
3
Minggu ini saya juga perlu menyesuaikan tombol dan menampilkan nama file yang dipilih selain itu, jadi setelah membaca beberapa jawaban di atas (Terima kasih BTW) saya datang dengan implementasi berikut:
Pada dasarnya saya bekerja dengan ng-file-upload lib, Angular-wise Saya mengikat nama file ke $ lingkup saya dan memberikannya nilai awal dari 'Tidak ada file yang dipilih', saya juga mengikat fungsi onFileSelect () untuk lingkup saya jadi ketika file dipilih saya mendapatkan nama file menggunakan API ng-unggah dan tetapkan ke $ scope.filename.
Cukup mensimulasikan klik pada <input>dengan menggunakan trigger()fungsi saat mengklik pada gaya <div>. Saya membuat tombol sendiri dari a <div>dan kemudian memicu klik pada inputsaat mengklik saya <div>. Ini memungkinkan Anda membuat tombol sesuka Anda karena ini adalah <div>dan mensimulasikan klik pada file Anda <input>. Kemudian gunakan display: nonepada Anda <input>.
// div styled as my load file button<div id="simClick">Loadfrom backup</div><input type="file" id="readFile"/>// Click function for input
$("#readFile").click(function(){
readFile();});// Simulate click on the input when clicking div
$("#simClick").click(function(){
$("#readFile").trigger("click");});
Cara terbaik adalah menggunakan elemen pseudo: after atau: before sebagai elemen overt input de. Kemudian gaya elemen pseudo yang Anda inginkan. Saya merekomendasikan Anda untuk melakukan gaya umum untuk semua file input sebagai berikut:
Cara terbaik yang saya temukan adalah memiliki input type: filekemudian mengaturnya display: none. Berikan itu id. Buat tombol atau elemen lain yang ingin Anda buka input file.
Kemudian tambahkan pendengar acara di atasnya (tombol) yang ketika diklik mensimulasikan klik pada input file asli. Seperti mengklik tombol bernama halo tetapi membuka jendela file.
Kode contoh
//i am using semantic ui<button class="ui circular icon button purple send-button" id="send-btn"><i class="paper plane icon"></i></button><input type="file" id="file"class="input-file"/>
javascript
var attachButton=document.querySelector('.attach-button');
attachButton.addEventListener('click', e=>{
$('#file').trigger("click")})
css dapat melakukan banyak hal di sini ... dengan sedikit tipu daya ...
<divid='wrapper'><inputtype='file'id='browse'></div>
#wrapper {
width: 93px; /*play with this value */
height: 28px; /*play with this value */
background: url('browseBtn.png') 0 0 no-repeat;
border:none;
overflow:hidden;
}
#browse{
margin-left:-145px; /*play with this value */
opacity:0; /* set to .5 or something so you can better position it as an overlay then back to zero again after you're done */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
}
Saya telah menemukan metode yang sangat mudah untuk mengalihkan tombol file ke gambar. Anda cukup memberi label gambar dan meletakkannya di atas tombol file.
<html><divid="File button"><divstyle="position:absolute;"><!--This is your labeled image--><labelfor="fileButton"><imgsrc="ImageURL"></label></div><div><inputtype="file"id="fileButton"/></div></div></html>
Saat mengklik pada gambar berlabel, Anda memilih tombol file.
Ini menyembunyikan tombol file input, tetapi di bawah tenda mengkliknya dari tombol normal lain, yang Anda dapat dengan jelas gaya seperti tombol lainnya. Ini adalah satu-satunya solusi tanpa kelemahan selain dari DOM-node yang tidak berguna. Berkat display:none;, tombol input tidak menyimpan ruang yang terlihat di DOM.
(Saya tidak tahu lagi kepada siapa harus memberikan alat peraga untuk ini. Tapi saya mendapat ide dari suatu tempat di sini di Stackoverflow.)
Jawaban:
Input file gaya sangat sulit, karena sebagian besar browser tidak akan mengubah tampilan dari CSS atau javascript.
Bahkan ukuran input tidak akan menanggapi suka:
Sebagai gantinya, Anda harus menggunakan atribut ukuran:
Untuk gaya apa pun yang lebih canggih dari itu (mis. Mengubah tampilan tombol jelajah), Anda perlu melihat pendekatan yang rumit dengan cara overlay tombol bergaya dan kotak input di atas input file asli. Artikel yang telah disebutkan oleh rm di www.quirksmode.org/dom/inputfile.html adalah yang terbaik yang pernah saya lihat.
MEMPERBARUI
Meskipun sulit membuat
<input>
tag secara langsung, ini mudah dilakukan dengan bantuan<label>
tag. Lihat jawaban di bawah ini dari @JoshCrozier: https://stackoverflow.com/a/25825731/10128619sumber
Anda tidak perlu JavaScript untuk ini! Berikut ini adalah solusi lintas-browser:
Lihat contoh ini! - Ia bekerja di Chrome / FF / IE - (IE10 / 9/8/7)
Pendekatan terbaik adalah memiliki elemen label kustom dengan
for
atribut yang melekat pada elemen input file tersembunyi . (for
Atribut label harus cocok dengan elemen fileid
agar ini berfungsi).Sebagai alternatif, Anda juga bisa langsung membungkus elemen input file dengan label secara langsung: (contoh)
Dalam hal penataan, sembunyikan saja 1 elemen input menggunakan pemilih atribut .
Maka yang perlu Anda lakukan adalah menata
label
elemen kustom . (contoh) .1 - Perlu dicatat bahwa jika Anda menyembunyikan elemen menggunakan
display: none
, itu tidak akan berfungsi di IE8 dan di bawah. Perhatikan juga fakta bahwa jQuery memvalidasi tidak memvalidasi bidang tersembunyi secara default. Jika salah satu dari hal-hal tersebut menjadi masalah bagi Anda, berikut adalah dua metode berbeda untuk menyembunyikan input ( 1 , 2 ) yang berfungsi dalam keadaan ini.sumber
display: none
diaturinput[type=file]
?position: absolute; left: -99999rem
bukandisplay: none
karena alasan aksesibilitas. Sebagian besar waktu, pembaca layar tidak akan membaca elemen jika mereka disembunyikan menggunakandisplay: none
metode ini.label
elemen tidak dapat diakses keyboard, tidak sepertibutton
s daninput
s. Menambahkantabindex
bukan solusi karenalabel
masih tidak akan ditindaklanjuti saat fokus dan pengguna menekan masuk. Saya memecahkan ini dengan menyembunyikan input secara visual , sehingga masih dapat difokuskan, dan kemudian menggunakan:focus-within
padalabel
induk: jsbin.com/fokexoc/2/edit?html,css .outputikuti langkah-langkah ini maka Anda dapat membuat gaya khusus untuk formulir unggah file Anda:
ini adalah bentuk HTML sederhana (baca komentar HTML yang saya tulis di sini di bawah ini)
kemudian gunakan skrip sederhana ini untuk meneruskan acara klik ke file tag input.
Sekarang Anda dapat menggunakan semua jenis gaya tanpa khawatir tentang cara mengubah gaya default.
Saya tahu ini dengan sangat baik karena saya telah mencoba mengubah gaya default selama satu setengah bulan. percayalah, ini sangat sulit karena browser yang berbeda memiliki tag input unggah yang berbeda. Jadi gunakan yang ini untuk membuat formulir unggah file kustom Anda. Berikut adalah kode lengkap UPLOAD OTOMATIS.
sumber
Sembunyikan dengan css dan gunakan tombol kustom dengan $ (selector) .click () untuk mengaktifkan tombol browse. kemudian atur interval untuk memeriksa nilai tipe input file. Interval dapat menampilkan nilai untuk pengguna sehingga pengguna dapat melihat apa yang diunggah. Interval akan dihapus ketika formulir dikirimkan [EDIT] Maaf saya sudah sangat sibuk artinya memperbarui posting ini, berikut adalah contohnya
sumber
HTML
CSS
jQuery
Fiddle : http://jsfiddle.net/M7BXC/
Anda juga dapat mencapai tujuan tanpa jQuery dengan JavaScript normal.
Sekarang newBtn terhubung dengan html_btn dan Anda dapat memberi gaya btn baru seperti yang Anda inginkan: D
sumber
Semua mesin rendering secara otomatis menghasilkan tombol ketika suatu
<input type="file">
dibuat. Secara historis, tombol itu benar-benar tidak bergaya. Namun, Trident dan WebKit telah menambahkan kait melalui elemen semu.Trisula
Pada IE10, tombol input file dapat ditata menggunakan
::-ms-browse
elemen pseudo. Pada dasarnya, aturan CSS apa pun yang Anda terapkan ke tombol biasa dapat diterapkan ke elemen pseudo. Sebagai contoh:Ini ditampilkan sebagai berikut di IE10 pada Windows 8:
WebKit
WebKit menyediakan hook untuk tombol input file dengan
::-webkit-file-upload-button
pseudo-element. Sekali lagi, hampir semua aturan CSS dapat diterapkan, oleh karena itu contoh Trident akan bekerja di sini juga:Ini ditampilkan sebagai berikut di Chrome 26 pada OS X:
sumber
Jika Anda menggunakan Bootstrap 3, ini berfungsi untuk saya:
Lihat http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/
Yang menghasilkan tombol input file berikut:
Serius, periksa http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/
sumber
Contoh kerja di sini dengan dukungan Drag and drop asli: https://jsfiddle.net/j40xvkb3/
Saat menata input file, Anda tidak boleh memutus interaksi asli apa pun yang disediakan input .
The
display: none
Pendekatan istirahat asli drag dan drop dukungan.Untuk tidak merusak apa pun, Anda harus menggunakan
opacity: 0
pendekatan untuk input, dan posisikan menggunakan pola relatif / absolut dalam pembungkus.Dengan menggunakan teknik ini, Anda dapat dengan mudah mendesain zona klik / jatuhkan untuk pengguna, dan menambahkan kelas khusus dalam javascript pada
dragenter
acara untuk memperbarui gaya dan memberikan umpan balik kepada pengguna untuk membuatnya melihat bahwa ia dapat menjatuhkan file.HTML:
CSS:
Ini adalah contoh yang berfungsi (dengan JS tambahan untuk menangani
dragover
acara dan menjatuhkan file).https://jsfiddle.net/j40xvkb3/
Semoga ini bisa membantu!
sumber
Saya dapat melakukannya dengan CSS murni menggunakan kode di bawah ini. Saya telah menggunakan bootstrap dan font-mengagumkan.
sumber
Anda dapat membungkus input type = "file" di dalam label untuk input. Gaya label namun Anda ingin dan menyembunyikan input dengan tampilan: tidak ada;
sumber
Berikut adalah solusi yang tidak benar-benar menata
<input type="file" />
elemen tetapi menggunakan<input type="file" />
elemen di atas elemen lainnya (yang dapat ditata). The<input type="file" />
elemen tidak benar-benar terlihat karenanya, ilusi keseluruhan dari baik gaya control file upload.Saya menemukan masalah ini baru-baru ini dan meskipun ada banyak jawaban di Stack Overflow, tidak ada yang benar-benar sesuai dengan tagihan. Pada akhirnya, saya akhirnya menyesuaikan ini sehingga memiliki solusi yang sederhana dan elegan.
Saya juga telah menguji ini di Firefox, IE (11, 10 & 9), Chrome dan Opera, iPad dan beberapa perangkat android.
Inilah tautan JSFiddle -> http://jsfiddle.net/umhva747/
Semoga ini membantu!!!
sumber
Ini sederhana dengan jquery. Untuk memberikan contoh kode saran Ryan dengan sedikit modifikasi.
Html dasar:
Pastikan untuk mengatur gaya pada input ketika Anda siap:
opacity: 0
Anda tidak dapat mengaturdisplay: none
karena itu harus dapat diklik. Tetapi Anda dapat menempatkannya di bawah tombol "baru" atau memasukkan di bawah sesuatu yang lain dengan indeks-z jika Anda mau.Siapkan beberapa jquery untuk mengklik input nyata ketika Anda mengklik gambar.
Sekarang tombol Anda berfungsi. Cukup potong dan tempel nilai saat diubah.
Tah dah! Anda mungkin perlu mengurai val () ke sesuatu yang lebih bermakna tetapi Anda harus siap.
sumber
Letakkan tombol unggah file di atas tombol atau elemen Anda yang bagus dan sembunyikan.
Sangat sederhana dan akan berfungsi di browser apa pun
Gaya
sumber
Visibilitas: TRIK tersembunyi
Saya biasanya melakukan
visibility:hidden
trikini adalah tombol gaya saya
ini adalah tipe input = tombol file. Perhatikan
visibility:hidden
aturannyaini adalah bit JavaScript untuk merekatkan keduanya. Berhasil
sumber
style="visibility:hidden"
terlalu panjang, cukup gunakanhidden
. Juga,click()
tidak berfungsi untuk browser apa pun dan tidak ada alasan keamanan yang sangat dapat diandalkan seperti sekarang dan pada perangkat apa pun itu adalah cara yang sah dan @Gianluca untuk penggunaan jQuery klasiktrigger()
satu-satunya cara yang bisa saya pikirkan adalah menemukan tombol dengan javascript setelah itu diberikan dan menetapkan gaya untuk itu
Anda mungkin juga melihat luncuran ini
sumber
Saya biasanya menggunakan javascript sederhana untuk menyesuaikan tag input file. Bidang input tersembunyi, pada klik tombol, javascript memanggil bidang tersembunyi, solusi sederhana tanpa css atau sekelompok jquery.
sumber
click()
metode untuk memecat acara untuk file jenis input. sebagian besar browser tidak memungkinkan untuk alasan keamanan.Di sini kami menggunakan rentang untuk memicu input file jenis dan kami hanya menyesuaikan rentang itu , sehingga kami dapat menambahkan gaya apa pun menggunakan cara ini.
Perhatikan bahwa kami menggunakan tag input dengan visibilitas: opsi tersembunyi dan memicunya dalam rentang.
Referensi
sumber
Ini adalah cara yang bagus untuk melakukannya dengan mengunggah file materi / sudut. Anda dapat melakukan hal yang sama dengan tombol bootstrap.
Catatan yang saya gunakan
<a>
sebagai gantinya<button>
ini memungkinkan acara klik untuk muncul.sumber
HANYA CSS
Gunakan ini sangat sederhana dan MUDAH
Html:
Css:
sumber
Mungkin banyak awnsers. Tapi saya suka ini dalam CSS murni dengan tombol-fa:
Biola: https://jsfiddle.net/zoutepopcorn/v2zkbpay/1/
sumber
Jangan tertipu oleh solusi "luar biasa" CSS saja yang sebenarnya sangat spesifik browser, atau yang overlay tombol gaya di atas tombol nyata, atau yang memaksa Anda untuk menggunakan
<label>
bukan<button>
, atau hack lainnya . JavaScript diperlukan untuk membuatnya berfungsi untuk penggunaan umum. Silakan pelajari bagaimana gmail dan DropZone melakukannya jika Anda tidak percaya kepada saya.Cukup gaya tombol normal seperti yang Anda inginkan, lalu panggil fungsi JS sederhana untuk membuat dan menautkan elemen input tersembunyi ke tombol gaya Anda.
Perhatikan bagaimana kode di atas menghubungkan kembali setelah setiap kali pengguna memilih file. Ini penting karena "onchange" hanya dipanggil jika pengguna mengubah nama file. Tetapi Anda mungkin ingin mendapatkan file setiap kali pengguna menyediakannya.
sumber
label
pendekatan ini berfungsi, kecuali itu tidak dapat menunjukkan nama file atau jalur yang dipilih. Jadi tentu saja, itulah satu-satunya masalah yang perlu dipecahkan JS.Solusi beberapa file dengan nama file yang dikonversi
CONTOH Bootstrap
HTML:
1. JS dengan jQuery:
2. JS tanpa jQuery
sumber
Berikut ini solusinya, yang juga menunjukkan nama file yang dipilih: http://jsfiddle.net/raft9pg0/1/
HTML:
JS:
CSS:
sumber
fakepath
path?Minggu ini saya juga perlu menyesuaikan tombol dan menampilkan nama file yang dipilih selain itu, jadi setelah membaca beberapa jawaban di atas (Terima kasih BTW) saya datang dengan implementasi berikut:
HTML:
CSS
Javascript (Sudut)
Pada dasarnya saya bekerja dengan ng-file-upload lib, Angular-wise Saya mengikat nama file ke $ lingkup saya dan memberikannya nilai awal dari 'Tidak ada file yang dipilih', saya juga mengikat fungsi onFileSelect () untuk lingkup saya jadi ketika file dipilih saya mendapatkan nama file menggunakan API ng-unggah dan tetapkan ke $ scope.filename.
sumber
Cukup mensimulasikan klik pada
<input>
dengan menggunakantrigger()
fungsi saat mengklik pada gaya<div>
. Saya membuat tombol sendiri dari a<div>
dan kemudian memicu klik padainput
saat mengklik saya<div>
. Ini memungkinkan Anda membuat tombol sesuka Anda karena ini adalah<div>
dan mensimulasikan klik pada file Anda<input>
. Kemudian gunakandisplay: none
pada Anda<input>
.sumber
Cara terbaik adalah menggunakan elemen pseudo: after atau: before sebagai elemen overt input de. Kemudian gaya elemen pseudo yang Anda inginkan. Saya merekomendasikan Anda untuk melakukan gaya umum untuk semua file input sebagai berikut:
sumber
Cara terbaik yang saya temukan adalah memiliki
input type: file
kemudian mengaturnyadisplay: none
. Berikan ituid
. Buat tombol atau elemen lain yang ingin Anda buka input file.Kemudian tambahkan pendengar acara di atasnya (tombol) yang ketika diklik mensimulasikan klik pada input file asli. Seperti mengklik tombol bernama halo tetapi membuka jendela file.
Kode contoh
javascript
sumber
css dapat melakukan banyak hal di sini ... dengan sedikit tipu daya ...
:: referensi :: http://site-o-matic.net/?viewpost=19
-biara
sumber
Saya telah menemukan metode yang sangat mudah untuk mengalihkan tombol file ke gambar. Anda cukup memberi label gambar dan meletakkannya di atas tombol file.
Saat mengklik pada gambar berlabel, Anda memilih tombol file.
sumber
Hanya pendekatan ini yang memberi Anda fleksibilitas penuh! ES6 / VanillaJS!
html:
javascript:
Ini menyembunyikan tombol file input, tetapi di bawah tenda mengkliknya dari tombol normal lain, yang Anda dapat dengan jelas gaya seperti tombol lainnya. Ini adalah satu-satunya solusi tanpa kelemahan selain dari DOM-node yang tidak berguna. Berkat
display:none;
, tombol input tidak menyimpan ruang yang terlihat di DOM.(Saya tidak tahu lagi kepada siapa harus memberikan alat peraga untuk ini. Tapi saya mendapat ide dari suatu tempat di sini di Stackoverflow.)
sumber