HTML中文件上傳時(shí)使用的<input type="file">元素的樣式自定義
Web頁面中,在需要上傳文件時(shí)基本都會用到<input type="file">元素,它的默認(rèn)樣式:
chrome下:

IE下:

不管是上面哪種,樣式都比較簡單,和很多網(wǎng)頁的風(fēng)格都不太協(xié)調(diào)。
根據(jù)用戶的需求,設(shè)計(jì)風(fēng)格,改變其顯示樣式的場合就比較多了。
如果,要像下面一樣做一個(gè)bootstrap風(fēng)格的上傳按鈕該如何實(shí)現(xiàn)。

搭建上傳按鈕所需的基本元素
效果(chrome):

現(xiàn)在看到的分兩行顯示。
外圍之所以沒有換成div,是因?yàn)樵贗E7-瀏覽器中,只要不是設(shè)成inline,它的寬度全都會撐開到能撐到的寬度。如果設(shè)成inline,那元素的寬度就無法調(diào)整,所以這里用span然后設(shè)成inline-block能解決這樣的問題。
增加樣式將兩行變成一行
css:
效果:

默認(rèn)是沒有淺藍(lán)色邊框,只有鼠標(biāo)去點(diǎn)擊后,才會顯示,這里顯示出來是為了看得清楚。
通過將外圍的span設(shè)成display:relative,將input設(shè)成display:absolute的方式讓他們都脫離文檔流。
通過將input限定在外圍的span中進(jìn)行絕對定位的方式讓本來兩行顯示的變成一行顯示。
實(shí)際上這里已經(jīng)overflow了,真正的寬度是“上傳”文字的寬度,修改fileinput-button樣式增加overflow: hidden
效果:

很有意思,能看到上邊后右邊的藍(lán)色邊框了吧,其實(shí)就是把左邊和下邊的溢出部分給隱藏了。
這時(shí)候用鼠標(biāo)去點(diǎn)擊“上傳”兩個(gè)字實(shí)際上是點(diǎn)在input上,能夠顯示“打開”對話框,因?yàn)轱@示層級上input要比“上傳”更靠近用戶。
注意input定位中的right,為什么不用left定位。
當(dāng)我們改成left后。
效果(chrome):

效果(IE):

在chrome下input元素中的選擇按鈕露出來,但是沒關(guān)系,可以通過后面的設(shè)透明的方式把它透明掉。
但是在IE下確是會把輸入框露出來,關(guān)鍵是鼠標(biāo)移到輸入框上時(shí),指針會變成輸入狀態(tài),這個(gè)就很沒法處理了。
通過right的定位方式把輸入框移到左邊去的方式,可以在IE下回避出現(xiàn)鼠標(biāo)指針變成輸入態(tài)的情況。
透明input元素
css:
效果:

input完全不見了蹤影,點(diǎn)擊“上傳”依然有效。
可以支持IE8+。
引入bootstrap,并添加按鈕樣式
head中增加外部css和js的引用。
增加按鈕樣式。
效果:

解決大小問題
如果為fileinput-button樣式增加width:100px,將外圍的span設(shè)成寬100px,會發(fā)現(xiàn)點(diǎn)擊下部是沒有反應(yīng)的,原因就是input是默認(rèn)大小,無法覆蓋下部。
可以通過為input設(shè)置一個(gè)很大的字號將其撐大的方式來解決覆蓋問題,這里就設(shè)個(gè)200px。
這樣就能解決覆蓋問題。
完成。
參考:jQuery-File-Upload
如果是要兼容IE7-可以參考jQuery-File-Upload中的寫法。
代碼:
- <!DOCTYPE html>
- <html>
- <head>
- <title></title>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- <link rel="stylesheet" href="bootstrap/bootstrap.css">
- <link rel="stylesheet" href="bootstrap/bootstrap-theme.css">
- <script src="bootstrap/jquery-1.10.2.js"></script>
- <script src="bootstrap/bootstrap.js"></script>
- <style>
- .fileinput-button {
- position: relative;
- display: inline-block;
- overflow: hidden;
- }
- .fileinput-button input{
- position:absolute;
- right: 0px;
- top: 0px;
- opacity: 0;
- -ms-filter: 'alpha(opacity=0)';
- font-size: 200px;
- }
- </style>
- </head>
- <body style="padding: 10px">
- <div align="center">
- <span class="btn btn-success fileinput-button">
- <span>上傳</span>
- <input type="file">
- </span>
- </div>
- </body>
- </html>
相關(guān)文章
本文檔主要講述的是HTML5表單新特征簡介與舉例;希望本文檔會給有需要的朋友帶來幫助;感興趣的朋友可以過來看看2017-04-10- 這篇文章主要介紹了HTML5的新特性,需要的朋友可以參考下的相關(guān)資料2016-03-03
- 這篇文章主要介紹了HTML5新特性之用SVG繪制的微信logo 的相關(guān)資料,需要的朋友可以參考下2016-02-03
- 本篇文章給大家分享html5一些有趣的新特征,非常實(shí)用,對html5新特征感興趣的朋友一起學(xué)習(xí)吧2015-12-01
- 文件上傳input在各個(gè)瀏覽器里表現(xiàn)形式都不一樣,這里通過css樣式控制,盡量在多瀏覽器中的表現(xiàn)都一樣2013-01-10
- 不知道各位。在上傳的時(shí)候。 有沒需要過。 一個(gè)上傳。 不修改名字。。然后上傳目錄已經(jīng)被程序所定義了。2011-04-01

用Jquery實(shí)現(xiàn)大文件上傳 Jquery Large File Upload v10.32.0
jQuery File Upload 是一個(gè) jQuery 圖片上傳組件,支持多文件上傳、取消、刪除,上傳前縮略圖預(yù)覽、列表顯示圖片大小,支持上傳進(jìn)度條顯示2021-10-05- 需要在要目錄下新建兩個(gè)目錄:upfile和upimg 添加一個(gè)FileUpload控件.一個(gè)Button.一個(gè)Image.一個(gè)Label 關(guān)鍵代碼: string name = FileUpload1.FileName;//獲得上傳文件2008-12-17
- 這篇文章主要介紹了HTML5新特性之type=file文件上傳功能,需要的朋友可以參考下2018-02-02



