不得不说input file文件域真是丑的一*。。。,与页面中的元素差异相差太大,而且各个浏览器的显示效果还不一样,真不想用这玩意,真头疼。好吧,说点正经的,来聊一聊怎么美化input file文件域。
1.最开始的做法
我一开始的想法很暴力,隐藏文件域,设置一个按钮,点击按钮用jquery的trigger方法模拟input file文件域的click事件。结果是FF11,IE8,IE7都可以触发click事件,FF11可以触发input file的onchange,IE8以及IE7无法触发onchange,也就是input file的value为空,webkit核心的chrome和safari根本连click都无法触发,值得一提的是稍老版本的chrome倒是可以触发click。有兴趣的可以试试这个方法。
2.改进的方法
说起来这是做一个图片按钮获得的灵感。因为要提交表单,又懒得用js,所以就将submit按钮放到了有图片背景的容器里面。按钮控件还算好调教,设为透明,width、height都设为100%,绝对定位blahblah,好用极了,也很有效。我就想文件域是不是也可以这么搞呢,于是就写了个demo。
<span
class="button">
<a>上传</a>
<input type="file" name="file" id="file" class="file" />
</span>
.button{
width:100px;
height:50px;
line-height:50px;
border:1px
solid #cccccc;
background:#eeeeee;
border-radius:3px;
position:relative;
display:inline-block;
text-align:center;
overflow:hidden;
}
.file{
filter:alpha(opacity:
0);
opacity:0;
position:absolute;
left:0;
top:0;
width:100%;
height:100%;
display:block;
cursor:pointer;
}
在各个浏览器查看了效果,ff根本就不鸟你的height100%,其他浏览器均ok,感觉很蛋疼。好吧,那就给file加大字体好了,只要字体高度大于按钮的高度就好了。你也可能发现了,虽然设置了cursor,但是各个浏览器的还是不能一致的显示小手,设为不透明,fontsize默认,看了下各个浏览器下的效果,如下图:
好吧,FF下只有文件域的按钮是小手图标,chrome和safari正好相反,ie倒是不错,显示效果与预期一致。如果想要显示效果一致,我想我们可以用一些hack的方法,想到这里,真的感觉想要在地上滚来滚去。。正如图上所示,我们完全可以把不能显示小手图标的部分通过绝对定位隐藏掉。FF是文本框部分,chrome及safari是button部分,增加文件域的width及height我们就往左上角移动就好了。通过我蛋疼的测试,ff根本就不鸟文件域的文本框部分height和width属性,倒是可以正确的显示button的height,所以只要把文本框从左侧遮住就好了。对于webkit核心,从上方遮住按钮就好了。通过蛋疼的测试(font-size为14px)绝对定位如下:
left:-155px;
top:-22px;
width:500%;
height:200%;
cursor:pointer;
font-size:14px;
此时为了照顾ff,容器宽度就只能设置为固定的65px才能正好显示完全文件域的按钮部分。但是此时问题又来了,ie8及ie7中文件域中的文本框部分必须双击才能打开选择文件窗口,都蛋疼的走到这一步的了,看来不再差一点更蛋疼的方法了—-firefox hack。哇哈哈,ff也有这一天。。我们把上面的left设为0,加入如下代码
@-moz-document
url-prefix(){
.file{
left:-155px;
}
}
这下就大功告成了,蛋疼版的完美美化文本域,好吧,提供两个demo大家可以看下效果,onchage也可以触发的。
分享到:
相关推荐
"表单事件jQuery文件域美化File Style Demo演示"提供了一个解决方案,通过jQuery库对文件域进行美化,提升用户体验。 jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画以及Ajax交互等任务。在...
本文将探讨7种时尚的文件上传表单域美化特效,提升用户体验,使文件上传变得更具吸引力。 1. **隐藏默认样式**: 首先,我们可以使用CSS来隐藏默认的文件选择按钮,然后用自定义的图形或文字替换它。通过设置 `...
一款效果非常时尚的文件上传表单域美化特效,下面给出制作的简要教程。 先上几个效果饱饱眼福: 使用方法 这些文件上传域的美化使用的方法都是隐藏原生的<input type=”file”>元素,然后使用一个元素来...
在网页设计中,有时我们需要对文件域(`<input type="file">`)的样式进行定制,以符合整体页面的设计风格。然而,由于浏览器的安全限制,文件域的默认样式往往难以更改,尤其是在早期版本的IE和Firefox中。本文将...
关键是给file文件域给了font-size,设置一个比较大的值,使其表单大写发生改变(各浏览器外观不同,但大写都改变了)如下图: input{font-size:100px;} 再用position定位,和透明度达到自己想要的效果。具体代码如下...
在网页设计中,CSS美化`<input type="file">`元素常常是一项挑战,因为不同的浏览器对这个元素的默认样式和行为处理方式各异。为了解决这个问题,开发者们需要找到一种跨浏览器的解决方案来统一表现。这里介绍一种纯...
这通常包括`<link>`标签引用Bootstrap的CSS文件,以及`<script>`标签引入jQuery和Bootstrap的JS文件。 接着,创建一个`<form>`元素,并在内部使用`.container`类来包裹整个表单,保证其居中对齐。然后,用`.row`类...
它可能包含HTML文件、CSS文件和可能的JavaScript文件,用于演示如何创建和美化搜索域。深入研究这些文件,你可以学习到更多关于如何在实际项目中实现高级搜索域功能的技巧和最佳实践。 总的来说,搜索域是网页界面...
在这个案例中,`<input type="file">`元素被用来让用户选择图片,然后FileReader API用于读取选中的文件,并可以将图片数据转换为Base64编码。 3. **Base64编码**: 在上传过程中,图片数据通常会被转换成Base64...
- **文件域 (file)**:允许用户选择本地文件进行上传。 - **复选框 (checkbox)**:允许多选,如: ```html <input type="checkbox" name="agree" value="yes"> 我同意服务条款 ``` - **单选按钮 (radio)**:...
此外,`<input type="file">`用于创建文件上传功能,常用于让用户上传个人照片或其他文件。 复选框(`<input type="checkbox">`)和单选按钮(`<input type="radio">`)提供多选和单选选项,比如选择喜欢的音乐类型...
- **隐藏域**:`<input type="hidden">` - **按钮**:`<input type="button">` ##### 示例:文本框与按钮 在题目给出的部分内容中,`<input type=”botton” name=”…” value=”…” checked/>` 存在一些错误,...
`<input type ="checkbox" name = 'jishi' value = "java" />`,文件上传 `<input type = "file" name="myfile" />`,下拉列表 `<select>` 和多行文本框 `<textarea>`。 在表单域中,`name` 属性是至关重要的,因为...
"Foobar2000黑化玻璃版"则是对原始软件界面的一种美化风格,它采用了黑色主题,搭配半透明效果,为用户提供了一种现代且优雅的视觉感受。 1. ** Foobar2000的核心特性:** - **高保真播放**:Foobar2000支持多种...
`<input type="hidden">`用于创建隐藏域,不显示在页面上。 CSS(层叠样式表)用于美化HTML页面,通过类选择器`class`来为元素添加样式。例如,`<p class="myClass">`将使段落应用名为`myClass`的样式。在HTML元素...
- 文件域`<input type="file">` - 邮箱`<input type="email">` - 网址`<input type="url">` - 数字`<input type="number">` - 滑块`<input type="range">` - 搜索`<input type="search">` - **高级用法**:...
3. 表单是网页互动的重要组成部分,基本元素包括询问或请求信息的标签、供访问者输入信息的域、"提交" 和 "重置" 按钮,以及处理表单数据的脚本或程序。默认模板的后缀名是 .dwt,FTP(文件传输协议)常用于远程...
- **隐藏域**:`<input type="hidden">`,用于存储一些不需要显示给用户的数据。 - **属性**:`value`(存储的值)。 - **文本选择框**:`<input type="file">`,用于让用户选择文件并上传。 - **属性**:无特殊...