我什么时候可以安全地在HTML5中使用新的<main>元素?

ric*_*uck 28 html html5 specifications semantic-markup

在12月16日,该<main>元素的HTML5扩展规范已经被称为编辑器草案提交给了W3C.摘要如下:

此规范是HTML5规范[HTML5]的扩展.它定义了用于标识文档主要内容区域的元素.除非本规范明确覆盖,否则HTML5规范中的所有规范性内容均旨​​在成为本规范的基础.

主要元素使用诸如"content"和"main"之类的id值来规范识别文档主要内容部分的通用实践.它还定义了一个HTML元素,它体现了WAI-ARIA [ARIA] landmark role = main的语义和功能.

例:

<!-- other content -->

<main>

  <h1>Apples</h1>
 <p>The apple is the pomaceous fruit of the apple tree.</p>

 <article>
 <h2>Red Delicious</h2>
  <p>These bright red apples are the most common found in many
  supermarkets.</p>
  <p>... </p>
  <p>... </p>
  </article>

  <article>
  <h2>Granny Smith</h2>
  <p>These juicy, green apples make a great filling for
  apple pies.</p>
  <p>... </p>
  <p>... </p>
  </article>

</main>

<!-- other content -->
Run Code Online (Sandbox Code Playgroud)

它有所有信息,我觉得我应该开始将它合并到网页中.据我所知,HTML5规范只是渐进式的,新功能已被"固定"到规范而没有升级.我想这意味着浏览器会在可能的时候开始实现它 - 问题是,这需要多长时间以及我如何知道所有浏览器都支持它?我现在应该像现在这样构建它并使用polyfill吗?

Que*_*tin 33

支持<main>将非常像支持HTML 5中引入的任何其他新容器元素.

  • 足够新的浏览器将支持它.
  • 较旧的浏览器会让您对其进行样式设置,display: block并为您提供视觉效果
  • 如果没有JavaScript填充程序(其工作方式与所有其他新容器元素的填充程序完全相同),旧版本的IE将完全不支持它.

"when"取决于您需要什么级别的浏览器支持以及您对JS Shim的依赖程度.

  • 元素是*不是*(还)HTML5草案的一部分(更不用说WHATWG"生活标准").但是根据答案中提供的规定,它几乎可以像`<dwim>`元素一样安全使用,除了`<main>`*may*实际上可以通过规范和浏览器,可能是定义的意味着,默认呈现以及令您惊讶的预期浏览器行为. (4认同)
  • @SteveFaulkner,你在这里引用的文件说:"除了正在进行的工作之外,引用这个文件是不恰当的."(此外,截至目前,它并没有描述"主要"元素,而是列出了"主要内容".没有专用元素的常用习语".) (2认同)

Alo*_*hci 11

现在,我会小心使用它.

对于提案的未来,真正重要的是在浏览器中实现.特别是,因为<main>是一个提议的块级元素,它将需要更改HTML5解析器实现,并为其提供main的默认ARIA角色.

如果没有默认的ARIA角色,那么元素就没有意义,尽管现在使用它是一种合理的方法.

解析器更改确实需要一点点谨慎.请记住,</p>标签是可选的.现在假设您在"主要"内容之前决定要一段序言.你可以写:

<!DOCTYPE html>
<body>
  <p> This is my page preamble ...
  <main>
    My main content ...
    <div>
       A story ...
    </div>
  </main>
</body>
Run Code Online (Sandbox Code Playgroud)

如果浏览器实现<main>元素,<main>标记将自动关闭<p>元素,在DOM中,<p>元素和<main>元素将成为彼此的兄弟.该<div>元素和它的内容将是一个子<main>元素.即DOM将是:

HTML
 +--HEAD
 +--BODY
     +--P
     |  +--This is my page preamble ... 
     +--MAIN
         +--My main content ...
         +--DIV
             +--A story 
Run Code Online (Sandbox Code Playgroud)

但是,现在在浏览器中,它<main>成为元素的子元素<p>,而"我的主要内容......"是<main>元素的子元素,而<div>元素则不是.即DOM具有以下结构:

HTML
 +--HEAD
 +--BODY
     +--P
     |  +--This is my page preamble ...
     |  +--MAIN
     |      +--My main content ... 
     +--DIV
        +--A story 
Run Code Online (Sandbox Code Playgroud)

当然,现在,通过</p>在序言段落中明确使用标签可以很容易地避免这种情况,但这对于粗心大意来说却是一个陷阱.

  • @SpadarShut - 它没有.当我说"块级"时,我的意思相当于HTML4 DTD的`%block;`实体定义,而不是CSS显示属性.HTML5实际上并没有相同的概念,但是"不是内容元素"的流内容元素也是类似的. (2认同)

Ste*_*ner 8

HTML 5.1 的主要因素,现在是实施中的Webkit.验证支持即将推出.期待Firefox的实施很快.