input[type="file"]的样式在各个浏览器中的表现不尽相同:

1. chrome:

2. firefox:

3. opera:

4. ie:

5. edge:

另外,当我们规定 input[type="file"] 的高度,并把它的行高设置成与其高度相等后,chrome中难看的样式出现了:


“未选择任何文件”这一行并没有竖直居中。

这些浏览器中的表现不一致,我们必须做兼容处理。

思路:

1. 自定义与其中一个浏览器表现类似的样式,将其放在下层;

2. 将浏览器本身的表现出来的样式“隐藏掉”, opacity:  0; 置于上层,这样我们点击的才是 input[type="file"] 响应的事件;

3. 选择文件或改变文件后,改变显示 file 的值。

<form action="" class="activityForm"><div class="file"><label for="file">文件:</label><div class="userdefined-file"><input type="text" name="userdefinedFile" id="userdefinedFile" value="未选择任何文件"><button type="button">上传</button></div><input type="file" name="file" id="file">            </div>
</form>
.file {position: relative;height: 40px;line-height: 40px;
}
.file label {display: inline-block;
}
.userdefined-file {position: absolute;top: 0;left: 60px;z-index: 2;width: 300px;height: 40px;line-height: 40px;font-size: 0;  /*应对子元素为 inline-block 引起的外边距*/
}
.userdefined-file input[type="text"] {display: inline-block;vertical-align: middle;padding-right: 14px;padding-left: 14px;width: 220px;box-sizing: border-box;border: 1px solid #ccc;height: 40px;line-height: 40px;font-size: 14px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
}
.userdefined-file button {display: inline-block;vertical-align: middle;width: 80px;text-align: center;height: 40px;line-height: 40px;font-size: 14px;background-color: #f54;border: none;color: #fff;cursor: pointer;
}
.file input[type="file"] {position: absolute;top: 0;left: 60px;z-index: 3;opacity: 0;width: 300px;height: 40px;line-height: 40px;cursor: pointer;
}
document.getElementById("file").onchange = function() {document.getElementById("userdefinedFile").value = document.getElementById("file").value;
}

这样处理后,就在各个浏览器中表现一致了:

1. 未选择任何文件时,在 chrome 中:

2. 在选择文件后,在 firefox 中:

  

自定义input[type=file]的兼容样式相关推荐

  1. 自定义input type=file 样式的方法

    为什么80%的码农都做不了架构师?>>>    为什么要美化file控件?试想一下,别的孩子都穿戴整齐漂亮,其中两个孩子怎么都不鸟你,太不和谐了. 原始的file控件是这样的: &l ...

  2. html5 input file样式修改,css为input type=file设置自定义样式

    input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0,然后,外层用div包裹,就实现了美化功能. 主要有两点需要做: 将input type=file控件透明 将inp ...

  3. input type=file选择图片按钮样式修改与图片预览

    1 背景 通过上图我们可以看到input type=file按钮的默认样式,非常不美观,如果要自定义该按钮的样式,要如何实现呢? 2 方式1样式 input覆盖整个按钮区域,并且设置完全透明 < ...

  4. input[type=file]去掉“未选择任何文件”及样式改进

    原文地址:input[type=file]去掉"未选择任何文件"及样式改进 - 腾讯云开发者社区-腾讯云 input 标签的 file 属性,在没有选择文件的情况下,默认显示一条文 ...

  5. css input[type=file] 样式美化,input上传按钮美化

    思路: 原文出处:http://www.haorooms.com/post/css_input_uploadmh input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0, ...

  6. 使用自定义的按钮替换默认的input type='file'

    可以通过让默认的input type = 'file'按钮透明度变为0,并且让它刚好覆盖在自定义的按钮上,来实现此效果: 将它写成一个jQuery插件: (function($){$.fn.brows ...

  7. 自定义 input[type=checkbox]的样式

    自定义 input[type="checkbox"]的样式 对复选框自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现. 如果直接对复选框 ...

  8. html选择文件按钮美化,css input[type=file] 样式美化,input上传按钮美化

    我们在做input文本上传的时候,html自带的上传按钮比较丑,如何对其进行美化呢?同理:input checkbox美化,input radio美化是一个道理的,后面文章会总结. 1. 思路 inp ...

  9. 利用css对input[type=file] 样式进行美化,input上传按钮美化

    2019独角兽企业重金招聘Python工程师标准>>> <input type="file" name="fileUpload"/> ...

最新文章

  1. 机翻降重?掩饰抄袭?SCI期刊上的这些「奇言怪语」,不少来自中国作者
  2. bpnn matlab工具箱,bpnn——matlab工具箱-归一化函数 premnmx、tramnmx、postmnmx、mapminmax...
  3. BZOJ4893: 项链分赃 BZOJ4895: 项链分赃(增强版)
  4. java中那些类是线程安全的?
  5. 使用GDI+实现圆形进度条控件的平滑效果
  6. SAP Spartacus B2B页面的6个tile,url是维护在什么地方的?
  7. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
  8. TensorFlow生成.mat文件
  9. python爆破端口_挑战全网多线程批量扫描爆破弱办事端口工具,Python制造专属!...
  10. php分支结构有哪几种语句,PHP开发——分支结构
  11. Duplicate Photos Fixer Pro for Mac用户指南:我可以比较不同时间的照片吗?
  12. 数据库多表链接查询的方式
  13. 计算机怎么开启tftp服务器,Win7系统如何开启TFTP服务器?开启TFTP服务器方法
  14. 漏洞挖掘之通达OA2017任意文件上传(漏洞已失效)
  15. 3Dmax如何展UV
  16. 超人视觉助我成功转型机器视觉行业
  17. 期刊论文发表的格式详细介绍
  18. Kubernetes——KubeSphere部署worldpress应用
  19. 有的QQ临时会话要求加好友
  20. Win32: 数据类型常用最大值和最小值

热门文章

  1. linux 用户空间 和 内核空间 延时函数
  2. eclipse中web工程调试出现404的问题
  3. 深度学习与计算机视觉(二)线性SVM与Softmax分类器
  4. 机器学习实战(十四)利用SVD简化数据
  5. vgg 名人人脸图像库_您看起来像哪个名人? 图像相似度搜索模型
  6. dcase_util教程
  7. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
  8. 使用Slim框架实现基本的REST API
  9. SPI分配传感器的寄存器
  10. 如何正确入门Windows系统下驱动开发领域?