自定义文件上传控件样式-input透明法

简介:
自定义文件上传控件样式-input透明法。

作为一个刚入坑不久的程序小白,今天和一个自定义<input type="file">控件的工作斗智斗勇了一上午。通过各种膜拜大神们的资料,总算最后有了一个还算看的过去的解决方案,来记录一下。

页面中,<input type="file">控件的默认显示

在Chrome中是这样:screenshot
在IE里是这样:screenshot

要如何使它变成下面这样,点击此区域也能上传文件呢?
screenshot

原理:将input放进一个具有背景的div标签中,并且使input透明。

html代码:

<div class="inputbg"><input type="file"></div>

css代码:

.inputbg{
    background: url(bg.jpg) no-repeat;
    position: relative;
    width: 311px;
    height: 162px;
}
.inputbg input{
    position: absolute;
    top: 0;
    left: 0;
    opacity:0;
    filter:alpha(opacity=0);
    width: 311px;
    height: 162px;
    cursor: pointer;
}
</style>

这个时候浏览器里显示是这样的。

screenshot

看起来正常,但是功能上确有问题。

chrome:能够实现点击弹出文件窗口,但是在某些地方鼠标悬停的时候是 小手状,某些地方却是箭头。

IE:虽然整个区域显示都是小手状,但是点击会出现竖线光标。而且IE10-IE6里都只有一小部分区域点击的时候会出现文件窗口,其他地方点击没有反应。

问题1:去掉IE浏览器里的竖线光标。

在html代码里给input添加属性unselectable="on"。此时,html代码变为:

<div class="inputbg"><input type="file" unselectable="on"></div>

问题2:解决Chrome浏览器里部分区域鼠标悬停是箭头的问题。

添加font-size: 0;此时css代码变为:

.inputbg{
    background: url(bg.jpg) no-repeat;
    position: relative;
    width: 311px;
    height: 162px;
}
.inputbg input{
    position: absolute;
    top: 0;
    left: 0;
    opacity:0;
    filter:alpha(opacity=0);
    width: 311px;
    height: 162px;
    cursor: pointer;
    font-size: 0;
}
</style>

问题3:解决IE10-IE6里只有一小部分区域点击的时候会出现文件窗口,其他地方点击没有反应的问题。

这个时候会发现,如果将font-size的值设置的足够大,就能解决这个问题。但是会影响Chrome里的功能。所以可以针对IE10-IE6专门设置。在css添加属性font-size: 150px\9;。现在css代码变为

.inputbg{
    background: url(bg.jpg) no-repeat;
    position: relative;
    width: 311px;
    height: 162px;
}
.inputbg input{
    position: absolute;
    top: 0;
    left: 0;
    opacity:0;
    filter:alpha(opacity=0);
    width: 311px;
    height: 162px;
    cursor: pointer;
    font-size: 0;
    font-size: 150px\9;
}
</style>

到现在为止所有浏览器都显示正常了。附上完整代码:

html代码:

<div class="inputbg"><input type="file" unselectable="on"></div>

css代码:

.inputbg{
    background: url(bg.jpg) no-repeat;
    position: relative;
    width: 311px;
    height: 162px;
}
.inputbg input{
    position: absolute;
    top: 0;
    left: 0;
    opacity:0;
    filter:alpha(opacity=0);
    width: 311px;
    height: 162px;
    cursor: pointer;
    font-size: 0;
    font-size: 150px\9;
}
</style>

PS:之前看很多网上的其他资料发现,有的大神在定位的时候,用的是right: 0;还没理解是什么意思~所以还请大家多多指教~

相关文章
|
4月前
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
|
4月前
|
JavaScript 编译器 开发者
uniapp复选框自定义样式&data数据与style交互
uniapp复选框自定义样式&data数据与style交互
33 0
|
5月前
uniapp u-tabs表单如何默认选中
uniapp u-tabs表单如何默认选中
134 0
|
10月前
|
前端开发 Python
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
485 0
|
JavaScript 前端开发
css:隐藏input file标签并触发点击上传文件事件
css:隐藏input file标签并触发点击上传文件事件
452 0
css:隐藏input file标签并触发点击上传文件事件
|
前端开发 JavaScript
自定义按钮样式选择文件button“实现”file功能
前端渣渣在用到文件上传的时候,html的input file的选择文件样式太丑,更改也很不如意,很想用自定义按钮实现替代,特作笔记
456 0
自定义按钮样式选择文件button“实现”file功能
|
JSON 前端开发 JavaScript
小记录 单选框的注意点 html中字符串拼接 el-upload手动上传 表格跳转 v-for动态添加背景色 控制label标签于文本框之间的间距
小记录 单选框的注意点 html中字符串拼接 el-upload手动上传 表格跳转 v-for动态添加背景色 控制label标签于文本框之间的间距
自定义加载动画的两种实现方式
自定义加载动画的两种实现方式
[自定义服务器控件] 第一步:文本框。
最近在整理我写的几个服务器控件,发出来与大家共享吧。 我写的自定义服务器控件呢分为两个类, 一是“简单继承”控件,就是继承框架里的控件然后加点属性了、事件了什么的。 二是“功能”控件,简单的说那是符合控件,但是呢是以实现一种功能为目的地。
794 0
|
JavaScript 前端开发 安全
扩展EasyUI在页面中马上显示选中的本地图片
在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上。
2428 0