麻煩把文件上傳一下

很多人在實際的開發中都會用到input type=file的這個標簽,然后就會開始吐槽,我的天,長這個樣怎么處理合適,今天給大家帶來一個原生改寫樣式的方法,希望能給大家帶來幫助

不帶任何改變的效果

這個原生真心丑

嘗試改變后的效果

簡單變樣之后

實現思路

先講講思路是如何,第一個就是用label標簽,將for指向上傳的type=file的input標簽,并且將input標簽給隱藏。

<!--multiple的屬性是可以支持多個內容一塊上傳-->
<input id="file" type="file" multiple>
<!--銅鼓label的指向,就可以用label替換input并且能夠有實現上傳功能-->
<label for="file">請選擇文件</label>

完整代碼


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=no">
    <title>美化控件 & 獲取上傳文件的基本信息</title>
    <style>
    * {
        margin: 0;
        padding: 0;
    }
    
    h1 {
        font-size: 2em;
        font-weight: bolder;
        color: red;
        text-align: center;
    }
    
    fieldset {
        width: 80%;
        margin: 30px auto;
        padding: 20px;
    }
    
    fieldset legend {
        color: blue;
        font-size: 1.3em;
        font-weight: bold;
    }
    
    fieldset ul {
        margin-left: 30px;
    }
    
    fieldset li {
        line-height: 1.8;
        color: #666;
    }
    
    .container {
        width: 500px;
        height: 300px;
        margin: 20px auto;
        padding: 10px;
        border: 1px solid #888;
        overflow: auto;
    }
    
    input[type=file] {
        width: 0.1px;
        height: 0.1px;
        opacity: 0;
        overflow: hidden;
        position: absolute;
        z-index: -1;
    }
    
    label[for=file] {
        display: block;
        width: 150px;
        height: 40px;
        margin: auto;
        line-height: 40px;
        text-align: center;
        border-radius: 5px;
        font-size: 1.25em;
        font-weight: 700;
        color: white;
        background-color: #888;
        transition: 0.5s;
    }
    
    label[for=file]:hover {
        background-color: #666;
        cursor: pointer;
    }
    
    pre {
        font-size: 14px;
        line-height: 1.4;
        color: #333;
        margin-top: 20px;
    }
    </style>
</head>

<body>
    <h1>簡單的美化這個控件</h1>
    <fieldset>
        <legend>美化上傳文件表單控件</legend>
        <ul>
            <li>為控件綁定 label 標簽</li>
            <li>隱藏這個丑陋的控件</li>
            <li>美化綁定的 label 標簽</li>
        </ul>
    </fieldset>
    <fieldset>
        <legend>獲取上傳文件的基本信息</legend>
        <ul>
            <li>HTML5,為 input 添加 multiple 特性,允許上傳多個文件</li>
            <li>綁定 input 的 change 事件,動態更改文件信息</li>
            <li>獲取 FileList,HTMLInputElement.files</li>
            <li>動態寫入文件信息(File 對象)</li>
        </ul>
    </fieldset>
    
    <div class="container">
        <div class="upload-file">
            <input id="file" type="file" multiple>
            <label for="file">請選擇文件</label>
            <div class="file-info"></div>
        </div>
    </div>
    <script>
    let file = document.getElementById('file');
    let fileInfo = document.getElementsByClassName('file-info')[0];
    file.onchange = function() {
  //.files是type-file的內置對象
        let fileNum = file.files.length;
        file.nextElementSibling.innerHTML = `選中 ${fileNum} 個文件`;

        showFileInfo(fileNum);
    };

    function showFileInfo(num) {
        let filelist = file.files;
        let div = document.createElement('div');

        for (let i = 0; i < num; i++) {
//pre就是可以保留計算機字符,不被解析
            let pre = document.createElement('pre');
            let item = filelist.item(i);
//字符串模板,類似于和拼接字符串相同效果,是es6的寫法
            pre.innerHTML = `文件名:${item.name}\n文件大小:${item.size}(字節)\n文件類型:${item.type}\n文件最后修改日期:${(new Date(item.lastModified).toLocaleString())}\n`;
            div.appendChild(pre);
        }

        fileInfo.innerHTML = '';
        fileInfo.appendChild(div);
    }
    </script>
</body>

</html>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,740評論 25 708
  • HTML標簽解釋大全 一、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,300評論 1 41
  • 手工新建調用CEF3的項目框架 1、首先用VS新建一個空白的C++項目。這里以CefEmpty為例。 2、將CEF...
    化濁閱讀 1,908評論 0 1
  • 動畫方式 動畫方式有2D移動和3D旋轉。 對于CABasicAnimation類: 以上代碼表示沿著豎直方向移動。...
    ePan閱讀 1,947評論 0 0