zoukankan      html  css  js  c++  java
  • 做一个假文件上传按钮

    由于浏览器自带的文件上传元素太丑,我们大多数情况下都是将它隐藏起来,用一个漂亮的按钮来代替。
    今天我就碰到了这么一个需求,一开始觉得不就是把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

  • 相关阅读:
    Wamp 访问本地站点慢 的解决办法
    PHP中如何实现 “在页面中一边执行一边输出” 的效果
    PHP很有用的一个函数ignore_user_abort ()
    PHP中CURL方法curl_setopt()函数的一些参数
    RGB转为Lab空间
    void v.s. void *
    __attribute__((regparm(3))) from GNU C
    a number of 和the number of用法
    Linux 版本查詢
    在frameset,iframe內調用Javascript的方法
  • 原文地址:https://www.cnblogs.com/imgss/p/6723822.html
Copyright © 2011-2022 走看看