怎样用纯HTML和CSS更改默认的上传文件按钮样式


发布者 ourjs  发布时间 1414485724768
关键字 大话编程  分享 
如果你曾经试过,你就会知道,用纯CSS样式加HTML实现统一的上传文件按钮可能会很麻烦。看看下面的不同浏览器的截图。很明显的,他们长得很不一样。



上传文件按钮

我们的目标是创造一个简洁,用纯CSS实现的,在所有浏览器里的样子和布局是一样的上传文件按钮。我们可以这样: 
步骤1.创建一个简单的HTML标记 

<div class="fileUpload btn btn-primary">
    <span>Upload</span>
    <input type="file" class="upload" />
</div>

第2步:CSS: 有点棘手了

.fileUpload {
position: relative;
overflow: hidden;
margin: 10px;
} .fileUpload input.upload { position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
font-size: 20px;
cursor: pointer;
opacity: 0;
filter: alpha(opacity=0);
}


为简单起见,我使用应用了BootstrapCSS样式的按钮  (div.file-upload)。 

演示: 




这样就创建了一个样式统一的上传按钮。

上传按钮+显示选中的文件地址


如果你想寻显示上传文件的路径,纯CSS的做不到这一点。需要借助一点JS,下面的代码片段可以帮助你。 

将HTML修改一下::

<input id="uploadFile" class="form-control" placeholder="Choose File" disabled="disabled" />
<div class="fileUpload btn btn-primary">
    <span>Upload</span>
    <input id="uploadBtn" type="file" class="upload" />
</div>
并添加上JS代码:

JavaScript: 

document.getElementById("uploadBtn").onchange = function () {
    document.getElementById("uploadFile").value = this.value;
};


演示:







回复 (7)
  • #
  • #1 452125301@qq.com 1414557957720

    之前有研究过这个。 用了2个方案。

    1. 用户点击任意元素后,触发input,这样的话,任何元素都支持上传,问题是不兼容。
    2. 覆盖在元素顶层,然后input透明度调整为0,目前使用的是这种。

    我做的前端压缩图片的插件,用的就是第二种方案。 http://think2011.github.io/localResizeIMG-2/

  • #2 龚什尸 1414572795374

    @452125301@qq.com #0

    很高级

  • #3 邢万让 1446546129900

    推荐使用http://buttoncssgenerator.com ,可以生成各种效果的按钮css,包括圆角、渐进颜色、阴影,并兼容各大主流浏览器

  • #4 吕年古 1463039543934

    不能用啊

  • #5 刘友再 1524217482893

    看到你们写的垃圾真想骂人

  • #6 sucaihuo 1525184067059

    这个css3按钮样式我收集了好多 http://www.sucaihuo.com/js/166-0-0-0

  • #7 haohuier 1563759718096

    嗯,这个简单

微信扫码 立即评论