Web页面中,在需要上传文件时基本都会用到<input type="file">元素,它的默认样式:

chrome下:

IE下:

不管是上面哪种,样式都比较简单,和很多网页的风格都不太协调。

根据用户的需求,设计风格,改变其显示样式的场合就比较多了。

如果,要像下面一样做一个bootstrap风格的上传按钮该如何实现。

搭建上传按钮所需的基本元素

        <span class=""><span>上传</span><input type="file"></span>

效果(chrome):

现在看到的分两行显示。

外围之所以没有换成div,是因为在IE7-浏览器中,只要不是设成inline,它的宽度全都会撑开到能撑到的宽度。如果设成inline,那元素的宽度就无法调整,所以这里用span然后设成inline-block能解决这样的问题。

增加样式将两行变成一行

        <span class="fileinput-button""><span>上传</span><input type="file"></span>

css:

        .fileinput-button {position: relative;display: inline-block;}.fileinput-button input{position: absolute;right: 0px;top: 0px;}

效果:

默认是没有浅蓝色边框,只有鼠标去点击后,才会显示,这里显示出来是为了看得清楚。

通过将外围的span设成display:relative,将input设成display:absolute的方式让他们都脱离文档流。

通过将input限定在外围的span中进行绝对定位的方式让本来两行显示的变成一行显示。

实际上这里已经overflow了,真正的宽度是“上传”文字的宽度,修改fileinput-button样式增加overflow: hidden

        .fileinput-button {position: relative;display: inline-block;overflow: hidden;}

效果:

很有意思,能看到上边后右边的蓝色边框了吧,其实就是把左边和下边的溢出部分给隐藏了。

这时候用鼠标去点击“上传”两个字实际上是点在input上,能够显示“打开”对话框,因为显示层级上input要比“上传”更靠近用户。

注意input定位中的right,为什么不用left定位。

当我们改成left后。

效果(chrome):

效果(IE):

在chrome下input元素中的选择按钮露出来,但是没关系,可以通过后面的设透明的方式把它透明掉。

但是在IE下确是会把输入框露出来,关键是鼠标移到输入框上时,指针会变成输入状态,这个就很没法处理了。

通过right的定位方式把输入框移到左边去的方式,可以在IE下回避出现鼠标指针变成输入态的情况。

透明input元素

css:

        .fileinput-button {position: relative;display: inline-block;overflow: hidden;}.fileinput-button input{position: absolute;left: 0px;top: 0px;opacity: 0;-ms-filter: 'alpha(opacity=0)';}

效果:

input完全不见了踪影,点击“上传”依然有效。

可以支持IE8+。

引入bootstrap,并添加按钮样式

head中增加外部css和js的引用。

    <link rel="stylesheet" href="bootstrap/bootstrap.css"><link rel="stylesheet" href="bootstrap/bootstrap-theme.css"><script src="bootstrap/jquery-1.10.2.js"></script><script src="bootstrap/bootstrap.js"></script>

增加按钮样式。

        <span class="btn btn-success fileinput-button"><span>上传</span><input type="file"></span>

效果:

解决大小问题

如果为fileinput-button样式增加width:100px,将外围的span设成宽100px,会发现点击下部是没有反应的,原因就是input是默认大小,无法覆盖下部。

可以通过为input设置一个很大的字号将其撑大的方式来解决覆盖问题,这里就设个200px。

       .fileinput-button input{position:absolute;right: 0px;top:0px;opacity: 0;-ms-filter: 'alpha(opacity=0)';font-size: 200px;}

这样就能解决覆盖问题。

完成。

参考:jQuery-File-Upload

如果是要兼容IE7-可以参考jQuery-File-Upload中的写法。

代码:

<!DOCTYPE html>
<html>
<head><title></title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><link rel="stylesheet" href="bootstrap/bootstrap.css"><link rel="stylesheet" href="bootstrap/bootstrap-theme.css"><script src="bootstrap/jquery-1.10.2.js"></script><script src="bootstrap/bootstrap.js"></script><style>.fileinput-button {position: relative;display: inline-block;overflow: hidden;}.fileinput-button input{position:absolute;right: 0px;top: 0px;opacity: 0;-ms-filter: 'alpha(opacity=0)';font-size: 200px;}</style>
</head>
<body style="padding: 10px"><div align="center"><span class="btn btn-success fileinput-button"><span>上传</span><input type="file"></span></div>
</body>
</html>

转载于:https://www.cnblogs.com/gs97/p/7879624.html

修改input file 文件上传的样式相关推荐

  1. html 美化input file,文件上传input file简便美化方案(css)

    file,css 文件上传input在各个浏览器里表现形式都不一样: ie6 ie7,8,9 ff chrome 这里介绍一种简单实用的,在各种浏览器下表现一致的美化方法,效果如下: ie6无法美化, ...

  2. Web前端 input file 文件上传优化

    前言: 在Web开发过程中,当项目做得越来越大时,文件上传功能也会被使用得非常多,之前项目经理反馈一个问题,就是当点击[选择上传文件]按扭时,弹出文件浏览框总是很慢,点击上传按扭后,要很久文件选择窗口 ...

  3. input file 文件上传,js控制上传文件的大小和格式

    文件上传一般是用jquery的uploadify,比较好用.后面会出文章介绍uploadify这个插件. 但是,有时候为了偷懒,直接就用input 的file进行文件和图片等的上传,input fil ...

  4. input file文件上传(enctype)

    一.浏览器post表单提交 通常的input组件表单提交时,按照form属性提交的其中enctype="application/x-www-form-urlencoded"是默认值 ...

  5. input file文件上传_微服务间的文件上传与下载-Feign

    一.文件上传 (1)服务提供者 使用一个MultipartFile接收上传的文件 /** (2)Feign的Client接口 服务门面-feign的接口 pom.xml <dependencie ...

  6. input file 文件上传标签美化

    input 标签通过设置 type 属性为 file,则可以选中文件,通过 accept 设置上传类型 <label class="control-label file"&g ...

  7. html文件上传 用到美化,文件上传html样式美化

    最近学习jquery file upload插件,以为文件上传按钮样式代码能够拿来一用,适当作了些美化.css 图片选择 .fileinput-button { position: relative; ...

  8. 【vue开发问题-解决方法】(九)使用element upload自定义接口上传文件,input多文件上传

    [vue开发问题-解决方法](九)使用element upload自定义接口上传文件,input多文件上传 参考文章: (1)[vue开发问题-解决方法](九)使用element upload自定义接 ...

  9. 安卓机 input file图片上传无反应解决方案

    安卓机 input file 图片上传无反应解决方案: <input id="btnUpload" type="file" /> 加上以下三个属性就 ...

  10. 组态nodejs的后台server.js,新增post接口,接受前端input file模式上传文件,并接收保存到服务器

    如何解决node.js中fs.rename文件跨域问题_OnlyLove_KD的博客-CSDN博客前言   最近在学习node.js,今天在写一个文件上传的功能,调用fs.rename上传文件时程序报 ...

最新文章

  1. 输出1/n(是循环小数的,只输出第一个循环节)
  2. 2019牛客暑期多校训练营(第五场)F - maximum clique 1 (最大团:补图最大独立集)
  3. matlab第六章课后答案,matlab作业第6章
  4. 让IT不加班,让业务不等待,一文讲透自助式分析的前世今生
  5. schedule()函数的调用时机(周期性调度)
  6. BMFont制作字体图集
  7. java大嘴鱼游戏代码_Java小游戏吃豆豆源代码
  8. Scala安装教程(最详细教程)
  9. 禁止AutoCAD联网
  10. vs2017配置 opengl + glfw + glad 环境
  11. java脚本错误修复,win10系统使用iE浏览器时不断出现Java活动脚本功能出错问题的操作技巧...
  12. liteon460w服务器电源管理系统,【LITEON PS-2112-5L 1200W C6100 C6220 C6220I服务器电源】价格_厂家 - 中国供应商...
  13. 数学建模之蒙特卡洛算法
  14. Vue Browserslist: caniuse-lite is outdated.
  15. [P1919 【模板】A*B Problem升级版(FFT快速傅里叶)(高精乘板子,FFT板子)
  16. JS和Android互调(调用相机拍照)
  17. 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务
  18. 计算机前置usb无法使用,电脑前置usb3.0接口没反应怎么办
  19. Surface Pro 4装Ubuntu
  20. 4g物联网卡赋能智能设备 加快社会智能化进程

热门文章

  1. Atitit java ftp client sumup apache common net jar 1.1. 协议解析 1 1.2. 读取文件 1 2. } 3 1. 下载文件 ftpCli
  2. Atitit 代码要写的漂亮 老板要的是效率 冲怎么办突 目录 1. 代码要写高效,写漂亮,要考虑可扩展性和安全性,到了公司才发现老板要的是效率,不在乎你的代码写的是否高效,安全,是否具有可扩展性
  3. atitit prj mnrs 项目中的几种经理角色.docx
  4. Julia: 通过简单实践理解机器学习概念(flux.jl)
  5. 兴业证券:主动偏股型基金评价体系
  6. Rust: rev()、Vec、其它
  7. 机会难得 | 这家上市公司终于招人了
  8. 热聘:英特尔音频Firmware-Linux内核驱动
  9. 海量小文件的开源存储方案选型建议
  10. 【手写字母识别】基于matlab GUI模板匹配手写大写字母识别【含Matlab源码 115期】