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>

修改input file 文件上传的样式的更多相关文章

  1. input file 文件上传标签的样式美化

    input file 文件上传标签的样式美化 将<input type="file">的透明度设置为0: <input type="file" ...

  2. js 实现 input file 文件上传

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  3. input type='file'文件上传自定义样式

    使用场景: 在未使用UI库时免不了会用到各种上传文件,那么默认的上传文件样式无法达到项目的要求,因此重写(修改)上传文件样式是必然的,下面的效果是最近项目中自己写的一个效果,写出来做个记录方便以后使用 ...

  4. PHP 多input file文件上传

    前台html jquery代码 后台PHP处理 前台html <form id="form" method="post" enctype="mu ...

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

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

  6. input file文件上传样式

    <style>    .file-group {        position: relative;        width: 200px;        height: 80px;  ...

  7. js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...

  8. [置顶] js 实现 <input type="file" /> 文件上传

    在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但是它长得又丑.浏览的字样不能换,我们一般会用让,<input type ...

  9. 更改file文件上传默认CSS样式

    前言: 多数时候我们需要表单上传文件,如图片.但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. & ...

随机推荐

  1. 三小时攻克 Kubernetes!

    我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说——牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻. 以下为译文: 为 ...

  2. JS 正则表达式 控制文本框只能输入中文、英文、数字与指定特殊符号

    JS 正则表达式 控制文本框只能输入中文.英文.数字与指定特殊符号(屏蔽表情输入) onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 只能输入中文: ...

  3. codevs 1200:同余方程

    题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含两个正整数 a, b,用 一个 空 ...

  4. linux安装mysql(yum)

      申明,不要用root安装   步骤: 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch ...

  5. poj2826(细节,计算几何)

    题目链接:https://vjudge.net/problem/POJ-2826 题意:平面中摆两根木棍,雨水从上垂直下落,问木棍中能乘多少水. 思路: 细节很多,坑QAQ.. 首先不相交时肯定为0. ...

  6. [转帖]强大的strace命令用法详解

    强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...

  7. [转帖]IIS7配置Gzip压缩

    IIS7配置Gzip压缩 https://www.cnblogs.com/coce/p/6804373.html   II7中自带了gzip功能,理论上应该比ii6配置起来应该简单一点,但是容易出的问 ...

  8. Mac安装postgresql和卸载PostgreSQL

    1.homebrew安装 brew install postgresql 2.初始化 initdb /usr/local/var/postgres 3.创建数据库及查看数据库 (1)先创建db. cr ...

  9. # 滚动Hash

    滚动Hash 假设字符串\(C=c_1*c_2*...c_m\),定义Hash函数\(H(C)=(C_1*b^{m-1}+C_2*b^{m-2}+...C_m*b^{0})mod\; h\) 从k开始 ...

  10. 用python打开文件夹的三种方式

    一.利用explorer.exe import os # 利用explorer.exe执行 start_directory = r'C:\代码\软件包' os.system("explore ...