input文件域的美化

不得不说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也可以触发的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS可以用来美化input file样式,具体方法如下: 1. 隐藏默认的input file样式 ```css input[type="file"] { display: none; } ``` 2. 创建一个自定义的按钮样式 ```css .custom-file-upload { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; } ``` 3. 将自定义按钮input file关联起来 ```html <label for="file-upload" class="custom-file-upload"> 选择文件 </label> <input id="file-upload" type="file"/> ``` 这样就可以实现一个简单的input file样式美化了。当然,还可以根据需求进行更复杂的样式设计。 ### 回答2: 在Web开发中,我们经常使用input file标签来让用户上传文件。然而,由于input file的样式比较简单单调,我们往往需要用CSS来美化样式,使其更符合网站的视觉风格,以增强用户的体验。在以下的回答中,我将介绍几种常见的CSS input file样式美化方法。 1. 纯CSS样式美化 在这种方法中,我们通过CSS样式对input file标签进行美化。一般来说,我们需要通过input[type=file]这个CSS选择器来选中input file标签。然后,我们可以通过设置样式来改变这个标签的外观,例如修改背景颜色,设置文字样式,以及添边框、阴影等效果。 2. 借助JavaScript库实现 除了纯CSS样式美化,我们还可以借钩JavaScript库来实现input file样式的美化。比如,利用jQuery的filestyle插件,我们可以在input file标签的旁边添一个按钮,使得用户点击按钮后弹出文件选择框。这样在视觉效果上会更美观,用户操作也更方便。 3. 页面元素替换 在这种方法中,我们可以将input file标签替换成其他更符合页面风格的元素,并设置对应的事件处理函数。例如,我们可以通过一个div元素来替代input file标签,当用户点击这个div时,触发input file的点击事件,从而弹出文件选择框。接着,我们可以通过CSS样式来让div元素看起来像自己设计的按钮或图标,从而实现input file样式的美化。 总之,通过CSS input file样式美化,我们可以提高用户的使用体验和页面的视觉效果。无论是使用纯CSS的方式、借助JavaScript库实现,还是进行页面元素替换,我们都需要尽量保证美化后的样式与页面整体视觉风格相符,使得整个网站看起来更统一、美观。 ### 回答3: CSS Input File样式美化是一种通过CSS来美化HTML的文件输入元素的方法。通常,HTML文件输入元素的默认样式是单调和无聊的。美化它们的样式既能够增强页面的可视性,也能够提高用户体验。在这里,我们将介绍几种常见的CSS Input File样式美化的方法。 1. 使用伪类选择器:可以通过给文件输入元素添伪类选择器来美化它们的样式。例如,通过添 ::before 和 ::after 伪类选择器,我们可以为文件输入元素添图标和文本来让它看起来更有吸引力和易于使用。 2. 改变字体颜色和背景颜色:可以通过改变文件输入元素的字体和背景颜色来使其看起来更有吸引力。这样可以使其更显眼和易于使用。 3. 使用CSS框架:也可以使用CSS框架来美化文件输入元素,框架通常包含现成的文件输入样式。Bootstrap和Foundation等CSS框架目前是最受欢迎的。 4. 自定义CSS样式表:可以自定义CSS样式表来美化文件输入元素。通过调整文件输入元素的边框,背景颜色,颜色,字体等属性,可以轻松地制作美观且实用的样式。 在进行CSS Input File样式美化时,要注意遵循通用CSS最佳实践,避免过度使用样式。同时要确保文件输入元素的有效性,并遵循HTML标准。切勿使用外部插件进行文件输入元素的美化,这会增额外的代码和安全漏洞。总之,好的文件输入文件样式应该是简单,易于使用和眼睛友好的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值