เป็นไปได้<input type="file">
หรือไม่ที่จะเปลี่ยนรูปลักษณ์ของ?
เป็นไปได้<input type="file">
หรือไม่ที่จะเปลี่ยนรูปลักษณ์ของ?
คำตอบ:
คุณไม่สามารถแก้ไขinput[type=file]
ตัวควบคุมได้มากนัก
เนื่องจากการคลิกlabel
องค์ประกอบที่จับคู่กับอินพุตอย่างถูกต้องจะเป็นการเปิดใช้งาน / โฟกัสเราจึงสามารถใช้ a label
เพื่อเรียกใช้กล่องโต้ตอบเรียกดูระบบปฏิบัติการ
นี่คือวิธีที่คุณสามารถทำได้ ...
label {
cursor: pointer;
/* Style as you please, it will become the visible UI component. */
}
#upload-photo {
opacity: 0;
position: absolute;
z-index: -1;
}
<label for="upload-photo">Browse...</label>
<input type="file" name="photo" id="upload-photo" />
ซีเอสเอสำหรับการควบคุมรูปแบบจะทำให้ปรากฏมองไม่เห็นและไม่ใช้พื้นที่ในการจัดวางเอกสาร แต่จะยังคงมีอยู่label
เพื่อที่จะสามารถใช้งานได้ผ่านทาง
หากคุณต้องการแสดงเส้นทางที่เลือกของผู้ใช้หลังจากการเลือกคุณสามารถฟังchange
เหตุการณ์ด้วย JavaScript แล้วอ่านเส้นทางที่เบราว์เซอร์เปิดให้คุณใช้ได้ (เพื่อเหตุผลด้านความปลอดภัยสามารถโกหกคุณเกี่ยวกับเส้นทางที่แน่นอน) วิธีทำให้สวยสำหรับผู้ใช้ก็คือใช้ชื่อฐานของเส้นทางที่ส่งคืน (ดังนั้นผู้ใช้เพียงแค่เห็นชื่อไฟล์ที่เลือก)
มีไกด์ที่ยอดเยี่ยมโดย Tympanusสำหรับการออกแบบนี้
#container { position: relative; width: ...px; height: ...px; overflow: hidden; } #input { position: absolute; right: 0; font-size: <many a>px; opacity: 0; margin: 0; padding: 0; border: none; }
<label>
(ตามที่แสดงโดย Tympanus)นั้นมีความหมายมากกว่าและแฮ็คน้อยกว่า นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์
อาจจะเป็นอย่างนั้น?
<form>
<input id="fileinput" type="file" style="display:none;"/>
</form>
<button id="falseinput">El Cucaratcha, for example</button>
<span id="selected_filename">No file selected</span>
<script>
$(document).ready( function() {
$('#falseinput').click(function(){
$("#fileinput").click();
});
});
$('#fileinput').change(function() {
$('#selected_filename').text($('#fileinput')[0].files[0].name);
});
</script>
display: none
จะลบอินพุตออกจากลำดับแท็บทำให้หน้าเว็บเข้าถึงได้น้อยลง การใช้<label>
(ตามที่แสดงโดย Tympanus)มีความหมายมากกว่าและแฮ็กน้อย นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์
<label for="fusk">dsfdsfsd</label>
<input id="fusk" type="file" name="photo" style="display: none;">
ทำไมจะไม่ล่ะ? ^ _ ^
ดูตัวอย่างได้ที่นี่
<label>
(ตามที่แสดงโดย Tympanus)เป็นโซลูชันที่ถูกต้องในเชิงความหมาย นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์
หากคุณใช้bootstrapที่นี่เป็นทางออกที่ดีกว่า:
<label class="btn btn-default btn-file">
Browse <input type="file" style="display: none;">
</label>
สำหรับ IE8 และด้านล่าง http://www.abeautifulsite.net/whipping-file-inputs-into-shape-with-bootstrap-3/
วิธีที่ง่ายที่สุด ..
<label>
Upload
<input type="file" style="visibility: hidden;"/>
</label>
ใน webkit คุณสามารถลองใช้ ...
input[type="file"]::-webkit-file-upload-button{
/* style goes here */
}
ก่อนอื่นมันคือคอนเทนเนอร์:
<div class="upload_file_container">
Select file!
<input type="file" name="photo" />
</div>
ประการที่สองเป็นสไตล์ CSS หากคุณต้องการปรับแต่งเพิ่มเติมได้จริง ๆ เพียงแค่เปิดตาของคุณ :)
.upload_file_container{
width:100px;
height:40px;
position:relative;
background(your img);
}
.upload_file_container input{
width:100px;
height:40px;
position:absolute;
left:0;
top:0;
cursor:pointer;
}
ตัวอย่างนี้ไม่มีสไตล์สำหรับข้อความที่อยู่ในปุ่มมันขึ้นอยู่กับขนาดตัวอักษรเพียงแก้ไขความสูงและค่า padding-top สำหรับคอนเทนเนอร์
right: 0
แทนleft: 0
? ด้วยวิธีนี้คุณจะมีกล่องข้อความของ ie ออกจากคอนเทนเนอร์ การคลิกที่กล่องข้อความไม่ได้เปิดกล่องโต้ตอบเลือกไฟล์ นอกจากนี้ผมเชื่อว่าทำให้ใหญ่ใส่ไฟล์ที่มีfont-size
ความคิดที่ดีมากแล้วใช้และwidth
height
เคล็ดลับคือซ่อนอินพุตและปรับแต่งฉลาก
HTML:
<div class="inputfile-box">
<input type="file" id="file" class="inputfile" onchange='uploadFile(this)'>
<label for="file">
<span id="file-name" class="file-box"></span>
<span class="file-button">
<i class="fa fa-upload" aria-hidden="true"></i>
Select File
</span>
</label>
</div>
CSS:
.inputfile-box {
position: relative;
}
.inputfile {
display: none;
}
.container {
display: inline-block;
width: 100%;
}
.file-box {
display: inline-block;
width: 100%;
border: 1px solid;
padding: 5px 0px 5px 5px;
box-sizing: border-box;
height: calc(2rem - 2px);
}
.file-button {
background: red;
padding: 5px;
position: absolute;
border: 1px solid;
top: 0px;
right: 0px;
}
JS:
function uploadFile(target) {
document.getElementById("file-name").innerHTML = target.files[0].name;
}
คุณสามารถตรวจสอบตัวอย่างนี้: https://jsfiddle.net/rjurado/hnf0zhy1/4/
มันจะดีกว่ามากถ้าคุณใช้ a <label>
, ซ่อน<input>
, และปรับแต่งฉลาก
HTML:
<input type="file" id="input">
<label for="input" id="label">Choose File</label>
CSS:
input#input{
display: none;
}
label#label{
/* Customize your label here */
}
display: none
จะลบองค์ประกอบออกจากลำดับแท็บ การใช้<label>
(ตามที่แสดงโดย Tympanus)เป็นวิธีที่ถูกต้องทางความหมาย แต่ต้องการการปรับแต่งบางอย่าง นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์
เพื่อแสดงเส้นทางของไฟล์ที่เลือกคุณสามารถลองใน html:
<div class="fileinputs">
<input type="file" class="file">
</div>
และในจาวาสคริปต์:
var fakeFileUpload = document.createElement('div');
fakeFileUpload.className = 'fakefile';
var image = document.createElement('div');
image.className='fakebtn';
image.innerHTML = 'browse';
fakeFileUpload.appendChild(image);
fakeFileUpload.appendChild(document.createElement('input'));
var x = document.getElementsByTagName('input');
for (var i=0;i<x.length;i++) {
if (x[i].type != 'file') continue;
if (x[i].parentNode.className != 'fileinputs') continue;
x[i].className = 'file hidden';
var clone = fakeFileUpload.cloneNode(true);
x[i].parentNode.appendChild(clone);
x[i].relatedElement = clone.getElementsByTagName('input')[0];
x[i].onchange = x[i].onmouseout = function () {
this.relatedElement.value = this.value;
}
}
และสไตล์:
div.fileinputs {
position: relative;
height: 30px;
width: 370px;
}
input.file.hidden {
position: relative;
text-align: right;
-moz-opacity: 0;
filter: alpha(opacity: 0);
opacity: 0;
z-index: 2;
}
div.fakefile {
position: absolute;
top: 0px;
left: 0px;
right: 0;
width: 370px;
padding: 0;
margin: 0;
z-index: 1;
line-height: 90%;
}
div.fakefile input {
margin-bottom: 5px;
margin-left: 0;
border: none;
box-shadow: 0px 0px 2px 1px #ccc;
padding: 4px;
width: 241px;
height: 20px;
}
div.fakefile .fakebtn{
width: 150px;
background: #eb5a41;
z-index: 10;
font-family: roya-bold;
border: none;
padding: 5px 15px;
font-size: 18px;
text-align: center;
cursor: pointer;
-webkit-transition: all 0.4s ease;
-moz-transition: all 0.4s ease;
-o-transition: all 0.4s ease;
-ms-transition: all 0.4s ease;
transition: all 0.4s ease;
display: inline;
margin-left: 3px;
}
div.fileinputs input[type="file"]:hover + div .fakebtn{
background: #DA472E;
}
div.fileinputs input[type="file"] {
opacity: 0;
position: absolute;
top: -6px;
right: 0px;
z-index: 20;
width: 102px;
height: 40px;
cursor: pointer;
}
<label className="btn btn-info btn-lg">
Upload
<input type="file" style="display: none" />
</label>
ฉันไปสำหรับตัวเลือกนี้ซึ่งจะอธิบายวิธีปรับแต่งปุ่มเรียกดูโดยรวมถึงตัวจัดการของชื่อไฟล์ที่อัพโหลด เพิ่มเขตข้อมูลเพิ่มเติมและตัวควบคุมฝั่งไคลเอ็นต์เพื่อแสดงวิธีรวมการเรียกดูในแบบฟอร์ม "ของจริง" ไม่ใช่เพียงแบบสแตนด์อโลน
นี่คือ codepen: http://codepen.io/emiemi/pen/zxNXWR
JS:
//click on our custom btn triggers a click on the hidden actual file input
$("#btnup").click(function(){
$("#fileup").click();
});
//changes on the three fields (input, tit,and name) trigger a control which checks if the 3 fields are all filled and if file field is valid (an image is uploaded)
$('#fileup').change(function(){
var formDOMObj = document.upload;
//here we assign tu our text field #fileup the name of the selected file
var res=$('#fileup').val();
var arr = res.split("\\");
//if file is not valid we show the error icon and the red alert
if (formDOMObj.fileup.value.indexOf(".jpg") == -1 && formDOMObj.fileup.value.indexOf(".png") == -1 && formDOMObj.fileup.value.indexOf(".jpeg") == -1 && formDOMObj.fileup.value.indexOf(".bmp") == -1 && formDOMObj.fileup.value.indexOf(".JPG") == -1 && formDOMObj.fileup.value.indexOf(".PNG") == -1 && formDOMObj.fileup.value.indexOf(".JPEG") == -1 && formDOMObj.fileup.value.indexOf(".BMP") == -1){
$( ".imgupload" ).hide("slow");
$( ".imguploadok" ).hide("slow");
$( ".imguploadstop" ).show("slow");
$('#nomefile').css({"color":"red","font-weight":700});
$('#nomefile').html("The file "+arr.slice(-1)[0]+" is not an image!");
$( "#bottone" ).hide();
$( "#fakebtn" ).show();
}else{
//if file is valid we show the green alert
$( ".imgupload" ).hide("slow");
$( ".imguploadstop" ).hide("slow");
$( ".imguploadok" ).show("slow");
$('#nomefile').html(arr.slice(-1)[0]);
$('#nomefile').css({"color":"green","font-weight":700});
if (formDOMObj.nome.value!=""&&formDOMObj.tit.value!=""&&formDOMObj.fileup.value!=""){
//if all three fields are valid the fake input btn is hidden and the actual one i s finally hown
$( "#fakebtn" ).hide();
$( "#bottone" ).show();
}
}
});
$('#nome').change(function(){
//same as file change but on name field
var formDOMObj = document.upload;
if (formDOMObj.nome.value!=""&&formDOMObj.tit.value!=""&&formDOMObj.fileup.value!=""){
$( "#fakebtn" ).hide();
$( "#bottone" ).show();
}else{
$( "#bottone" ).hide();
$( "#fakebtn" ).show();
}
});
$('#tit').change(function(){
//same as file change but on tit field
var formDOMObj = document.upload;
if (formDOMObj.nome.value!=""&&formDOMObj.tit.value!=""&&formDOMObj.fileup.value!=""){
$( "#fakebtn" ).hide();
$( "#bottone" ).show();
}else{
$( "#bottone" ).hide();
$( "#fakebtn" ).show();
}
});
HTML:
<form name="upload" method="post" action="/" enctype="multipart/form-data" accept-charset="utf-8">
<div class="row">
<div class="col-md-6 center">
<!--this is the actual file input, s hidden beacause we wanna use our custom one-->
<input type="file" value="" class="hidden" name="fileup" id="fileup">
<div class="btn-container">
<!--the three icons: default, ok file (img), error file (not an img)-->
<h1 class="imgupload"><i class="fa fa-file-image-o"></i></h1>
<h1 class="imguploadok"><i class="fa fa-check"></i></h1>
<h1 class="imguploadstop"><i class="fa fa-times"></i></h1>
<!--this field changes dinamically displaying the filename we are trying to upload-->
<p id="nomefile">Only pics allowed! (jpg,jpeg,bmp,png)</p>
<!--our custom btn which triggers the actual hidden one-->
<button type="button" id="btnup" class="btn btn-primary btn-lg">Browse for your pic!</button>
</div>
</div>
<!--additional fields-->
<div class="col-md-6">
<div class="row">
<div class="form-group" id="top">
<div class="col-md-12">
<input type="text" maxlength="100" class="form-control" name="nome" id="nome" placeholder="Your Name">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12">
<input type="text" maxlength="50" class="form-control" name="tit" id="tit" placeholder="I am rubber, you are glue">
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p class="white">All fields are mandatory</p>
</div>
<div class="col-md-4">
<!--the defauld disabled btn and the actual one shown only if the three fields are valid-->
<input type="submit" value="Submit!" class="btn btn-primary" id="bottone" style="padding-left:50px; padding-right:50px; display:none;">
<button type="button" class="btn btn-default" disabled="disabled" id="fakebtn" style="padding-left:40px; padding-right:40px;">Submit! <i class="fa fa-minus-circle"></i></button>
</div>
</div>
</div>
</div>
นี่เป็นวิธีหนึ่งที่ฉันชอบเพราะมันทำให้การป้อนข้อมูลกรอกภาชนะทั้งหมด เคล็ดลับคือ "ขนาดตัวอักษร: 100px" และต้องใช้ "overflow: hidden" และตำแหน่งสัมพัทธ์
<div id="upload-file-container" >
<input type="file" />
</div>
#upload-file-container {
width: 200px;
height: 50px;
position: relative;
border: dashed 1px black;
overflow: hidden;
}
#upload-file-container input[type="file"]
{
margin: 0;
opacity: 0;
font-size: 100px;
}
position: absolute; right: 0; font-size: <many>px;
คุณสามารถจัดรูปแบบได้ แต่คุณไม่สามารถลบองค์ประกอบที่มีอยู่แล้วได้ หากคุณสร้างสรรค์คุณสามารถทำงานกับสิ่งนั้นและทำสิ่งนี้:
input[type=file] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: #EEE;
background: linear-gradient(to top, #FFF, #DDD);
border: thin solid rgba(0,0,0, .5);
border-radius: .25em;
box-shadow: inset .25em .25em .25em rgba(255,255,255, .5), inset -.1em -.1em .1em rgba(0,0,0, 0.1);
cursor: text;
padding: .25em;
}
http://jsfiddle.net/zr1x1m2b/1/
ฉันขอแนะนำให้คุณเล่นกับรหัสนี้ลบเส้นเพิ่มของคุณเองทำอะไรจนกว่าคุณจะได้รับสิ่งที่ดูเหมือนว่าคุณชอบ!
<label>
(ดังที่แสดงโดย Tympanus)นั้นมีความหมายและให้ความสามารถในการปรับแต่งที่สมบูรณ์ นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์
เพียงแค่จัดสไตล์ปุ่มปกติตามที่คุณต้องการโดยใช้ CSS ที่คุณชื่นชอบ
จากนั้นเรียกใช้ฟังก์ชัน JS อย่างง่ายเพื่อสร้างและเชื่อมโยงองค์ประกอบอินพุตที่ซ่อนอยู่กับปุ่มสไตล์ของคุณ อย่าเพิ่ม CSS เฉพาะเบราว์เซอร์เพื่อทำหน้าที่ซ่อน
<!DOCTYPE html>
<meta charset="utf-8">
<style>
button {
width : 160px;
height : 30px;
font-size : 13px;
border : none;
text-align : center;
background-color : #444;
color : #6f0;
}
button:active {
background-color : #779;
}
</style>
<button id="upload">Styled upload button!</button>
<script>
function Upload_On_Click(id, handler) {
var hidden_input = null;
document.getElementById(id).onclick = function() {hidden_input.click();}
function setup_hidden_input() {
hidden_input && hidden_input.parentNode.removeChild(hidden_input);
hidden_input = document.createElement("input");
hidden_input.setAttribute("type", "file");
hidden_input.style.visibility = "hidden";
document.querySelector("body").appendChild(hidden_input);
hidden_input.onchange = function() {
handler(hidden_input.files[0]);
setup_hidden_input();
};
}
setup_hidden_input();
}
Upload_On_Click("upload", function(file) {
console.log("GOT FILE: " + file.name);
});
</script>
สังเกตว่าโค้ดข้างต้นเชื่อมโยงอีกครั้งหลังจากทุกครั้งที่ผู้ใช้เลือกไฟล์ สิ่งนี้สำคัญเนื่องจาก "onchange" ถูกเรียกใช้เฉพาะเมื่อผู้ใช้เปลี่ยนชื่อไฟล์ แต่คุณอาจต้องการรับไฟล์ทุกครั้งที่ผู้ใช้ให้มัน
สำหรับรายละเอียดเพิ่มเติมค้นคว้า DropZone และการอัปโหลด Gmail
$(document).ready(function () {
$(document).mousemove(function () {
$('#myList').css('display', 'block');
$("#seebtn").css('display', 'none');
$("#hidebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
var fileArray1 = document.getElementsByClassName('file-input');
for (var i = 0; i < fileArray1.length; i++) {
var files = fileArray1[i].files;
for (var j = 0; j < files.length; j++) {
$("#myList").append("<li style='color:black'>" + files[j].name + "</li>");
}
};
if (($("#myList").html()) != '') {
$('#unselect').css('display', 'block');
$('#divforfile').css('color', 'green');
$('#attach').css('color', 'green');
$('#displayFileNames').html($("#myList").children().length + ' ' + 'files selezionato');
};
if (($("#myList").html()) == '') {
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
$('#displayFileNames').append('Nessun File Selezionato');
};
});
});
function choosefiles(obj) {
$(obj).hide();
$('#myList').css('display', 'none');
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#unselect').css('display', 'none');
$("#upload-form").append("<input class='file-input inputs' type='file' onclick='choosefiles(this)' name='file[]' multiple='multiple' />");
$('#displayFileNames').html('');
}
$(document).ready(function () {
$('#unselect').click(function () {
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
$('#myFileInput').val('');
document.getElementById('upload-form').reset();
$('#unselect').css('display', 'none');
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
});
});
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
.divs {
position: absolute;
display: inline-block;
background-color: #fff;
}
.inputs {
position: absolute;
left: 0px;
height: 2%;
width: 15%;
opacity: 0;
background: #00f;
z-index: 100;
}
.icons {
position: absolute;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<form id='upload-form' action='' method='post' enctype='multipart/form-data'>
<div class="divs" id="divforfile" style="color:black">
<input id='myFileInput' class='file-input inputs' type='file' name='file[]' onclick="choosefiles(this)" multiple='multiple' />
<i class="material-icons" id="attach" style="font-size:21px;color:black">attach_file</i><label>Allegati</label>
</div>
</form>
<br />
</div>
<br />
<div>
<button style="border:none; background-color:white; color:black; display:none" id="seebtn"><p>Files ▼</p></button>
<button style="border:none; background-color:white; color:black; display:none" id="hidebtn"><p>Files ▲</p></button>
<button type="button" class="close" aria-label="Close" id="unselect" style="display:none;float:left">
<span style="color:red">×</span>
</button>
<div id="displayFileNames">
</div>
<ul id="myList"></ul>
</div>
นี่คือการอัปโหลด / ไฟล์แนบของลูกค้าที่ทำงานได้อย่างสมบูรณ์โดยใช้ jquery & javascript (Visual studio) มันจะมีประโยชน์!
รหัสจะอยู่ที่ส่วนความคิดเห็น!
ลิงค์: https://youtu.be/It38OzMAeig
สนุก :)
$(document).ready(function () {
$(document).mousemove(function () {
$('#myList').css('display', 'block');
$("#seebtn").css('display', 'none');
$("#hidebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
var fileArray1 = document.getElementsByClassName('file-input');
for (var i = 0; i < fileArray1.length; i++) {
var files = fileArray1[i].files;
for (var j = 0; j < files.length; j++) {
$("#myList").append("<li style='color:black'>" + files[j].name + "</li>");
}
};
if (($("#myList").html()) != '') {
$('#unselect').css('display', 'block');
$('#divforfile').css('color', 'green');
$('#attach').css('color', 'green');
$('#displayFileNames').html($("#myList").children().length + ' ' + 'files selezionato');
};
if (($("#myList").html()) == '') {
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
$('#displayFileNames').append('Nessun File Selezionato');
};
});
});
function choosefiles(obj) {
$(obj).hide();
$('#myList').css('display', 'none');
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#unselect').css('display', 'none');
$("#upload-form").append("<input class='file-input inputs' type='file' onclick='choosefiles(this)' name='file[]' multiple='multiple' />");
$('#displayFileNames').html('');
}
$(document).ready(function () {
$('#unselect').click(function () {
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
$('#myFileInput').val('');
document.getElementById('upload-form').reset();
$('#unselect').css('display', 'none');
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
});
});
<style>
.divs {
position: absolute;
display: inline-block;
background-color: #fff;
}
.inputs {
position: absolute;
left: 0px;
height: 2%;
width: 15%;
opacity: 0;
background: #00f;
z-index: 100;
}
.icons {
position: absolute;
}
</style>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<div>
<form id='upload-form' action='' method='post' enctype='multipart/form-data'>
<div class="divs" id="divforfile" style="color:black">
<input id='myFileInput' class='file-input inputs' type='file' name='file[]' onclick="choosefiles(this)" multiple='multiple' />
<i class="material-icons" id="attach" style="font-size:21px;color:black">attach_file</i><label>Allegati</label>
</div>
</form>
<br />
</div>
<br />
<div>
<button style="border:none; background-color:white; color:black; display:none" id="seebtn"><p>Files ▼</p></button>
<button style="border:none; background-color:white; color:black; display:none" id="hidebtn"><p>Files ▲</p></button>
<button type="button" class="close" aria-label="Close" id="unselect" style="display:none;float:left">
<span style="color:red">×</span>
</button>
<div id="displayFileNames">
</div>
<ul id="myList"></ul>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
$(document).ready(function () {
$(document).mousemove(function () {
$('#myList').css('display', 'block');
$("#seebtn").css('display', 'none');
$("#hidebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
var fileArray1 = document.getElementsByClassName('file-input');
for (var i = 0; i < fileArray1.length; i++) {
var files = fileArray1[i].files;
for (var j = 0; j < files.length; j++) {
$("#myList").append("<li style='color:black'>" + files[j].name + "</li>");
}
};
if (($("#myList").html()) != '') {
$('#unselect').css('display', 'block');
$('#divforfile').css('color', 'green');
$('#attach').css('color', 'green');
$('#displayFileNames').html($("#myList").children().length + ' ' + 'files selezionato');
};
if (($("#myList").html()) == '') {
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
$('#displayFileNames').append('Nessun File Selezionato');
};
});
});
function choosefiles(obj) {
$(obj).hide();
$('#myList').css('display', 'none');
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#unselect').css('display', 'none');
$("#upload-form").append("<input class='file-input inputs' type='file' onclick='choosefiles(this)' name='file[]' multiple='multiple' />");
$('#displayFileNames').html('');
}
$(document).ready(function () {
$('#unselect').click(function () {
$('#hidebtn').css('display', 'none');
$("#seebtn").css('display', 'none');
$('#displayFileNames').html('');
$("#myList").html('');
$('#myFileInput').val('');
document.getElementById('upload-form').reset();
$('#unselect').css('display', 'none');
$('#divforfile').css('color', 'black');
$('#attach').css('color', 'black');
});
});
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
.divs {
position: absolute;
display: inline-block;
background-color: #fff;
}
.inputs {
position: absolute;
left: 0px;
height: 2%;
width: 15%;
opacity: 0;
background: #00f;
z-index: 100;
}
.icons {
position: absolute;
}
</style>
<div>
<form id='upload-form' action='' method='post' enctype='multipart/form-data'>
<div class="divs" id="divforfile" style="color:black">
<input id='myFileInput' class='file-input inputs' type='file' name='file[]' onclick="choosefiles(this)" multiple='multiple' />
<i class="material-icons" id="attach" style="font-size:21px;color:black">attach_file</i><label>Allegati</label>
</div>
</form>
<br />
</div>
<br />
<div>
<button style="border:none; background-color:white; color:black; display:none" id="seebtn"><p>Files ▼</p></button>
<button style="border:none; background-color:white; color:black; display:none" id="hidebtn"><p>Files ▲</p></button>
<button type="button" class="close" aria-label="Close" id="unselect" style="display:none;float:left">
<span style="color:red">×</span>
</button>
<div id="displayFileNames">
</div>
<ul id="myList"></ul>
</div>
นี่คือวิธีแก้ปัญหา CSS แบบด่วนบริสุทธิ์ (ทำงานบน chrome และมี FireFox fallback รวมอยู่) รวมถึงชื่อไฟล์ป้ายกำกับและปุ่มอัปโหลดที่กำหนดเองทำในสิ่งที่ควรทำ - ไม่จำเป็นต้องใช้ JavaScript เลย! 🎉
หมายเหตุ: ☝ใช้งานได้บน Chrome และมี FireFox fallback - เอาล่ะฉันจะไม่ใช้มันในเว็บไซต์แห่งโลกแห่งความเป็นจริง - ถ้าความเข้ากันได้ของเบราว์เซอร์เป็นสิ่งที่คุณต้องการ ดังนั้นมันจึงเป็นการทดลองมากกว่า
.fileUploadInput {
display: grid;
grid-gap: 10px;
position: relative;
z-index: 1; }
.fileUploadInput label {
display: flex;
align-items: center;
color: setColor(primary, 0.5);
background: setColor(white);
transition: .4s ease;
font-family: arial, sans-serif;
font-size: .75em;
font-weight: regular; }
.fileUploadInput input {
position: relative;
z-index: 1;
padding: 0 gap(m);
width: 100%;
height: 50px;
border: 1px solid #323262;
border-radius: 3px;
font-family: arial, sans-serif;
font-size: 1rem;
font-weight: regular; }
.fileUploadInput input[type="file"] {
padding: 0 gap(m); }
.fileUploadInput input[type="file"]::-webkit-file-upload-button {
visibility: hidden;
margin-left: 10px;
padding: 0;
height: 50px;
width: 0; }
.fileUploadInput button {
position: absolute;
right: 0;
bottom: 0;
width: 50px;
height: 50px;
line-height: 0;
user-select: none;
color: white;
background-color: #323262;
border-radius: 0 3px 3px 0;
font-family: arial, sans-serif;
font-size: 1rem;
font-weight: 800; }
.fileUploadInput button svg {
width: auto;
height: 50%; }
* {
margin: 0px;
padding: 0px;
box-sizing: border-box;
border: 0px;
outline: 0;
background-repeat: no-repeat;
appearance: none;
border-radius: 0;
vertical-align: middle;
font-weight: inherit;
font-style: inherit;
font-family: inherit;
text-decoration: none;
list-style: none;
user-select: text;
line-height: 1.333em; }
body {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100vh;
background: rgba(66, 50, 98, 0.05); }
.container {
padding: 25px;
box-shadow: 0 0 20px rgba(66, 50, 98, 0.35);
border: 1px solid #eaeaea;
border-radius: 3px;
background: white; }
@-moz-document url-prefix() {
.fileUploadInput button{
display: none
}
}
<!-- Author: Ali Soueidan-->
<!-- Author URI: https//: www.alisoueidan.com-->
<div class="container">
<div class="fileUploadInput">
<label>✨ Upload File</label>
<input type="file" />
<button>+</button></div>
</div>
นี่เป็นวิธีหนึ่งที่ฉันค้นพบเมื่อเร็ว ๆ นี้โดยมี jQuery เล็กน้อย
รหัส HTML:
<form action="">
<input type="file" name="file_upload" style="display:none" id="myFile">
<a onclick="fileUpload()"> Upload a file </a>
</form>
สำหรับส่วนของ javascript / jQuery:
<script>
function fileUpload() {
$("#myFile").click();
}
</script>
ในตัวอย่างนี้ฉันได้ใส่แท็ก "จุดยึด" เพื่อเรียกการอัปโหลดไฟล์ คุณสามารถแทนที่ด้วยสิ่งที่คุณต้องการเพียงจำไว้ว่าให้วางคุณลักษณะ "onclick" ด้วยฟังก์ชั่นที่เหมาะสม
หวังว่านี่จะช่วยได้!
PS: อย่าลืมรวม jQuery จาก CDN หรือแหล่งอื่น ๆ
display: none
จะลบอินพุตออกจากลำดับแท็บ การใช้<label>
(ตามที่แสดงโดย Tympanus)มีความหมายมากกว่าและแฮ็กน้อย นอกจากนี้คำถามนี้ถูกถามอีกไม่กี่ปีต่อมาและมีคำตอบที่ดีมากมี: จัดแต่งทรงผมที่กำหนดเองข้ามเบราว์เซอร์สำหรับปุ่มอัปโหลดไฟล์