整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML input type=file文件選擇表單元素二三事

          、良生- input type=file與文件上傳

          本文所說的input type=file指的是type類型是file的input元素,最簡HTML代碼如下:

          <input type=file>

          但是,為了習慣,我們多寫成:

          <input type="file">

          在HTML5出現之前(XHTML),我們的閉合規則則有些出入:

          <input type="file" />

          顧名思義,選擇文件,并上傳文件。

          在萬惡的舊時代,HTML5還沒有出現之前,原生的file input表單元素只能讓我們一次上傳一張圖片。無法滿足一次上傳多圖的交互需求,所以,很多場景,就被swfupload.js給取代了,有點逐漸淡出人們視野的感覺。

          然,技術發展,日新月異,三十年河東,三十年河西。隨著原生HTML5表單對多圖(multiple屬性)、上傳前預覽,二進制上傳等支持越來越廣泛,原生的file input表單元素又迎來了新的升級,flash為背景的swfupload.js注定要落寞。

          但是,對于PC項目,IE8-IE9瀏覽器還是不能忽略的。所以,現在,很流行的一種處理方式,就是HTML5 file上傳和flash swfupload上傳一起整合的模式,優先使用原生HTML5上傳,不支持的,使用flash上傳。我之前有篇關于HTML5上傳的文章,每天訪問量很高的:“基于HTML5的可預覽多圖片Ajax上傳”,大家有興趣可以看看。

          如果想使用瀏覽器原生特性實現文件上傳(如圖片)效果,父級的form元素有個東西不能丟,就是:

          enctype="multipart/form-data"

          enctype屬性規定在發送到服務器之前應該如何對表單數據進行編碼,默認的編碼是:”application/x-www-form-urlencoded“。對于普通數據是挺適用的,但是,對于文件,科科,就不能亂編碼了,該什么就是什么,只能使用multipart/form-data作為enctype屬性值。

          無論是舊時代的單圖上傳,還是HTML5中的多圖上傳,均是如此。

          文件,尤其圖片,上場前能夠預覽,是很棒的交互體驗。不走服務器,不耗費流量,多棒!

          理想雖好,實現起來……

          在HTML5還沒出現的舊時代,只有低版本的IE瀏覽器貌似有方法,使用私有的濾鏡,超越安全的限制(其實是利用了不好的東西),實現圖片直接預覽;但是呢,那個時候,Chrome, FireFox沒有這一出,于是,想要使用原生file input實現圖片的上傳前預覽,兼容性坎很難跨過去。

          但是,后來,HTML5來了,我們出現了轉機,IE10+以及其他現代瀏覽器,可以讓我們直接讀取圖片的數據,然后在頁面上呈現,實現了上傳前預覽;加上之前老IE的濾鏡策略,貌似,可行。但是呢但是,老的IE瀏覽器只能最多一次選擇一個文件,因此,只有單圖上傳的時候,大家可以考慮考慮。

          傳統的form提交,是要改變頁面流的,也就是刷新后跳轉。好的體驗應該是走Ajax交互的。HTML5里面支持二進制formData數據提交,因此,可以從容Ajax提交上傳的文件數據;那老舊的IE瀏覽器怎么辦?

          一般方法如下:

          <form action="" method="post" enctype="multipart/form-data" target="uploadIframe">< <iframe id="uploadIframe"></iframe>

          var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; var response = doc.body && doc.body.innerHTML;

          OK, 當然,你也可以不用像上面這么麻煩,直接使用jquery.form.js. 原理呢,就是上面這樣,但是,不需要這么麻煩。

          原生的file input不收待見的另外一個原因是:長的丑還不好控制。

          舉個例子,下圖這個“選擇文件”這幾個文字,我們就不好對file控件動刀子實現自定義:

          file input框

          怎么辦呢?

          有一種方法是這樣的: 讓file類型的元素透明度0,覆蓋在我們好看的按鈕上。然后我們去點擊好看的按鈕,實際上點擊是是file元素。

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

          更好的方法是,使用label元素與file控件關聯,好處在于:

          <label class="ui_button ui_button_primary" for="xFile">上傳文件</label> <form><input type="file" id="xFile" style="position:absolute;clip:rect(0 0 0 0);"></form>

          效果如下(真實實時效果):

          input file類型控件有一個屬性,名為

          accept

          , 可能有些小伙伴不太了解。可以用來指定瀏覽器接受的文件類型,也就是的那個我們打開系統的選擇文件彈框的時候,默認界面中呈現的文件類型。例如:

          accept="image/jpeg"

          ,則界面中只有jpg圖片,如下截圖,同時,窗體右下方是“自定義文件”按鈕:

          自定義文件

          實際開發的時候,很少只允許傳jpg圖片,應該都是只能傳圖片類型,此時,可以使用:

          accept="image/*"

          于是乎,“自定義文件”按鈕變成了語義更明確的“圖片文件”:

          圖片文件

          accept屬性值其實是MIME類型, 例如下面幾個可能常用的:

          accept="application/pdf" accept="audio/x-mpeg" accept="text/html" .accept="video/x-mpeg2"

          然后,多個屬性值使用逗號分隔,例如:

          <input accept="audio/*,video/*,image/*">

          現代瀏覽器直接value = "", 有些IE瀏覽器貌似不行,好像使用file.outerHTML = file.outerHTML,我自己沒測試。

          不過我覺得比較麻煩,還要判斷瀏覽器什么的。像本文的Ajax單圖上傳,直接form.reset()就可以了。

          以上~

          本文為原創文章,會經常更新知識點以及修正一些錯誤,因此轉載請保留原出處,方便溯源,避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。

          頁布局對改善網站的外觀非常重要。

          請慎重設計您的網頁布局。

          在線實例

          使用 <div> 元素的網頁布局

          如何使用 <div> 元素添加布局。

          使用 <table> 元素的網頁布局

          如何使用 <table> 元素添加布局。

          網站布局

          大多數網站會把內容安排到多個列中(就像雜志或報紙那樣)。

          大多數網站可以使用 <div> 或者 <table> 元素來創建多列。CSS 用于對元素進行定位,或者為頁面創建背景以及色彩豐富的外觀。

          雖然我們可以使用HTML table標簽來設計出漂亮的布局,但是table標簽是不建議作為布局工具使用的 - 表格不是布局工具。

          HTML 布局 - 使用<div> 元素

          div 元素是用于分組 HTML 元素的塊級元素。

          下面的例子使用五個 div 元素來創建多列布局:

          實例

          <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><divid="container"style="width:500px"><divid="header"style="background-color:#FFA500;"><h1style="margin-bottom:0;">主要的網頁標題</h1></div><divid="menu"style="background-color:#FFD700;height:200px;width:100px;float:left;"><b>菜單</b><br>HTML<br>CSS<br>JavaScript</div><divid="content"style="background-color:#EEEEEE;height:200px;width:400px;float:left;">內容在這里</div><divid="footer"style="background-color:#FFA500;clear:both;text-align:center;">版權 ? runoob.com</div></div></body></html>

          上面的 HTML 代碼會產生如下結果:

          HTML 布局 - 使用表格

          使用 HTML <table> 標簽是創建布局的一種簡單的方式。

          大多數站點可以使用 <div> 或者 <table> 元素來創建多列。CSS 用于對元素進行定位,或者為頁面創建背景以及色彩豐富的外觀。

          即使可以使用 HTML 表格來創建漂亮的布局,但設計表格的目的是呈現表格化數據 - 表格不是布局工具!

          下面的例子使用三行兩列的表格 - 第一和最后一行使用 colspan 屬性來橫跨兩列:

          實例

          <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><tablewidth="500"border="0"><tr><tdcolspan="2"style="background-color:#FFA500;"><h1>主要的網頁標題</h1></td></tr><tr><tdstyle="background-color:#FFD700;width:100px;"><b>菜單</b><br>HTML<br>CSS<br>JavaScript</td><tdstyle="background-color:#eeeeee;height:200px;width:400px;">內容在這里</td></tr><tr><tdcolspan="2"style="background-color:#FFA500;text-align:center;">版權 ? runoob.com</td></tr></table></body></html>

          上面的 HTML 代碼會產生以下結果:

          HTML 布局 - 有用的提示

          Tip: 使用 CSS 最大的好處是,如果把 CSS 代碼存放到外部樣式表中,那么站點會更易于維護。通過編輯單一的文件,就可以改變所有頁面的布局。如需學習更多有關 CSS 的知識,請訪問我們的CSS 教程。

          Tip: 由于創建高級的布局非常耗時,使用模板是一個快速的選項。通過搜索引擎可以找到很多免費的網站模板(您可以使用這些預先構建好的網站布局,并優化它們)。

          HTML 布局標簽

          標簽描述
          <div>定義文檔區塊,塊級(block-level)
          <span>定義 span,用來組合文檔中的行內元素。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          篇文章介紹了<!--...--> 注釋標簽,我個人感覺很容易理解,在日常編碼中,大多數編輯器都有注釋標簽的快捷鍵,如sublime或VS code里在html代碼里,選中想要注釋掉的代碼后,直接按ctrl+/即可。幾乎不用手動輸入了。還是很方便的。

          這篇我寫<!DOCTYPE>標簽,說起來這個標簽,很常見,因為它會出現在每一個httml文檔的最開頭,然而,我們很少去重視它,為什么呢?

          說到這個標簽,我不得不說起html的版本歷史了。

          在大約10年前吧,html5應用還不如今天這么廣泛吧,于是當時的文檔類型聲明如下

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
          

          很長,也很難記,由于我入行晚,懂得這玩意就只是一個聲明了,比如strict表示嚴格模式。其他的我也不想知道了。

          當然html版本的規范從4到5的過渡經歷了太多年,因為要考慮老瀏覽器的兼容性,再加上前期移動設備配置低,不支持較為復雜的媒體元素。于是,一些資歷深的前端開發人員,面對這么長的代碼還是有很長一段時間。

          當然,9102年都快過完了,我們這邊已經不需要再考慮這些了,于是,我直接就用html5了。

          然后聲明文檔給格式,就變得很簡單了。

          <!DOCTYPE html>
          

          最開始我是使用sublime生成的模板練習的,然后,犯懶,直接輸入了<html>就出來下面的代碼:

          <!DOCTYPE html>
          <html>
          <head>
          	<title></title>
          </head>
          <body>
          </body>
          </html>
          

          然后就開始進行填充了。

          直到今天我才注意到原來<!DOCTYPE html>是單獨的一行,與下方<html></html>是兩碼事。

          所以,我重新看了下書上的強調內容:

          1. <!DOCTYPE> 聲明必須是 HTML 文檔的第一行,位于 <html> 標簽之前,沒有結束標簽,對大小寫不敏感。
          2. <!DOCTYPE> 聲明不是 HTML 標簽;它是指示 web 瀏覽器關于頁面使用哪個 HTML 版本進行編寫的指令。
          3. 在 HTML 4.01 中,<!DOCTYPE> 聲明引用 DTD(文檔類型定義),因為 HTML 4.01 基于 SGML(標準通用標記語言))。DTD 規定了標記語言的規則,這樣瀏覽器才能正確地呈現內容。
          4. HTML5 不基于 SGML,所以不需要引用 DTD。

          關于SGML,參見https://wiki.mbalib.com/wiki/SGML

          常用的 DOCTYPE 聲明

          HTML 5

          <!DOCTYPE html>
          

          HTML 4.01 Strict

          該 DTD 包含所有 HTML 元素和屬性,但不包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

          HTML 4.01 Transitional

          該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
          "http://www.w3.org/TR/html4/loose.dtd">
          

          HTML 4.01 Frameset

          該 DTD 等同于 HTML 4.01 Transitional,但允許框架集內容。

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" 
          "http://www.w3.org/TR/html4/frameset.dtd">
          

          XHTML 1.0 Strict

          該 DTD 包含所有 HTML 元素和屬性,但不包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。必須以格式正確的 XML 來編寫標記。

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          

          XHTML 1.0 Transitional

          該 DTD 包含所有 HTML 元素和屬性,包括展示性的和棄用的元素(比如 font)。不允許框架集(Framesets)。必須以格式正確的 XML 來編寫標記。

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
          http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          

          XHTML 1.0 Frameset

          該 DTD 等同于 XHTML 1.0 Transitional,但允許框架集內容。

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
          

          XHTML 1.1

          該 DTD 等同于 XHTML 1.0 Strict,但允許添加模型(例如提供對東亞語系的 ruby 支持)。

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
          

          最后,雖然上方的html4和xml的文檔類型聲明這么麻煩了,但是這里沒什么知識點了,因為如今,html5應用這么普及了,我們只需在文檔開頭寫<!DOCTYPE html>即可,當然html4的嚴格模式和傳統模式大概知道就行了。


          主站蜘蛛池模板: 精品无码日韩一区二区三区不卡| 精品中文字幕一区二区三区四区| 亚洲视频一区在线播放| 一区二区三区杨幂在线观看| 精品一区二区三区在线观看l | 视频在线一区二区三区| 精品一区二区AV天堂| 亚洲日本中文字幕一区二区三区| 亚洲国产综合无码一区二区二三区| 国产综合精品一区二区三区| 精品爆乳一区二区三区无码av| 亚洲AV日韩AV一区二区三曲| 日韩精品一区二区三区在线观看| 一区二区视频传媒有限公司| 99久久精品午夜一区二区| 国产在线精品一区在线观看| 精品乱人伦一区二区三区| 中文字幕一区二区三区人妻少妇| 色多多免费视频观看区一区| 久久精品免费一区二区三区| 无码中文人妻在线一区| 国产一区二区三区夜色| 一区二区不卡在线| 亚洲美女高清一区二区三区| 国产精品香蕉在线一区| 国产成人久久精品麻豆一区| 精品亚洲AV无码一区二区| 国产精品一区三区| 精品欧洲av无码一区二区14 | 濑亚美莉在线视频一区| 中文字幕精品一区二区精品| 亚洲AV成人一区二区三区在线看| 亚洲一区无码精品色| 亚洲国产AV无码一区二区三区| 精品日本一区二区三区在线观看| 午夜福利无码一区二区| 日本精品一区二区三区在线观看| 国产免费私拍一区二区三区| 亚洲一区二区三区无码国产| 中文字幕一区二区三区免费视频| 四虎在线观看一区二区|