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

简介:
自定义文件上传控件样式-input透明法。
AI 代码解读

作为一个刚入坑不久的程序小白,今天和一个自定义<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>
AI 代码解读

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

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>
AI 代码解读

问题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>
AI 代码解读

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

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>
AI 代码解读

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

目录
打赏
0
0
0
0
1
分享
相关文章
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
tkinter模块高级操作(一)—— 透明按钮、透明文本框、自定义按钮及自定义文本框
876 0
表单的默认样式
【10月更文挑战第17天】
39 1
扩展uview复选组件库支持自定义图片+自定义内容
扩展uview复选组件库支持自定义图片+自定义内容
142 6
关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等
 关于CKEditor的一个配置整理,改文件为config.js: 文件内容如下: /** * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/
2673 0
扩展EasyUI在页面中马上显示选中的本地图片
在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上。
2553 0
精通CSS+DIV网页样式与布局--设置表单和表格
        表格和表单是网页中非常重要的两个元素,在上篇博客中,我们简单的介绍了CSS的页面背景设置,今天小编继续来介绍CSS的相关知识,在我们的CSS中如何设置表格和表单,首先,来看一张思维导图,通过图简单的预览一下该博文主要讲解哪些CSS...
1235 0
【每周一个小技巧】如何自定义客服、生活号组件的样式
【每周一个小技巧】如何自定义客服、生活号组件的样式
113 8
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
856 0
Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
|
10月前
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整
【sgDragSize】自定义组件:自定义拖拽修改DIV尺寸组件,适用于窗体大小调整