• HTML input type=file文件选择表单的汇总(二)


    1. 原生file input大小、按钮文字等UI自定义

    元素input的原生样式,不是太好看:

    有一种方法是这样的:
    让file类型的元素透明度0,覆盖在我们好看的按钮上。然后我们去点击好看的按钮,实际上点击是是file元素。

    然而,此方法有一些不足:

    1. 尺寸控制不灵活。然后高度控制也不精准,我们很难正好覆盖在好看的自定义按钮上。
    2. 样式不好控制,按钮的hover态以及active态不好处理。
    3. HTML结构限制以及定位成本。

    更好的方法是,使用label元素与file控件关联,好处在于:

    1. 点击自定义的漂亮按钮就是点击我们file控件;
    2. 没有尺寸控制不精确的问题;
    3. 没有不能响应hover态active态的问题;
    4. 我们的漂亮按钮甚至可以在form表单元素的外面

    代码如下: 

    <style>
        .ui_button {
            padding:10px;
            background: #01AAED;
            color: #fff;
        }
        .ui_button:hover {
           opacity: 0.9;
        }
    </style> 
    <body>
    <form> 
            <label class="ui_button" for="xFile">上传文件</label>
            <input type="file" id="xFile" style="position:absolute;clip:rect(0 0 0 0);">
            <span>文件以.video结尾</span>
        </form>
    </body>

    样式如下:

    2. file类型控件的accept属性

    input file类型控件有一个属性,名为accept,可以用来指定浏览器接受的文件类型.

    如果是上传图片,可以使用:

    上传视频类型,可以使用:

     

    如果是其他类型的:可以参考下:

    然后,多个属性值使用逗号分隔,例如:

    input file只选择文件夹而不是文件

    试试下面的代码,测试了下,Chrome浏览器下是可以的,Firefox浏览器下也是可以的,safari和IE目前还不行,有兼容性问题。

  • 相关阅读:
    [Node.js] CommonJS Modules
    [Node.js] npm init && npm install
    [AngularJS] Hijacking Existing HTML Attributes with Angular Directives
    [Node.js] Level 7. Persisting Data
    [Express] Level 5: Route file
    [Express] Level 5: Route Instance -- refactor the code
    [Express] Level 4: Body-parser -- Delete
    [Express] Level 4: Body-parser -- Post
    [Express] Level 3: Massaging User Data
    [Express] Level 3: Reading from the URL
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/8021903.html
Copyright © 2020-2023  润新知