編程學(xué)習(xí)網(wǎng) > WEB開發(fā) > HTML5 > HTML5.1 里的新東西
2016
12-12

HTML5.1 里的新東西

 HTML 5.1概覽

  兩年前HTML5標(biāo)準(zhǔn)的發(fā)布對于web開發(fā)社區(qū)來說是一件大事。不僅是因?yàn)樗艘幌盗凶屓擞∠笊羁痰男绿匦? 還因?yàn)樗?999年發(fā)布的HTML4.01標(biāo)準(zhǔn)以后,對HTML的第一個(gè)大版本更新。你現(xiàn)在依然可以看到一些網(wǎng)站夸耀他們在使用“現(xiàn)代”的HTML5標(biāo)準(zhǔn)。

  幸運(yùn)的是我們不需為下一次HTML標(biāo)準(zhǔn)的更新等待那么長時(shí)間。2015年10月,W3C開始著手HTML5.1草案,其目標(biāo)是修復(fù)一些HTML5遺留的問題。多次迭代后, 草案于2016年6月達(dá)到“候選建議(Candidate Recommendation)”階段,2016年9月達(dá)到“提議建議(Proposed Recommendation)”,最終2016年11月發(fā)布W3C 建議。關(guān)注新標(biāo)準(zhǔn)的人可能注意到了,這是一段曲折之路。很多開始提出的HTML5.1特性因?yàn)椴缓玫脑O(shè)計(jì)或者缺少瀏覽器廠商支持而被廢棄了。

  盡管HTML5.1仍然在發(fā)展, W3C已經(jīng)開始著手HTML5.2草案,該標(biāo)準(zhǔn)預(yù)計(jì)2017年末發(fā)布。本文是對HTML5.1一些有趣的新特性和提升的概覽。瀏覽器對這些特性依然缺乏支持,但是至少我們會告訴你一些支持這些特性的瀏覽器,用來測試每個(gè)例子。

  上下文菜單使用menu和menuitems元素

  HTML5.1草案介紹了兩種不同的menu元素: context和toolbar。前者用來擴(kuò)展本地上下文菜單,通常被頁面上的鼠標(biāo)右擊激活;后者用來定義一個(gè)普通的菜單組件。在發(fā)展過程中,toolbar 被放棄了,但是context菜單保存了下來。

  可以使用 <menu> 標(biāo)簽來定義一個(gè)包含一個(gè)或幾個(gè) <menuitem> 元素的菜單,然后把它綁定到任何使用contextmenu 屬性的元素上。

  每個(gè) <menuitem> 可以是以下三種類型之一:

  • checkbox – 允許選擇或者取消選擇一個(gè)選項(xiàng)(option);

  • command – 允許在單擊鼠標(biāo)時(shí)執(zhí)行一個(gè)動作;

  • radio – 允許在一組選項(xiàng)中選擇一個(gè).

  這里有一個(gè)基本的使用例子,可以在Firefox49中運(yùn)行, 但是Chrome54目前不行。

  請看SitePoint (@SitePoint)在CodePenHTML5.1菜單例子

  在一個(gè)支持的瀏覽器上,這個(gè)上下文菜單的例子應(yīng)該看起來這樣:

A HTML 5.1 context menu

  上下文菜單中有自定義項(xiàng)。

  細(xì)節(jié)(Details)和總結(jié)(Summary)元素

  新的<details><summary>元素可以通過鼠標(biāo)點(diǎn)擊實(shí)現(xiàn)附加信息的展示和隱藏。這是使用JavaScript時(shí)候經(jīng)常在干的事,現(xiàn)在可以使用<details>元素和<summary>元素代勞了。點(diǎn)擊<summary>元素可以展示和隱藏details元素的其余部分.

  下面的例子可以在Firefox和Chrome中進(jìn)行測試。

  請看SitePoint (@SitePoint)在CodePenHTML5.1 細(xì)節(jié)和總結(jié) demo

  這個(gè)demo在支持的瀏覽器上應(yīng)該是下面這樣:

Details and summary elements

  更多的input類型 - month,week 和 datetime-local

  input擴(kuò)展了三種類型: monthweekdatetime-local

  前兩種類型讓你可以選擇周或者月。在Chrome中兩者都渲染成下拉的日歷,可以選擇某周或者某月。當(dāng)你用JavaScript獲得它們的值,你將得到一個(gè)大致這樣的字符串: "2016-W43"(week input); "2016-10" (month input)。

  最初,HTML5.1草案介紹了兩種日期類型input — datetime和datetime-local。不同的是,datetime-local 使用用戶時(shí)區(qū), 而datetime允許你選擇時(shí)區(qū)。發(fā)展過程中,datetime 被放棄了,現(xiàn)在只有datetime-local存在。datetime-local input由兩部分組成 — 日期,可以像week 和 month一樣進(jìn)行選擇;時(shí)間, 可以單獨(dú)輸入。

  下面是關(guān)于所有新類型input的例子,它在chrome中可以正常展示,但是firfox不行。

  請看SitePoint (@SitePoint)在CodePenHTML 5.1 week, month 和 datetime inputs

  這個(gè)demo在支持的瀏覽器上應(yīng)該是下面這樣:

Week, month and datetime-local inputs

  響應(yīng)式圖片

  HTML5.1包括幾個(gè)在不使用CSS情況下實(shí)現(xiàn)響應(yīng)式圖片的新特性。每個(gè)特性都有自己單獨(dú)的使用場景。

  srcset屬性

  srcset圖像屬性允許列出多個(gè)可用于替代的圖片數(shù)據(jù)源,這些數(shù)據(jù)源的像素密度不同。這使得瀏覽器可以針對用戶設(shè)備選擇合適質(zhì)量的圖片(由設(shè)備的像素密度、縮放比例或者網(wǎng)速決定)。例如,在低速手機(jī)網(wǎng)絡(luò)和小屏幕手機(jī)的情況下,應(yīng)該為用戶提供低像素的圖片。

  srcset屬性接受一個(gè)用逗號分隔的URL列表,每個(gè)URL帶有一個(gè)表示最接近所請求圖片像素比(一個(gè)CSS像素所代表的物理像素?cái)?shù)量)的修飾x。下面是一個(gè)簡單的例子:

<img src="images/low-res.jpg" srcset="
  images/low-res.jpg 1x, 
  images/high-res.jpg 2x, 
  images/ultra-high-res.jpg 3x"
>

  在這個(gè)例子中,如果用戶設(shè)備的像素比是1,圖片low-res將會被展示;如果是2,圖片high-res將會被展示;如果是3或者更大,圖片ultra-high-res將會被展示。

  或者,你可以選擇將圖片展示成不同尺寸。這需要使用w:

<img src="images/low-res.jpg" srcset="
  images/low-res.jpg 600w, 
  images/high-res.jpg 1000w, 
  images/ultra-high-res.jpg 1400w"
>

  在這個(gè)例子中,圖片low-res被定義成600px寬,圖片high-res被定義成1000px寬,ultra-high-res是1400px寬。

  sizes屬性

  你可能想根據(jù)用戶屏幕尺寸來使用不同方式展示圖片。例如,你可能想在寬屏幕上用兩欄展示圖片,窄一些的屏幕上用一欄。這點(diǎn)用sizes屬性就可以實(shí)現(xiàn)。它允許你為圖片分配屏幕的寬度,然后通過srcset屬性選擇合適的圖片。下面是一個(gè)例子:

<img src="images/low-res.jpg" sizes="(max-width: 40em) 100vw, 50vw" 
  srcset="images/low-res.jpg 600w, 
  images/high-res.jpg 1000w, 
  images/ultra-high-res.jpg 1400w"
>

  當(dāng)視口寬度大于40em時(shí),sizes屬性把圖片的寬度定義為視口寬度的50%;當(dāng)視口(viewport)寬度小于或者等于40em時(shí),把圖片寬度定義為視口寬度的100%。

  picture元素

  如果根據(jù)屏幕不同改變圖片的尺寸還是不能滿足需求,你想根據(jù)屏幕不同展示不同的圖片,那就需要使用picture元素。它允許你通過用<picture>指定多個(gè)不同<source>元素,來為不同尺寸的屏幕定義不同資源的圖片。<source>元素作為URL加載圖片的來源。

<picture>
  <source media="(max-width: 20em)" srcset="
    images/small/low-res.jpg 1x,
    images/small/high-res.jpg 2x, 
    images/small/ultra-high-res.jpg 3x
  ">
  <source media="(max-width: 40em)" srcset="
    images/large/low-res.jpg 1x,
    images/large/high-res.jpg 2x, 
    images/large/ultra-high-res.jpg 3x
  ">

  <img src="images/large/low-res.jpg">
</picture>

  如果你想知道更多關(guān)于響應(yīng)式圖片的東西,請戳How to Build Responsive Images with srcset.

  用form.reportValidity()驗(yàn)證表單

  HTML5定義的form.checkValidity()方法可以檢查表單是否符合事先定義好的驗(yàn)證器然后返回一個(gè)布爾值。新的reportValidity() 方法很相似 — 它也可以檢驗(yàn)一個(gè)表單并返回結(jié)果,但是它還能為用戶報(bào)告錯(cuò)誤。下面是一個(gè)例子(請?jiān)贔irefox或Chrome中測試):

  請?jiān)?a >CodePen上看SitePoint (@SitePoint)的例子HTML 5.1 report validity demo

  "First name"輸入框被要求非空,如果不填寫它將被標(biāo)記有錯(cuò)誤。如果符合預(yù)期,它將是這樣:

Working form validation with a message

  frames的AllowfullscreenFrames的Allowfullscreen屬性

  frames新的布爾屬性allowfullscreen可以控制內(nèi)容是否可以通過requestFullscreen()方法來全屏展示內(nèi)容。

  使用element.forceSpellCheck()進(jìn)行拼寫檢查

  新的element.forceSpellCheck()方法允許你在text元素上觸發(fā)拼寫檢查。這也是本文所列出的所有特性中第一個(gè)還不被任何瀏覽器支持的特性。也許,這可以用來進(jìn)行檢查還沒有被用戶直接編輯的元素。

  沒有寫進(jìn)HTML5.1的特性

  一些特性在第一版的草案中被定義但是最終被刪除了,大部分原因是瀏覽器廠商缺乏興趣。下面是其中一些有趣的方法:

  inert屬性

  inert屬性可以禁用所有子元素的用戶交互,就像給所有子元素都加了disabled屬性。

  dialog元素

  <dialog>元素提供一個(gè)原生的彈出框,它甚至有一個(gè)方便的表單集合 - 在<dialog>上使用method屬性可以阻止表單提交到服務(wù)器上,而是關(guān)閉彈出框并把結(jié)果返回給彈出框的建立者。

  這個(gè)特性似乎在firfox仍然支持,所以可以看看下面這個(gè)例子(譯者注:firfox V49.0.2不支持:

  請看SitePoint (@SitePoint)在CodePen的例子 HTML dialog element

  作者的更多文章

  補(bǔ)充

  這不是一個(gè)關(guān)于HTML5.1所有新特性的文章。有許多小的新特性、改變已經(jīng)從現(xiàn)行標(biāo)準(zhǔn)中刪除,還有一些從未使用的特性也被刪除了。如果你想知道HTML5.1的所有改變,請戳[Changes](https://www.w3.org/TR/html/changes.html#changes)。同時(shí),讓我們一起期待瀏覽器廠商盡快支持這些新特性!

  HTML5.1哪些方面最令你激動?通過評論告訴我們吧!

掃碼二維碼 獲取免費(fèi)視頻學(xué)習(xí)資料

Python編程學(xué)習(xí)

查 看2022高級編程視頻教程免費(fèi)獲取