上传文件控制input type="file"样式修改记

本文介绍了一种通过隐藏默认文件上传控件并使用自定义按钮和提示文本的方式,来改进文件上传界面美观度的方法。通过JavaScript和CSS实现了按钮点击触发文件选择及文件名显示的功能。

前几天改几个页面样式,大部分都改完了,就剩上传文件控件没有美化,就想放过去算了,就这样吧,后来还是觉得实在看不下去,还是动了点小脑筋把它改造完了,开心开心

...

现记录一下改造过程:

最先就是就这个控件写样式,几次三番都失败了大哭抓狂发火。哼,那就不要怪我了,只能来个狠的,一不做二不休,直接把这个不听话的家伙给隐藏了,原位置给放了一个按钮,再在按钮后面放了一个span ,用来显视选择的文件,好,拼凑了一个file.那就开始实现功能,不说了,直接上代码

html部分:

<button  type="button" class="d-button"  onclick="clp();">选择文件</button>
<input type="file"  id="excel" name="excel"/>
<span class="showFileName">未选择任何文件</span>

script部分:

function clp(){
return $("#excel").click(); //重要的在这里,按钮点击进返回的是file点击。
}


$(document).ready(function(){
$("#excel").on("change",function(){
var filePath=$(this).val();
var arr=filePath.split('\\');
var fileName=arr[arr.length-1];
$(".showFileName").html(fileName);  //给span填充上先择的文件名
})});

拼的file随便改样式,原来的input ='file'的家伙给加上display:none。

啦啦啦啦....大功告成啦,你这个不听话的file,我就要让你干活,还不让你露脸得意

### 修改 Vue 和 ElementPlus 中 `input[type=file]` 的默认文本和样式 在 Vue 和 ElementPlus 中自定义文件上传控件的外观是一个常见的需求。通过隐藏原生的 `<input type="file">` 控件并创建一个可点击的按钮或其他 UI 元素来触发文件选择对话框,可以实现这一目标。 以下是具体方法: #### 隐藏原始输入框 由于浏览器自带的 `input[type="file"]` 样式难以完全定制,通常的做法是将其设置为不可见,并使用其他元素代替其视觉表现。可以通过 CSS 将该输入框设为透明或移除显示[^4]。 ```css /* 使用 CSS 隐藏 input 文件域 */ .custom-file-input { display: none; } ``` #### 创建替代按钮 为了提供更好的用户体验,可以用一个普通的按钮或者其他 HTML 元素作为文件选择器的触发点。当用户点击这个新按钮时,它会触发动态绑定到它的文件输入框。 ```html <template> <div class="upload-container"> <!-- 替代样式的按钮 --> <el-button @click="triggerFileInput" type="primary">选择文件</el-button> <!-- 实际用于接收文件的选择框 --> <input ref="fileInput" type="file" accept=".jpg,.png,.jpeg" class="custom-file-input" /> <!-- 显示已选中的文件名 --> <p v-if="selectedFileName">{{ selectedFileName }}</p> </div> </template> ``` #### 绑定逻辑处理函数 利用 Vue 方法监听用户的交互行为,比如模拟点击事件以及更新状态变量反映当前所选文件的信息。 ```javascript <script> export default { data() { return { selectedFileName: '', // 存储选定文件的名字 }; }, methods: { triggerFileInput() { this.$refs.fileInput.click(); // 手动调用隐藏的 input[type='file'] 点击操作 }, onFileChange(event) { const files = event.target.files || []; if (files.length > 0) { this.selectedFileName = files[0].name; // 更新展示的文件名称 } else { this.selectedFileName = ''; // 如果取消选择,则清空名字 } } }, mounted() { // 添加 change listener 到实际的 input 上面 this.$refs.fileInput.addEventListener('change', this.onFileChange); }, beforeDestroy() { // 移除事件监听以防内存泄漏 this.$refs.fileInput.removeEventListener('change', this.onFileChange); } }; </script> ``` 以上代码片段展示了如何覆盖掉原有的 “No file chosen” 文字提示,并替换成更灵活可控的内容结构[^5]。 #### 自定义样式调整 如果希望进一步美化整个区域或者改变布局形式,可以根据项目设计指南自由编辑相关联的部分CSS规则集。 ```scss .upload-container { margin-top: 20px; .el-button { padding: 10px 20px; font-size: 16px; } p { color: gray; font-style: italic; margin-left: 8px; } } ``` 这样不仅去除了默认的文字描述,还增强了界面的一致性和美观度。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值