欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

自定义input type=file 样式的方法 定制上传按钮样式 自己亲自做的 有大用 有大大用

shiping1 的头像

自己亲自做的 有大用

html代码

<div class="input-file-div">

          <input type="hidden" name="slide_ids[]" value="439">

          <input type="text" name="textfields[]" class="text-for-file" value="banner_1.jpg">

          <input type="button" class="btn btn-default btn-xs" value="浏览...">

         <input type="file" class="input-file" name="slide_pics[]">

         <button type="button" class="btn btn-default btn-xs btn-delete-file">删除</button>

</div>

css 代码 (其实里面使用了bootstrap)

.input-file-div {
  1.    padding-top5px;

  2.    padding-bottom5px;

  3.    padding-left5px;

  4.    border1px solid #999;

  5.    positionrelative;

.text-for-file {
  1.    height22px;

  2.    border1px solid #cdcdcd;

  3.    width240px;

.btn-group-xs>.btn, .btn-xs {
  1.    padding1px 5px;

  2.    font-size12px;

  3.    line-height1.5;

  4.    border-radius3px;

.input-file {
  1.    positionabsolute;

  2.    top0;

  3.    left0px;

  4.    height34px;

  5.    filteralpha(opacity:0);

  6.    opacity0;

  7.    width300px;













下面是自己亲自测试的代码 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>定义input type="file" 的样式</title>
<style type="text/css">
body{ font-size:14px;}
input{ vertical-align:middle; margin:0; padding:0}
.file-box{ position:relative;width:340px}
.txt{ height:22px; border:1px solid #cdcdcd; width:180px;}
.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:24px; width:70px;}
.file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px }
</style>
</head>
<body>
<div class="file-box">
  <form action="" method="post" enctype="multipart/form-data">
 <input type='text' name='textfield' id='textfield' class='txt' />  
 <input type='button' class='btn' value='浏览...' />
    <input type="file" name="fileField" class="file" id="fileField" size="28" onchange="document.getElementById('textfield').value=this.value" />
 <input type="submit" name="submit" class="btn" value="上传" />
  </form>
</div>
</body>
</html>

 



为什么要美化file控件?试想一下,别的孩子都穿戴整齐漂亮,其中两个孩子怎么都不鸟你,太不和谐了。

    原始的file控件是这样的:

    别以为这个是由一个text和一个button组合成的,它是一个控件,html代码为:
 

复制代码
代码如下:

<input type="file" name="file" /> 


既然这样我们就用一个text和一个button来显示这个file的样式,html代码是这样: 

复制代码
代码如下:

<div class="file-box"> 
<form action="" method="post" enctype="multipart/form-data"> 
<input type='text' name='textfield' id='textfield' class='txt' /> 
<input type='button' class='btn' value='浏览...' /> 
<input type="file" name="fileField" class="file" id="fileField" size="28" onchange="document.getElementById('textfield').value=this.value" /> 
<input type="submit" name="submit" class="btn" value="上传" /> 
</form> 
</div> 


外面的一层div是为了给里面的input提供位置参考,因为写样式的时候需要相对定位,使真正的file控件覆盖在模拟的上面,然后隐藏掉file控件(即使file控件不可见),所以css代码是这样的: 

复制代码
代码如下:

.file-box{ position:relative;width:340px} 
.txt{ height:22px; border:1px solid #cdcdcd; width:180px;} 
.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:24px; width:70px;} 
.file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px } 


 

效果图:
点击查看原图
最后留下一个DEMO:点击查看demo
 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>定义input type="file" 的样式</title>
<style type="text/css">
body{ font-size:14px;}
input{ vertical-align:middle; margin:0; padding:0}
.file-box{ position:relative;width:340px}
.txt{ height:22px; border:1px solid #cdcdcd; width:180px;}
.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:24px; width:70px;}
.file{ position:absolute; top:0; right:80px; height:24px; filter:alpha(opacity:0);opacity: 0;width:260px }
</style>
</head>
<body>
<div class="file-box">
  <form action="" method="post" enctype="multipart/form-data">
 <input type='text' name='textfield' id='textfield' class='txt' />  
 <input type='button' class='btn' value='浏览...' />
    <input type="file" name="fileField" class="file" id="fileField" size="28" onchange="document.getElementById('textfield').value=this.value" />
 <input type="submit" name="submit" class="btn" value="上传" />
  </form>
</div>
</body>
</html>

来自 http://www.jb51.net/web/39559.html

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

 84944次浏览

由于明天公司组织出去游玩,今天把这两天的博客都写了吧,今天的内容是input[type=file] 样式美化,input上传按钮美化。

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

思路:

input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0,然后,外层用div包裹,就实现了美化功能。

代码如下:

DOM结构:

<a href="javascript:;" class="a-upload">
    <input type="file" name="" id="">点击这里上传文件
</a>

<a href="javascript:;" class="file">选择文件
    <input type="file" name="" id="">
</a>

CSS样式1:

/*a  upload */
.a-upload {
    padding: 4px 10px;
    height: 20px;
    line-height: 20px;
    position: relative;
    cursor: pointer;
    color: #888;
    background: #fafafa;
    border: 1px solid #ddd;
    border-radius: 4px;
    overflow: hidden;
    display: inline-block;
    *display: inline;
    *zoom: 1
}

.a-upload  input {
    position: absolute;
    font-size: 100px;
    right: 0;
    top: 0;
    opacity: 0;
    filter: alpha(opacity=0);
    cursor: pointer
}

.a-upload:hover {
    color: #444;
    background: #eee;
    border-color: #ccc;
    text-decoration: none
}

样式2:

.file {
    position: relative;
    display: inline-block;
    background: #D0EEFF;
    border: 1px solid #99D3F5;
    border-radius: 4px;
    padding: 4px 12px;
    overflow: hidden;
    color: #1E88C7;
    text-decoration: none;
    text-indent: 0;
    line-height: 20px;
}
.file input {
    position: absolute;
    font-size: 100px;
    right: 0;
    top: 0;
    opacity: 0;
}
.file:hover {
    background: #AADFFD;
    border-color: #78C3F3;
    color: #004974;
    text-decoration: none;
}

修改后如下:

enter image description here

样式二:

enter image description here

备注:对于HTML5之input:file,还可以控制上传的类型的,但是这个是html5的,低版本浏览器不支持,详情请看:HTML5的 input:file上传类型控制 http://www.haorooms.com/post/input_file_leixing

美化后显示文件名

上面美化,把默认显示的文件名也给隐藏掉了,那么如何显示文件名称呢?没关系,我们可以用jquery来获取文件的文件名。

我们可以写个change事件

$(".a-upload").on("change","input[type='file']",function(){
    var filePath=$(this).val();
    if(filePath.indexOf("jpg")!=-1 || filePath.indexOf("png")!=-1){
        $(".fileerrorTip").html("").hide();
        var arr=filePath.split('\\');
        var fileName=arr[arr.length-1];
        $(".showFileName").html(fileName);
    }else{
        $(".showFileName").html("");
        $(".fileerrorTip").html("您未上传文件,或者您上传文件类型有误!").show();
        return false 
    }
})

其他input美化文章

关于 input checkbox和radio样式美化,我也写了一篇文章,请看 http://www.haorooms.com/post/css_mh_ck_radio

还有input search 右侧有个关闭按钮的美化,可以看http://www.haorooms.com/post/qd_ghfx 第五条。

来自 http://www.haorooms.com/post/css_input_uploadmh

 

0

之前一直都是用CSS做一个按钮,然后将 <input type="file" /> 透明度设置为0,覆盖在这个按钮之上,这样点击区域就能弹出选择文件的窗口。

可是,这种情况原按钮的hover和active效果就没了。
前几个月看到一篇文章,好像是控制input字体大小实现的,同时能保留后方的自定义按钮效果,不过找不到了。
不知道大家有什么解决方法?

7 个回答

5
采纳

以下是对bootstrap的file的包装,思路供参考。

<input id="lefile" type="file" style="display:none">
<div class="input-append">
   <input id="photoCover" class="input-large" type="text">
   <a class="btn" onclick="$('input[id=lefile]').click();">Browse</a>
</div>




来自  https://segmentfault.com/q/1010000000156312 


普通分类: