整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          洞察 video 超能力系列-玩轉(zhuǎn) mp4

          技術(shù)提升美好事物發(fā)生的概率。Technologically, for greater probability to be happy

          前言

          只要在 HTML5 中使用過視頻播放的同學(xué)對 video 標(biāo)簽一定不會(huì)陌生,不過很多同學(xué)只使用了 video 的基礎(chǔ)功能,實(shí)際上 video 擁有強(qiáng)大潛能的,只要姿勢正確就能讓其擁有超能力。不妨從下面幾個(gè)場景來逐漸了解下video 未曾被發(fā)掘的神秘空間:

          • 清晰度無縫切換
          • 節(jié)省視頻流量

          清晰度無縫切換

          點(diǎn)播領(lǐng)域里 mp4 是最普遍、兼容性最好的視頻容器,不過 mp4 也有它的局限性,比如常見的清晰度切換,我們是無法像youtube那樣做到無縫切換的。我們可以看下普通的mp4播放的網(wǎng)絡(luò)請求和youtube視頻播放的網(wǎng)絡(luò)請求的區(qū)別。

          圖1.1 普通mp4的下載請求過程

          圖1.2 Youtube視頻下載請求過程

          這兩張圖不難看出,在默認(rèn)情況下 mp4 使用一次 http 請求所有的視頻數(shù)據(jù),Youtube 則分次請求。當(dāng)然這個(gè)描述很不專業(yè),但確實(shí)形象。造成這種差異的是 video 不支持流式的視頻數(shù)據(jù),Youtube 采用的是流式的視頻容器 webm,而 mp4 是非流式的。那如何解釋清楚流式的視頻數(shù)據(jù)呢,從專業(yè)的角度三言兩語很難說清楚,但用大白話翻譯過來就是流式的視頻數(shù)據(jù)支持分段獨(dú)立播放,非流式的不可以。換句話說一個(gè)10M的視頻文件,流式的視頻可以把0~1M的數(shù)據(jù)請求回來單獨(dú)播放,但是非流式的不可以。

          上面我們描述了視頻格式的不同,接下來我們要說的是第一張圖中的視頻加載是瀏覽器來控制的,通過給 video 的 src 屬性配置視頻地址,觸發(fā)播放之后瀏覽器就會(huì)開始下載了,JS干涉不了。而 Youtube 的視頻加載是通過JS來控制的,各位可以再次看下第二張圖的網(wǎng)絡(luò)請求類型:xhr,足以證明這一點(diǎn)。

          上面兩點(diǎn)搞清楚之后我們就該說下清晰度切換的事情了。這個(gè)需求大家都不陌生,但是直接使用 mp4 格式做無縫清晰度切換,難度還挺大的。先解釋下“無縫清晰度切換”的概念:從播放一個(gè)分辨率的視頻到另一個(gè)分辨率且保證畫面、聲音不停頓的平滑切換過程。了解了這個(gè)概念,大家應(yīng)該知道了用 video 無縫切換 mp4 有多難。一方面,video 是不支持流式的視頻格式的,一方面,video 的加載是不受JS控制的。通過切換 video 的 src 屬性,必然會(huì)導(dǎo)致畫面中斷、重新請求視頻數(shù)據(jù)等。有的同學(xué)想到說利用兩個(gè) video 再結(jié)合 z-index 來搞,但是當(dāng)你生成另一個(gè)video去加載視頻的時(shí)候,無法保證兩個(gè)畫面是嚴(yán)格一致的,即使將原來的畫面暫停到一個(gè)時(shí)刻,用另一個(gè)視頻通過 currentTime 屬性與之同步,切換仍然看到畫面閃爍,基本無法和 Youtube 無縫切換的體驗(yàn)匹敵。而且還會(huì)造成更多流量的浪費(fèi),背后的原因大家可以研究下 mp4 容器和 webm 容器的異同,也可以看下視頻解碼相關(guān)的文章。

          還有一種方法就是將 mp4 格式統(tǒng)統(tǒng)轉(zhuǎn)碼到流式的視頻格式比如 hls、webm 等。不過這種看上去可行的方式實(shí)際上會(huì)帶來很大的成本開銷,如將大量視頻做轉(zhuǎn)碼會(huì)消耗高昂的機(jī)器資源、雙倍存儲(chǔ)的費(fèi)用、CDN的雙倍費(fèi)用等等。其實(shí)我們也是在這種背景下研究出來新的技術(shù)問題解決清晰度無縫切換的。

          首先,我們改變對 mp4 視頻的播放流程,不再直接使用 video 的 src 來播放,因?yàn)槲覀儧]有任何可以操作的空間。video不僅支持 src 屬性還支持 Blob 對象,我們就是利用后者。播放的流程如下:

          圖1.3 mp4 視頻新播放流程

          1. 來請求 mp4 視頻數(shù)據(jù),這樣可以結(jié)合視頻 Range 服務(wù),做到精確加載。
          2. 編寫解析器將加載回來的部分 mp4 視頻數(shù)據(jù)進(jìn)行解復(fù)用
          3. 將解復(fù)用的視頻數(shù)據(jù)轉(zhuǎn)成 fmp4 格式并傳遞給 MediaSource
          4. 使用 video 進(jìn)行解碼完成播放

          然后在做清晰度切換的時(shí)候流程如下:

          圖1.4 mp4視頻清晰度切換原理示意圖

          1. 播放視頻A,過程同上
          2. 在某個(gè)時(shí)刻,用戶切換到播放視頻B,首先解析B的索引文件(moov),反向計(jì)算mp4的range區(qū)間
          3. 加載B的視頻區(qū)間數(shù)據(jù)
          4. 解復(fù)用
          5. 把數(shù)據(jù)轉(zhuǎn)換成fmp4格式并傳遞給MediaSource
          6. 刪除A的部分Buffer
          7. 在下一個(gè)關(guān)鍵幀自動(dòng)完成畫質(zhì)的切換

          圖1.5 mp4視頻清晰度切換流程示意圖

          這個(gè)過程看上去比較繁瑣,但是所有的操作都是在瀏覽器端完成,也就是說都是JS來實(shí)現(xiàn)的。這樣之前說的所有成本問題都不存在,還能做到y(tǒng)outube相同體驗(yàn)的無縫切換。如果大家也想使用這個(gè)功能不需要自己再去實(shí)現(xiàn)一遍上述流程,可以使用如下代碼:

          如果對這段代碼有什么疑惑,或者想深入了解下它背后是如何實(shí)現(xiàn)的,可以參考 Github:https://github.com/bytedance/xgplayer 或 閱讀原文:https://techblog.toutiao.com/

          節(jié)省視頻流量

          使用 video 的同學(xué)基本上都是這樣用的,如下:

          1. 利用src屬性

          2.利用source標(biāo)簽

          這樣就可以播放視頻了,不過前面我們講過這樣使用 video ,視頻的加載是受瀏覽器控制的,可以看下瀏覽器在視頻剛開始播放的時(shí)候下載了多少數(shù)據(jù):

          圖2.1 video默認(rèn)下載截圖

          我隨便找了個(gè)視頻,大家看下視頻總長度是 02:08,在播放到 00:05 的時(shí)候,瀏覽器已經(jīng)下載到 01:30 了,如果用戶終止觀看,下載的視頻就這樣被浪費(fèi)掉了。當(dāng)然,如果不斷的 seek 也會(huì)造成較多的流量浪費(fèi)。按照我們之前的統(tǒng)計(jì)在短視頻領(lǐng)域,用戶 seek 的頻率在 80%,所以這部分流量是可以節(jié)省掉的。具體原理如下:

          圖2.2 播放器加載視頻原理

          1. 設(shè)置每次加載的數(shù)據(jù)包大小
          2. 設(shè)置預(yù)加載時(shí)長
          3. 開啟加載隊(duì)列,完成第一次數(shù)據(jù)包下載,判斷緩沖時(shí)間和預(yù)加載時(shí)長是否滿足,不滿足請求下一個(gè)數(shù)據(jù)包

          具體實(shí)現(xiàn)代碼如下:

          這樣就實(shí)現(xiàn)了視頻在播放過程中永遠(yuǎn)只預(yù)加載10秒的數(shù)據(jù),進(jìn)而保證節(jié)省流量。

          擴(kuò)展鏈接,了解超能力西瓜視頻是怎樣煉成的。

          多站點(diǎn)都會(huì)使用到視頻. HTML5 提供了展示視頻的標(biāo)準(zhǔn)。

          檢測您的瀏覽器是否支持 HTML5 視頻:

          檢測

          Web站點(diǎn)上的視頻

          直到現(xiàn)在,仍然不存在一項(xiàng)旨在網(wǎng)頁上顯示視頻的標(biāo)準(zhǔn)。

          今天,大多數(shù)視頻是通過插件(比如 Flash)來顯示的。然而,并非所有瀏覽器都擁有同樣的插件。

          HTML5 規(guī)定了一種通過 video 元素來包含視頻的標(biāo)準(zhǔn)方法。

          瀏覽器支持

          Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持 <video> 元素.

          注意: Internet Explorer 8 或者更早的IE版本不支持 <video> 元素。

          HTML5 (視頻)- 如何工作

          如需在 HTML5 中顯示視頻,您所有需要的是:

          實(shí)例

          <video width="320" height="240" controls>

          <source src="movie.mp4" type="video/mp4">

          <source src="movie.ogg" type="video/ogg">

          您的瀏覽器不支持Video標(biāo)簽。

          </video>

          <video> 元素提供了 播放、暫停和音量控件來控制視頻。

          同時(shí)<video> 元素元素也提供了 width 和 height 屬性控制視頻的尺寸.如果設(shè)置的高度和寬度,所需的視頻空間會(huì)在頁面加載時(shí)保留。。如果沒有設(shè)置這些屬性,瀏覽器不知道大小的視頻,瀏覽器就不能再加載時(shí)保留特定的空間,頁面就會(huì)根據(jù)原始視頻的大小而改變。

          <video> 與</video> 標(biāo)簽之間插入的內(nèi)容是提供給不支持 video 元素的瀏覽器顯示的。

          <video> 元素支持多個(gè) <source> 元素. <source> 元素可以鏈接不同的視頻文件。瀏覽器將使用第一個(gè)可識(shí)別的格式:

          視頻格式與瀏覽器的支持

          當(dāng)前, <video> 元素支持三種視頻格式: MP4, WebM, 和 Ogg:

          瀏覽器MP4WebMOgg
          Internet ExplorerYESNONO
          ChromeYESYESYES
          FirefoxYESYESYES
          SafariYESNONO
          OperaYES (從 Opera 25 起)YESYES
          • MP4 = 帶有 H.264 視頻編碼和 AAC 音頻編碼的 MPEG 4 文件

          • WebM = 帶有 VP8 視頻編碼和 Vorbis 音頻編碼的 WebM 文件

          • Ogg = 帶有 Theora 視頻編碼和 Vorbis 音頻編碼的 Ogg 文件

          視頻格式

          格式MIME-type
          MP4video/mp4
          WebMvideo/webm
          Oggvideo/ogg

          HTML5 <video> - 使用 DOM 進(jìn)行控制

          HTML5 <video> 和 <audio> 元素同樣擁有方法、屬性和事件。

          <video> 和 <audio>元素的方法、屬性和事件可以使用JavaScript進(jìn)行控制.

          其中的方法有用于播放、暫停以及加載等。其中的屬性(比如時(shí)長、音量等)可以被讀取或設(shè)置。其中的 DOM 事件能夠通知您,比方說,<video> 元素開始播放、已暫停,已停止,等等。

          例中簡單的方法,向我們演示了如何使用 <video> 元素,讀取并設(shè)置屬性,以及如何調(diào)用方法。

          實(shí)例 1

          為視頻創(chuàng)建簡單的播放/暫停以及調(diào)整尺寸控件:

          播放/暫停 放大 縮小 普通

          上面的例子調(diào)用了兩個(gè)方法:play() 和 pause()。它同時(shí)使用了兩個(gè)屬性:paused 和 width。

          HTML5 Video 標(biāo)簽

          標(biāo)簽描述
          <video>定義一個(gè)視頻
          <source>定義多種媒體資源,比如 <video> 和<audio>
          <track>定義在媒體播放器文本軌跡

          .標(biāo)簽

          1.1meta標(biāo)簽

          meta主要用于設(shè)置網(wǎng)頁中的一些元數(shù)據(jù),元數(shù)據(jù)不是給用戶看 charset 指定網(wǎng)頁的字符集 name 指定的數(shù)據(jù)的名稱 content 指定的數(shù)據(jù)的內(nèi)容

          keywords 表示網(wǎng)站的關(guān)鍵字,可以同時(shí)指定多個(gè)關(guān)鍵字,關(guān)鍵字間使用,隔開

          <meta name="Keywords" content="網(wǎng)上購物,網(wǎng)上商城,手機(jī),筆記本,電腦,MP3,CD,VCD,DV,相機(jī),數(shù)碼,配件,手表,存儲(chǔ)卡,京東"/>

          description 用于指定網(wǎng)站的描述

          <meta name="description" content="京東JD.COM-專業(yè)的綜合網(wǎng)上購物商城,銷售家電、數(shù)碼通訊、電腦、家居百貨、服裝服飾、母嬰、圖書、食品等數(shù)萬個(gè)品牌優(yōu)質(zhì)商品.便捷、誠信的服務(wù),為您提供愉悅的網(wǎng)上購物體驗(yàn)!"/>
          <meta http-equiv="refresh" content="3;url=https://www.mozilla.org">

          將頁面重定向到另一個(gè)網(wǎng)站

          1.2title標(biāo)簽

          title標(biāo)簽的內(nèi)容會(huì)作為搜索結(jié)果的超鏈接上的文字顯示

          <title>Document</title>

          1.3標(biāo)題

          • h1 ~ h6 一共有六級(jí)標(biāo)題
          • 從h1~h6重要性遞減,h1最重要,h6最不重要
          • h1在網(wǎng)頁中的重要性僅次于title標(biāo)簽,一般情況下一個(gè)頁面中只會(huì)有一個(gè)h1
          • 標(biāo)題元素是塊元素
          • <h1>一級(jí)標(biāo)題</h1>
            <h2>二級(jí)標(biāo)題</h2>
            <h3>三級(jí)標(biāo)題</h3>
            <h4>四級(jí)標(biāo)題</h4>
            <h5>五級(jí)標(biāo)題</h5>
            <h6>六級(jí)標(biāo)題</h6>

          • hgroup標(biāo)簽用來為標(biāo)題分組,可以將一組相關(guān)的標(biāo)題同時(shí)放入到hgroup
          • <hgroup>
            <h1>回鄉(xiāng)偶書二首</h1>
            <h2>其一</h2>
            </hgroup>
          • 其他標(biāo)簽
            • p標(biāo)簽表示頁面中的一個(gè)段落
            • <p>在p標(biāo)簽中的內(nèi)容就表示一個(gè)段落</p>
            • em標(biāo)簽用于表示語音語調(diào)的一個(gè)加重
            • <p>今天天氣<em></em>不錯(cuò)!</p>
            • strong表示強(qiáng)調(diào),重要內(nèi)容!
            • <p>你今天必須要<strong>完成作業(yè)</strong></p>
            • blockquote 表示一個(gè)長引用
            • <blockquote>
              這句話我是從來沒有說過的!
              </blockquote>
            • q表示一個(gè)短引用
            • 子曰<q>學(xué)而時(shí)習(xí)之,樂呵樂呵!</q>
            • br標(biāo)簽表示頁面中的換行
            • <br>

          1.4布局標(biāo)簽

          header 表示網(wǎng)頁的頭部 main 表示網(wǎng)頁的主體部分(一個(gè)頁面中只會(huì)有一個(gè)main) footer 表示網(wǎng)頁的底部 nav 表示網(wǎng)頁中的導(dǎo)航 aside 和主體相關(guān)的其他內(nèi)容(側(cè)邊欄) article 表示一個(gè)獨(dú)立的文章 section 表示一個(gè)獨(dú)立的區(qū)塊,上邊的標(biāo)簽都不能表示時(shí)使用section

          div 沒有語義,就用來表示一個(gè)區(qū)塊,目前來講div還是我們主要的布局元素

          span 行內(nèi)元素,沒有任何的語義,一般用于在網(wǎng)頁中選中文字

          <header></header>
              <main></main>
              <footer></footer>
          
              <nav></nav>
              <aside></aside>
              <article></article>
          
              <section></section>
          
              <div></div>
          
              <span></span>

          1.5列表

          1.1.1分類

          1.1.1.1有序列表

          使用ol標(biāo)簽來創(chuàng)建無序列表,使用li表示列表項(xiàng)

          <ul>
                 <li>結(jié)構(gòu)</li>
                 <li>表現(xiàn)</li>
                 <li>行為</li>
             </ul>

          1.1.1.2 無序列表

          使用ul標(biāo)簽來創(chuàng)建無序列表,使用li表示列表項(xiàng)

          <ol>
                 <li>結(jié)構(gòu)</li>
                 <li>表現(xiàn)</li>
                 <li>行為</li>
             </ol>

          1.1.1.3定義列表

          使用dl標(biāo)簽來創(chuàng)建一個(gè)定義列表, 使用dt來表示定義的內(nèi)容,使用dd來對內(nèi)容進(jìn)行解釋說明

          <dl>
                 <dt>結(jié)構(gòu)</dt>
                 <dd>結(jié)構(gòu)表示網(wǎng)頁的結(jié)構(gòu),結(jié)構(gòu)用來規(guī)定網(wǎng)頁中哪里是標(biāo)題,哪里是段落</dd>
                 <dd>結(jié)構(gòu)表示網(wǎng)頁的結(jié)構(gòu),結(jié)構(gòu)用來規(guī)定網(wǎng)頁中哪里是標(biāo)題,哪里是段落</dd>
                 <dd>結(jié)構(gòu)表示網(wǎng)頁的結(jié)構(gòu),結(jié)構(gòu)用來規(guī)定網(wǎng)頁中哪里是標(biāo)題,哪里是段落</dd>
             </dl>

          1.1.1.4列表之間可以互相嵌套

          <ul>
                 <li>
                    aa
                     <ul>
                         <li>aa-1</li>
                         <li>aa-2
                             <ul>
                                 <li>aa-1</li>
                                 <li>aa-2</li>
                             </ul>
                         </li>
                     </ul>
                 </li>
             </ul>

          1.6超鏈接

          1.6.1 作用

          超鏈接可以讓我們從一個(gè)頁面跳轉(zhuǎn)到其他頁面, 或者是當(dāng)前頁面的其他的位置

          1.6.2 定義

          使用 a 標(biāo)簽來定義超鏈接

          <a href="https://www.baidu.com">超鏈接</a>

          1.6.3 屬性

          1.6.3.1屬性1:href

          指定跳轉(zhuǎn)的目標(biāo)路徑

          值可以是一個(gè)外部網(wǎng)站的地址

          也可以寫一個(gè)內(nèi)部頁面的地址

          超鏈接是也是一個(gè)行內(nèi)元素,在a標(biāo)簽中可以嵌套除它自身外的任何元素

          1.6.3.2 屬性2:target

          用來指定超鏈接打開的位置

          _self 默認(rèn)值 在當(dāng)前頁面中打開超鏈接

          _blank 在一個(gè)新的要么中打開超鏈接

          <a href="07.列表.html" target="_blank">超鏈接</a>

          1.6.4其他

          將#作為超鏈接的路徑的展位符使用

          javascript:; 來作為href的屬性,此時(shí)點(diǎn)擊這個(gè)超鏈接什么也不會(huì)發(fā)生

          將超鏈接的href屬性設(shè)置為#,這樣點(diǎn)擊超鏈接以后 頁面不會(huì)發(fā)生跳轉(zhuǎn),而是轉(zhuǎn)到當(dāng)前頁面的頂部的位置

          跳轉(zhuǎn)到頁面的指定位置,只需將href屬性設(shè)置 #目標(biāo)元素的id屬性值

          <a href="#bottom">去底部</a>
             <br><br>
          <a href="#p3">去第三個(gè)自然段</a>
             <br><br>
          <p>
            內(nèi)容多一點(diǎn)
          </p>
          <a href="#">這是一個(gè)新的超鏈接</a>
             <br><br>
          <a href="javascript:;">這是一個(gè)新的超鏈接</a>
             <br><br>
          <a id="bottom" href="#">回到頂部</a>

          1.7圖片標(biāo)簽

          img標(biāo)簽來引入外部圖片,img標(biāo)簽是一個(gè)自結(jié)束標(biāo)簽

          屬性:src 屬性指定的是外部圖片的路徑(路徑規(guī)則和超鏈接是一樣的)

          alt 圖片的描述,這個(gè)描述默認(rèn)情況下不會(huì)顯示,有些瀏覽器會(huì)圖片無法加載時(shí)顯示

          <img src="./img/1.gif" alt="松鼠">

          1.8內(nèi)聯(lián)框架

          用于向當(dāng)前頁面中引入一個(gè)其他頁面

          • src 指定要引入的網(wǎng)頁的路徑
          • frameborder 指定內(nèi)聯(lián)框架的邊框
          <iframe src="https://www.qq.com" width="800" height="600" frameborder="0"></iframe>

          1.8 音視頻標(biāo)簽

          1.8.1音頻

          audio 標(biāo)簽用來向頁面中引入一個(gè)外部的音頻文件的

          1.8.1.1 屬性

          • controls 是否允許用戶控制播放
          • autoplay 音頻文件是否自動(dòng)播放
            • 如果設(shè)置了autoplay 則音樂在打開頁面時(shí)會(huì)自動(dòng)播放
          • loop 音樂是否循環(huán)播放
          <audio src="./source/audio.mp3" controls autoplay loop></audio>

          除了通過src來指定外部文件的路徑以外,還可以通過source來指定文件的路徑

          <audio controls>
                 <!-- 對不起,您的瀏覽器不支持播放音頻!請升級(jí)瀏覽器!-->
                 <source src="./source/audio.mp3">
                 <source src="./source/audio.ogg">
                 <embed src="./source/audio.mp3" type="audio/mp3" width="300" height="100">
             </audio>

          1.8.2視頻

          與 audio 相似

          <video controls>
                 <source src="./source/flower.webm">
                 <source src="./source/flower.mp4">
                 <embed src="./source/flower.mp4" type="video/mp4">
             </video>


          2.表格table

          • 在table中使用tr表示表格中的一行,有幾個(gè)tr就有幾行
          • 在tr中使用td表示一個(gè)單元格,有幾個(gè)td就有幾個(gè)單元格
          • rowspan 縱向的合并單元格
          • colspan 橫向的合并單元格
          <table border="1" width='50%' align="center">
                <tr>
                    <td>A1</td>
                    <td>B1</td>
                    <td>C1</td>
                    <td>D1</td>
                </tr>
                <tr>
                    <td>A2</td>
                    <td>B2</td>
                    <td>C2</td>
                    <td rowspan="2">D2</td>
                </tr>
                <tr>
                    <td>A3</td>
                    <td>B3</td>
                    <td>C3</td>
                </tr>
                <tr>
                    <td>A4</td>
                    <td>B4</td>
                    <td colspan="2">C4</td>
                </tr>
            </table>

          長表格

          • 可以將一個(gè)表格分成三個(gè)部分:
            • 頭部 thead
            • 主體 tbody
            • 底部 tfoot
          • th 表示頭部的單元格
          <table border="1" width='50%' align="center">  
                <thead>
                    <tr>
                        <th>日期</th>
                        <th>收入</th>
                        <th>支出</th>
                        <th>合計(jì)</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>2000.1.1</td>
                        <td>500</td>
                        <td>200</td>
                        <td>300</td>
                    </tr>
                    <tr>
                        <td>2000.1.1</td>
                        <td>500</td>
                        <td>200</td>
                        <td>300</td>
                    </tr>
                    <tr>
                        <td>2000.1.1</td>
                        <td>500</td>
                        <td>200</td>
                        <td>300</td>
                    </tr>
                    <tr>
                        <td>2000.1.1</td>
                        <td>500</td>
                        <td>200</td>
                        <td>300</td>
                    </tr>
                </tbody>
                <tfoot>
                    <tr>
                        <td></td>
                        <td></td>
                        <td>合計(jì)</td>
                        <td>300</td>
                    </tr>
                </tfoot>
          
            </table>

          表格樣式

          • border-spacing: 指定邊框之間的距離
          border-spacing: 0px;
          • border-collapse: collapse; 設(shè)置邊框的合并
          border-collapse: collapse;
          • 如果表格中沒有使用tbody而是直接使用tr,那么瀏覽器會(huì)自動(dòng)創(chuàng)建一個(gè)tbody,并且將tr全都放到tbody中tr不是table的子元素

          3.表單(form)

          • 使用form標(biāo)簽來創(chuàng)建一個(gè)表單
          • action 表單要提交的服務(wù)器的地址
          • 數(shù)據(jù)要提交到服務(wù)器中,必須要為元素指定一個(gè)name屬性值
          <input type="text" name="username">
          • 單選按鈕
            • 像這種選擇框,必須要指定一個(gè)value屬性,value屬性最終會(huì)作為用戶的填寫的值傳遞給服務(wù)器
            • checked 可以將單選按鈕設(shè)置為默認(rèn)選中
          <input type="radio" name="hello" value="a">
          <input type="radio" name="hello" value="b" checked>
          • 多選框
          <input type="checkbox" name="test" value="1">
                <input type="checkbox" name="test" value="2">
                <input type="checkbox" name="test" value="3" checked>
          • 下拉列表
          <select name="haha">
                    <option value="i">選項(xiàng)一</option>
                    <option selected value="ii">選項(xiàng)二</option>
                    <option value="iii">選項(xiàng)三</option>
                </select>
          • 提交按鈕
          <input type="submit" value="注冊">

          屬性

          • autocomplete="off" 關(guān)閉自動(dòng)補(bǔ)全
          • readonly 將表單項(xiàng)設(shè)置為只讀,數(shù)據(jù)會(huì)提交
          • disabled 將表單項(xiàng)設(shè)置為禁用,數(shù)據(jù)不會(huì)提交
          • autofocus 設(shè)置表單項(xiàng)自動(dòng)獲取焦點(diǎn)
          <form action="target.html">
                <input type="text" name="username" value="hello" readonly>
                <br><br>
                <input type="text" name="username" autofocus>
                <br><br>
                <input type="text" name="b">
          
                <br><br>
          
                <!-- <input type="color"> -->
                <br><br>
                <!-- <input type="email"> -->
                <br><br>
          
                <input type="submit">
                <!-- 重置按鈕 -->
                <input type="reset">
                <!-- 普通的按鈕 -->
                <input type="button" value="按鈕">
          
                <br><br>
                 
          
                <button type="submit">提交</button>
                <button type="reset">重置</button>
                <button type="button">按鈕</button>
            </form>

          4.注釋

          <!--
          我是注釋中的注釋 注釋不能嵌套
          -->
          

          5.屬性

          • 屬性,在標(biāo)簽中(開始標(biāo)簽或自結(jié)束標(biāo)簽)還可以設(shè)置屬性
          • 屬性是一個(gè)名值對(x=y)
          • 屬性用來設(shè)置標(biāo)簽中的內(nèi)容如何顯示
          • 屬性和標(biāo)簽名或其他屬性應(yīng)該使用空格隔開
          • 屬性不能瞎寫,應(yīng)該根據(jù)文檔中的規(guī)定來編寫,有些屬性有屬性值,有些沒有。如果有屬性值,屬性值應(yīng)該使用引號(hào)引起來

          6.文檔聲明

          <!doctype html>

          主站蜘蛛池模板: 国产一区二区三区电影| 亚洲一区二区成人| 激情一区二区三区| 亚洲一区中文字幕| 亚洲午夜精品第一区二区8050 | 亚洲一区二区免费视频| 视频在线观看一区二区| 亚洲宅男精品一区在线观看| 无码人妻久久一区二区三区蜜桃 | 国产精品成人一区无码| 91精品一区二区综合在线| 中文字幕人妻丝袜乱一区三区| 日本一区中文字幕日本一二三区视频| 精品久久一区二区| 韩日午夜在线资源一区二区| 日韩精品一区二区三区不卡| 国产福利微拍精品一区二区| 日本伊人精品一区二区三区| 中文字幕一区二区三区永久 | 人妻少妇精品视频三区二区一区| 国产乱码精品一区二区三区麻豆 | 久久精品国产一区二区三| 无码少妇一区二区浪潮av| 精品动漫一区二区无遮挡| 亚洲AV综合色一区二区三区 | 一区二区三区亚洲视频| 丰满人妻一区二区三区视频| 国产成人一区二区三区高清| 欧美日韩综合一区二区三区| 中文字幕无线码一区2020青青| 久久国产精品一区| 国产精品分类视频分类一区| 青娱乐国产官网极品一区| 熟女大屁股白浆一区二区| 中文字幕在线一区二区在线| 国产精品区AV一区二区| 亚洲一区二区三区91| 国产韩国精品一区二区三区 | 国产亚洲自拍一区| 亚洲av综合av一区二区三区 | 日韩最新视频一区二区三|