• 做一个假文件上传按钮


    由于浏览器自带的文件上传元素太丑,我们大多数情况下都是将它隐藏起来,用一个漂亮的按钮来代替。
    今天我就碰到了这么一个需求,一开始觉得不就是把input不透明度设为0,然后覆盖在button上嘛,有什么难的。

    2018-1-22更新:
    采用label的for属性,然后将input元素隐藏,这样,点击label就能触发打开文件的操作,才是最佳方案。for属性指向input元素的id。代码如下:

    
    <label class="btn" for="file_input">点击上传</label>
    
    <input type="file"  id="file_input" style="display:none">
    

    以下原文。

    但实现的过程中才发现对我的css提出了考验。

    基础结构:

    <div style="300px;height:30px,background:#000">
    <p>请选择文件</p>
    <input type='file' style='opacity:0'/>
    </div>
    
    

    点击无效

    接下来我们会发现点击文字没有效果,这是因为input文字下面,所以第一步,就要把文字移上去。这里要用到相对定位了。

    相对定位介绍:position:relative;
    相对定位是元素相对于它在正常流中的位置进行移动的。
    把opacity属性设置为20方便观察:

    <div style="300px;height:30px;background:#ccc">
    <p style="text-align:center">请选择文件</p>
    <input type='file' style='opacity:20;position:relative;top:-40px'/>
    </div>
    
    

    于是我们就发现file元素相对于原来的位置向上移动了40px;

    文字居中

    这时发现文字没有居中,不能忍,于是给p加上一个text-align:center属性,然后用line-height实现垂直居中。

    <div style="300px;height:30px;background:#ccc">
    <p **style="text-align:center;line-height:50px"**>请选择文件</p>
    <input type='file' style='opacity:0;position:relative;top:-40px'/>
    </div>
    
    

    height=0的用处

    这个时候,按道理已经实现要求了,但是缺点就在于高度都被写死了,改成这样:

    <div style="200px;height:50px;background:#ccc">
    <p style="text-align:center;height:0;line-height:3em">请选择文件</p>
    <input type='file' style='200px;opacity:30;position:relative;'/>
    </div>
    
    

    将p的高度改为0,p就不占用div的高度。也就不用偏移input元素了。关于line-height不得不看张鑫旭大神的这篇文章:CSS深入理解vertical-align和line-height的基友关系

    demo

  • 相关阅读:
    轻松把你的项目升级到PWA
    聊聊React高阶组件(Higher-Order Components)
    java NIO系列教程2
    java NIO系列教程1
    个人笔记
    onclick时间加return和不加return的区别
    URL编码分析与乱码解决方案
    第九天 1-8 RHEL7软件包管理
    第八天 RHEL7.2 文件权限管理(第一部分)
    第七天 Linux用户管理、RHEL6.5及RHEL7.2 root密码破解、RHEL6.5安装vmware tools
  • 原文地址:https://www.cnblogs.com/imgss/p/6723822.html
Copyright © 2020-2023  润新知