文件上传(type="file" ) 文件名全部显示

158 阅读2分钟

管理后台的项目

甲方提供了静态HTML;我们负责前台和后台的逻辑部分; 不是国内的项目,不用考虑过多的浏览器;目前测试只用测试Chrome、Firefox、Safari及Edge;

指摘

上传文件的input框,甲方提指摘上传的文件名没有全部显示,中间有省略号;

需求

需求:文件名需全部显示,可换行,input框上传按钮的样式要求不变动;

我直接在浏览器(Chrome)页面上通过修改css,便可以实现需求;没有多浏览器的测试,便喜滋滋的提交了代码,把票指给测试了;

width: 100%;white-space: break-spaces;

测试结果

只有在Chrome浏览器及Edge浏览器(Chrome内核)上文字会换行且全部显示 1.png

Firefox及Safari 文字不可以换行,若文件名很长也只会显示一行中间是省略号; 2.png

再修改

我知道有各种方法可以解决这个问题,但是由于甲方要求尽量不要变动相关的样式,所以我想不要过多的变动;

我的做法

区分浏览器去对应;只对应需要对应的浏览器,Chrome内核的浏览器的样式是好的,那就可以不用对应了;

针对需对应的浏览器,通过js监听input框的change 事件,获取到上传文件的文件名,在input框后插入元素,然后通过css设置margin-top 为负值,遮盖住原有的文字;通过text-indent 文字缩进、pointer-events 指针属性 不影响原有input框的上传功能;

相关代码如下:

'<p class="csv_name"><mark>'+file.name+'</mark></p>';

.csv_name {text-align:justify;pointer-events: none;text-indent: 61px;margin-top: -27px}

.csv_name mark {background: #ffffff;font-style: normal;font-weight: inherit;pointer-events: all;}

这样就可以达到需求

3.png

经过这一番折腾,测试终于通过了;不由感叹 Chrome真的太友好了,哈哈;这只是开发中有点波折的经验记录,若有何不妥之处,请大家热情指出,谢谢!