自定义input[type="file"]的样式
程序员文章站
2022-04-30 20:50:01
...
input[type="file"]的样式在各个浏览器中的表现不尽相同:
1. chrome:
2. firefox:
3. opera:
4. ie:
5. edge:
另外,当我们规定 input[type="file"] 的高度,并把它的行高设置成与其高度相等后,chrome中难看的样式出现了:
“未选择任何文件”这一行并没有竖直居中。
似乎在 firefox 中好看一些,嗯,我比较喜欢用 firefox。但是这些浏览器中的表现不一致,我们必须做兼容处理。
思路:
1. 自定义与其中一个浏览器表现类似的样式,将其放在下层;
2. 将浏览器本身的表现出来的样式“隐藏掉”, opacity: 0; 置于上层,这样我们点击的才是 input[type="file"] 响应的事件;
3. 选择文件或改变文件后,改变显示 file 的值。
代码:
html:
css: .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; }
js: document.getElementById("file").onchange = function() { document.getElementById("userdefinedFile").value = document.getElementById("file").value; }
这样处理后,就在各个浏览器中表现一致了:
1. 未选择任何文件时,在 chrome 中:
2. 在选择文件后,在 firefox 中:
上一篇: less
下一篇: PHP代码示例之电子面单打印通用解决方案
推荐阅读
-
input的type="number"在部分手机端会出现一个小按钮要如何解决?
-
去除input获取光标时的默认样式
-
WordPress中设置Post Type自定义文章类型的实例教程,wordpress实例教程
-
上传图片预览JS脚本 Input file图片预览的实现示例_javascript技巧
-
WordPress中设置Post Type自定义文章类型的实例教程
-
解决C# winForm自定义鼠标样式的两种实现方法详解
-
解决C# winForm自定义鼠标样式的两种实现方法详解
-
PHP实现可自定义样式的分页类
-
Android开发自定义TextView省略号样式的方法
-
html5中去掉input type date默认样式的方法