自定义文件上传控件样式-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;还没理解是什么意思~所以还请大家多多指教~

相关文章
|
2月前
|
JavaScript 前端开发 API
【每周一个小技巧】如何自定义客服、生活号组件的样式
【每周一个小技巧】如何自定义客服、生活号组件的样式
21 2
|
3月前
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
28 5
|
4月前
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
|
4月前
|
JavaScript 编译器 开发者
uniapp复选框自定义样式&data数据与style交互
uniapp复选框自定义样式&data数据与style交互
37 0
|
10月前
|
前端开发 Python
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
492 0
|
JavaScript 前端开发
css:隐藏input file标签并触发点击上传文件事件
css:隐藏input file标签并触发点击上传文件事件
458 0
css:隐藏input file标签并触发点击上传文件事件
|
前端开发 JavaScript
自定义按钮样式选择文件button“实现”file功能
前端渣渣在用到文件上传的时候,html的input file的选择文件样式太丑,更改也很不如意,很想用自定义按钮实现替代,特作笔记
458 0
自定义按钮样式选择文件button“实现”file功能
|
JSON 前端开发 JavaScript
小记录 单选框的注意点 html中字符串拼接 el-upload手动上传 表格跳转 v-for动态添加背景色 控制label标签于文本框之间的间距
小记录 单选框的注意点 html中字符串拼接 el-upload手动上传 表格跳转 v-for动态添加背景色 控制label标签于文本框之间的间距
自定义加载动画的两种实现方式
自定义加载动画的两种实现方式
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
600 0
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。