• 原文地址:What’s New in HTML 5.2?
  • 原文作者:bitsofco
  • 译文出自:掘金翻译计划
  • 本文永久链接:github.com/xitu/gold-m…
  • 译者:lsvih
  • 校对者:Raoul1996, 吃土小2叉

HTML 5.2 有哪些新内容?

就在不到一个月前,HTML 5.2 正式成为了 W3C 的推荐标准(REC)。当一个规范到达 REC 阶段,就意味着它已经正式得到了 W3C 成员和理事长的认可。并且 W3C 将正式推荐浏览器厂商部署、web 开发者实现此规范。

在 REC 阶段有个原则叫做“任何新事物都至少要有两种独立的实现”,这对于我们 web 开发者来说是一个实践新特性的绝佳机会。

在 HTML 5.2 中有一些添加和删除,具体改变可以参考官方的 HTML 5.2 变动内容网页。本文将介绍一些我认为与我的开发有关的改动。

新特性

原生的 <dialog> 元素

在 HTML 5.2 的所有改动中,最让我激动的就是关于 <dialog> 元素这个原生对话框的介绍。在 web 中,对话框比比皆是,但是它们的实现方式都各有不同。对话框很难实现可访问性,这导致大多数的对话框对那些不方便以视觉方式访问网页的用户来说都是不可用的。

新的 <dialog> 元素旨在改变这种状况,它提供了一种简单的方式来实现模态对话框。之后我会单独写一篇文章专门介绍这个元素的工作方式,在此先简单介绍一下。

由一个 <dialog> 元素创建对话框:

<dialog>  <h2>Dialog Title</h2><p>Dialog content and other stuff will go here</p>
</dialog>

默认情况下,对话框会在视图中(以及 DOM 访问中)隐藏,只有设置 open 属性后,对话框才会显示。

<dialog open>

open 属性可以通过调用 show()close() 方法开启或关闭,任何 HTMLDialogElement 都可以调用这两个方法。

<button id="open">Open Dialog</button>
<button id="close">Close Dialog</button><dialog id="dialog">  <h2>Dialog Title</h2><p>Dialog content and other stuff will go here</p>
</dialog><script>
const dialog = document.getElementById("dialog");document.getElementById("open").addEventListener("click", () => {  dialog.show();
});document.getElementById("close").addEventListener("click", () => {  dialog.close();
});
</script>

目前,Chrome 浏览器已经支持 <dialog> 元素,Firefox 也即将支持(behind a flag)。

上图为 caniuse.com 关于 dialog 特性主流浏览器兼容情况的数据

在 iFrame 中使用 Payment Request API(支付请求 API)

Payment Request API 是支付结算表单的原生替代方案。它将支付信息置于浏览器处理,用来代替之前各个网站各不相同的结算表单,旨在为用户提供一种标准、一致的支付方式。

在 HTML 5.2 之前,这种支付请求无法在文档嵌入的 iframe 中使用,导致第三方嵌入式支付解决方案(如 Stripe, Paystack)基本不可能使用这个 API,因为它们通常是在 iframe 中处理支付接口。

为此,HTML 5.2 引入了用于 iframe 的 allowpaymentrequest 属性,允许用户在宿主网页中访问 iframe 的 Payment Request API。

<iframe allowpaymentrequest>

苹果的图标尺寸

如要定义网页图标,我们可以在文档的 head 中使用 <link rel="icon"> 元素。如果要定义不同尺寸的图标,我们可以使用 sizes 属性。

<link rel="icon" sizes="16x16" href="path/to/icon16.png">
<link rel="icon" sizes="32x32" href="path/to/icon32.png">

这个属性虽然纯粹是个建议,但如果提供了多种尺寸的图标,可以让用户代理(UA)决定使用哪种尺寸的图标。在大多数设备有着不同的“最佳”图标尺寸时尤为重要。

在 HTML 5.2 之前,sizes 属性仅能用于 rel 为 icon 的 link 元素中。然而,苹果的 iOS 设备不支持 sizes 属性。为了解决这个问题,苹果自己引入了一个他们设备专用的 rel appple-touch-icon 用于定义他们设备上使用的图标。

在 HTML 5.2 中,规范定义了 sizes 属性不再仅仅可用于 rel 为 icon 的元素,也能用于 rel 为 apple-touch-icon 的元素。这样可以让我们为不同的苹果设备提供不同尺寸的图标。不过直到现在为止,据我所知苹果的设备还是不支持 sizes 属性。在将来苹果最终支持此规范时,它将派上用场。

新的有效实践

除了新特性之外,HTML 5.2 还将一些之前无效的 HTML 写法认定为有效。

多个 <main> 元素

<main> 元素代表网页的主要内容。虽然不同网页的重复内容可以放在 header、section 或者其它元素中,但 <main> 元素是为页面上的特定内容保留的。因此在 HTML 5.2 之前,<main> 元素在 DOM 中必须唯一才能令页面有效。

随着单页面应用(SPA)的普及,要坚持这个原则变得困难起来。在同一个网页的 DOM 中可能会有多个 <main> 元素,但在任意时刻只能给用户展示其中的一个。

使用 HTML 5.2,我们只要保证同一时刻只有一个 <main> 元素可见,就能在我们的标签中使用多个 <main> 元素。与此同时其它的 <main> 元素必须使用 hidden 属性进行隐藏。

<main>...</main>
<main hidden>...</main>
<main hidden>...</main>

我们都知道,通过 CSS 来隐藏元素的方法有很多,但多余的 <main> 元素必须使用 hidden 属性进行隐藏。任何其它隐藏此元素的方法(如 display: none;visibility: hidden;)都将无效。

<body> 中写样式

一般来说,使用<style>元素定义的内联 CSS 样式会放置在 HTML 文档的 <head> 中。随着组件化开发的流行,开发者已经发现编写 style 并放置在与其相关的 html 中更加有益。

在 HTML 5.2 中,可以在 HTML 文档 <body> 内的任何地方定义内联 <style> 样式块。这意味着样式定义可以离它们被使用的地方更近。

<body>  <p>I’m cornflowerblue!</p><style>p { color: cornflowerblue; }</style><p>I’m cornflowerblue!</p>
</body>

然而仍需注意的是,由于性能问题,样式还是应当优先考虑放在 <head>。参见 规范,

样式元素最好用于文档的 head 中。在文档的 body 中使用样式可能导致重复定义样式,触发重布局、导致重绘,因此需要小心使用。

此外还应该注意的是如示例所示,样式不存在作用域。后来在 HTML 文档中定义的内联样式仍然会应用于之前定义的元素,所以它可能会触发重绘。

<legend> 中的标题元素

在表单中,<legend> 元素表示 <fieldset> 表单域中的标题。在 HTML 5.2 前,legend 元素的内容必须为纯文本。而现在,它可以包含标题元素(<h1>等)了。

<fieldset>  <legend><h2>Basic Information</h2></legend><!-- Form fields for basic information -->
</fieldset>
<fieldset>  <legend><h2>Contact Information</h2></legend><!-- Form fields for contact information -->
</fieldset>

当我们想用 fieldset 对表单中不同部分进行分组时,这个特性非常有用。在这种情况下使用标题元素是有意义的,因为这能让那些依赖于文档大纲的用户可以轻松导航至表单的对应部分。

移除的特性

在 HTML 5.2 中移除了一些元素,具体为:

  • keygen:曾经用于帮助表单生成公钥
  • menumenuitem:曾经用于创建导航与内容菜单

新的无效实践

最后,一些开发实践方式被规定不再有效。

<p> 中不再能包含行内、浮动、块类型的子元素

在 HTML 5.2 中,<p> 元素中唯一合法的子元素只能是文字内容。这也意味着以下类型的元素不再能嵌套于段落标签 <p> 内:

  • 行内块(Inline blocks)
  • 行内表格(Inline tables)
  • 浮动块与固定位置块

不再支持严格文档类型(Strict Doctypes)

最后,我们终于可以和这些文档类型说再见了!

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

掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。

HTML 5.2 有哪些新内容?相关推荐

  1. python使用fpdf2包和pdfrw报包新内容添加到已有的PDF页面上

    python使用fpdf2包和pdfrw包将新内容添加到已有的PDF页面上 目录 python使用fpdf2包和pdfrw包将新内容添加到已有的PDF页面上 #包安装 #新内容添加到已有的PDF页面上 ...

  2. 新内容转入github

    所有新内容已经转入 https://github.com/honggzb/Study-General https://github.com/honggzb/Study2016

  3. 英语和数学不好可以学python-学习Python总是学了新内容又忘了旧的咋办?

    学习Python总是学了新内容又忘了旧的咋办? 比如爬虫的几个解析库,学了pyquery后感觉beautifulsoup又有点忘了,只能大概记得有哪些功能,xpath感觉基本忘光了,最近看了一些sel ...

  4. python笔记 print+‘\r‘ (打印新内容时删除打印的旧内容)

    \r 表示将光标的位置回退到本行的开头位置 配合end=''不换行,实现打印新内容时删除旧内容 1 倒计时举例 1.1 '\r'+end='' import time for i in range(1 ...

  5. 新内容、新交互、新增长:视频云为短视频及电商直播行业高效赋能

    简介:阿里云国际云峰会重磅发布 在 6 月 8 日举行的 2021 阿里云国际云峰会(2021 ALIBABA CLOUD SUMMIT)上,阿里云发布了直播解决方案等 20 多种产品.解决方案以及升 ...

  6. “新内容 新交互”全球视频云创新挑战赛复赛启幕

    简介:驱动未来技术浪潮! 2021年5月,由阿里云联合英特尔共同主办,与优酷战略合作.天池平台承办的"新内容 新交互"全球视频云创新挑战赛初赛圆满落幕.经过近三个月的激烈角逐,52 ...

  7. 新内容,新交互”全球视频云创新挑战

    简介:40万奖金池,视频分割等你来战,直播.网课.vlog等你来秀 新内容,新交互"全球视频云创新挑战,40万奖金池,视频分割等你来战,直播.网课.vlog等你来秀! 点击链接直达报名通道: ...

  8. 为什么自己编写的页面总是在那里抖动_SEO排名,为什么旧页面比新内容排名高?...

    在SEO日常工作中,我们经常遇到这样一种现象,那就是旧的页面排名总是比新的页面排名要好.这为SEO人员的工作带来了诸多挑战,而实际上它是由于多种因素产生的,不能一概而论之. https://www.b ...

  9. MySQL 8.0.12 有什么新内容?

    关注"数据和云"获得更多内容 引言 时隔三个月,MySQL 8.0.12 有什么新内容? 今年4月份,MySQL突然直接从8.0.5跳过多个版本号到8.0.11,直接宣布8.0.1 ...

  10. jQuery 往table添加新内容有以下四个方法:

    Query 添加新内容有以下四个方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() ...

最新文章

  1. C#的方法的参数修饰符详解
  2. jquery获取服务器控件的值
  3. 成功解决python\ops\seq2seq.py TypeError: ms_error() got an unexpected keyword argument 'logits'
  4. java横线_知识点:java一些方法会有横线?以Date 过期方法为例
  5. java 连接 sql2005,java与sql server2005 连接有关问题
  6. 玩玩机器学习5——构造单层神经网络解决非线性函数(三次函数)的曲线拟合
  7. Oracle数据库之间数据同步 -- DBLink
  8. VC++多线程工作笔记0007---线程间同步机制2
  9. 读书笔记_打开量化投资的黑箱10
  10. vlookup 公式使用及常见问题
  11. 文件拷贝--单一文件过大
  12. Log4j的配置与使用详解
  13. CCF CSP 201809-1 卖菜 题解
  14. 巴西龟饲养日志----六月底乌龟状况
  15. 如何画热图(heatmap)
  16. 百岁老人畅谈百年交大桥梁[转]
  17. 百度非企渠道开户怎么玩?
  18. 2个月面试腾讯、B站、网易等11家公司的面经总结!经典好文
  19. 赛维时代跨境电商店铺锐减-成都扬帆跨境电商
  20. 约瑟夫环算法(JAVA)

热门文章

  1. C语言指针的高级操作
  2. 关于修改android studio的gradle目录
  3. 数据结构上机实践第14周项目1 - 验证算法(折半查找)
  4. unity 实现手机振动_unity 调用android的震动
  5. 论坛指定portal.php,去除Discuz论坛域名后面的/forum.php或portal.php
  6. android p下载地址,Android P发布,4款国产手机可体验,附下载地址
  7. 怎么在大数据里面删除不了_数据库删除大数据怎么操作
  8. ajax返回功能,jquery – 记得ajax在点击返回按钮时添加的数据
  9. python中怎样获得unicode_如何在Python中获取unicode月份名称?
  10. python查看mongo库容量_mongo查看数据库空间大小