利用label标签和CSS美化文件上传表单

文件上传类型表单<input type=”file” />是一个让很多前端开发者纠结过的表单类型,因为它是一个无法单纯用CSS给它定义兼容的样式。上周的工作中有个批量上传图片的页面,又遇到了这个问题,于是,今天把我的解决方案奉献给大家:利用label标签与CSS共同打造一个样式可控的并兼容IE6之外主流浏览器的上传表单。
实现思路通俗易懂:

首先,我们要新增一个与file相册大小的button按钮,然后利用label为初始的file类型表单定义标注(关于label的解释与用法,此处不详解,不了解的请自行查阅HTML手册)。如此一来,一个可以触发选择文件表单的按钮就出来了。接下来,相信很多人都知道怎么做了。
有了一个可以触发file表单的按钮,只要通过绝对定位将file表单从文档流中拖出,然后用z-index属性将它的层级提升到比button按钮高,同时将file表单的透明度置为0,这样一来,file表单就正好覆盖在button按钮上了,并且可触发选择文件表单。此处有一点需要说明,FireFox中是无法通过width来设定宽度值的,所以需要用input的size值来设定file表单宽度值。
最后,附上样例中的成型代码:

 代码如下 复制代码
<DIV class=btns>
<INPUT id=input_file_molding class=btn_file_molding size=6 type=file>
 <LABEL for=input_file_molding>
<INPUT value=添加照片 type=button></LABEL>
</DIV>

CSS代码:

 代码如下 复制代码

.btns{position:relative}
.btns input{width:120px;height:30px}
.btns .btn_file_molding{position:absolute;left:0;top:0;z-index:1;border:0 none;filter:alpha(opacity=0);opacity:0}/*file的z-index要大于button*/

 代码如下 复制代码

<!--DEMO start-->
<div id="demo">

<h5>利用label标签和CSS美化文件上传表单---初始</h5>
<div class="btns">
 <input type="file" id="input_file" />
 <label for="input_file"><input type="button" value="添加照片" /></label>
</div>

<h5>利用label标签和CSS美化文件上传表单---演变</h5>
<div class="btns">
 <input type="file" class="btn_file_evolve" id="input_file_evolve" />
 <label for="input_file_evolve"><input type="button" value="添加照片" /></label>
</div>

<h5>利用label标签和CSS美化文件上传表单---成型</h5>
<div class="btns">
 <input type="file" size="6" class="btn_file_molding" id="input_file_molding" />
 <label for="input_file_molding"><input type="button" value="添加照片" /></label>
</div>

</div>
<!--DEMO end-->

几个注意的细节:
1.file表单与button按钮的高宽一定要相同;
2.因各浏览器对file表单的表现不一致,其边框一定要隐藏掉,以免出现各浏览器不兼容问题;
3.firefox中直接通过样式定义width是无效的,需要用size设置file宽度;
4.IE6可用JS为button绑定file表单的点击事件,此处不详述。

时间: 2024-09-27 01:14:34

利用label标签和CSS美化文件上传表单的相关文章

js实现文件上传表单域美化特效_javascript技巧

一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程. 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的<input type="file">元素,然后使用一个<label>元素来制作美化效果. HTML结构 该文件上传域美化效果最基本的HTML结构如下: <input type="file" name="file" id="file" class=&qu

jquery实现简洁文件上传表单样式_jquery

文章开始先告诉大家制作jquery实现简洁文件上传表单样式的简易教程. 效果图: 页面结构: <div class="uploader white"> <input type="text" class="filename" readonly="readonly"/> <input type="button" name="file" class="b

php文件上传表单摘自drupal的代码

drupal文件上传表单的例子 复制代码 代码如下: function upload_form() { $form = array(); // If this #attribute is not present, upload will fail on submit $form['#attributes']['enctype'] = 'multipart/form-data'; $form['file_upload'] = array( '#title' => t('Upload file'),

php文件上传表单摘自drupal的代码_php技巧

drupal文件上传表单的例子 复制代码 代码如下: function upload_form() { $form = array(); // If this #attribute is not present, upload will fail on submit $form['#attributes']['enctype'] = 'multipart/form-data'; $form['file_upload'] = array( '#title' => t('Upload file'),

CSS自定义文件上传按钮

原文:CSS自定义文件上传按钮 今天一同事问我文件上传按钮的问题,情况是这样的,他页面上有3个按钮,分为左中右三个,左边的位按钮甲,右边的位按钮乙,而中间的就是个文件选择按钮,情况大概是这个样子的: 两边的按钮都有了样式,但中间的选择文件的样式死活调不出来,于是我就同他一块解决,后来经过自己设置width,height折腾无果,再求助google终于找到了解决办法,这个方法是这样的: 用一个标签套着文件域,然后调整文件域外边的元素,设置成按钮样式,然后,在把文件域"隐藏"掉(这里的隐藏

js动态创建上传表单通过iframe模拟Ajax无刷新的具体实现

 这篇文章主要介绍了js动态创建上传表单通过iframe模拟Ajax无刷新的具体实现,需要的朋友可以参考下  代码如下: <script>  window.onload=function(){  upfile('file.php');  }      /*  ** url 路径  **/  function upfile(url){  //创建iframe  var iframe = document.createElement("iframe");  document.b

带有图片预览功能的上传表单完整HTML

  带有图片预览功能的上传表单,完整的HTML代码如下所示 <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"> <title>带有图片预览功能的上传表单webjx.com</title> <script> functionviewmypic(mypic,imgfile){ if(imgfi

java-form上传表单怎么把上传的参数也传到action

问题描述 form上传表单怎么把上传的参数也传到action 我今天写了一个发布新闻的表单,有一些参数,还有图片,我想上传到后台,可是有一个属性怎么也传不过去,一直是null,怎么解决呢? 解决方案 form表单提交上传附件 解决方案二: 表单中元素的name和action中的属性名字一样就行了,action中要有set方法 解决方案三: form会自动将里面的东西同上传上去,看看是不是名字写错了 解决方案四: serialize()对表单进行序列化一下

利用apache的FileUpload组件实现文件上传

1.可以实现一个或多个文件的上传,也可以接收普通的form表单数据. 2.简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以.偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试. 关键点: 1.提交文件上传的form的method属性为post,enctype属性为multipart/form-data. 2.input标签需要有name属性,否则取不到内容. 看看servlet的实现,注释已经很详细了: Java代码 package org.xxm; import j