哪种 HTML 格式在语义上是正确的?

Which HTML format is semantically correct?

我想知道哪种格式是正确的/最好的HTML?

freeCodeCamp 建议使用第二种格式,但是当我通过 HTML 验证器 运行 该格式时,它会给我错误。

1:

<section id="Hello_world" class="main-section">
    <h1>Hello world</h1>
    <p>To get started with writing JavaScript, open the Scratchpad and write your first "Hello world" JavaScript code:</p>
      <code>
         function greetMe(yourName) { alert("Hello " + yourName); }
         <br>
         greetMe("World");
      </code>
</section>

2:

<section id="Hello_world" class="main-section">
  <header>Hello world</header>
<article>
    <p>To get started with writing JavaScript, open the Scratchpad and write your first "Hello world" JavaScript code:</p>
      <code>
         function greetMe(yourName) { alert("Hello " + yourName); }
         <br>
         greetMe("World");
      </code>
</article>
</section>

我很困惑,因为我认为第一种格式是正确的,但 freeCodeCamp 另有建议。请帮忙

要编写多行 pre-formatted 代码,您应该在 <pre> 元素中使用 <code> 元素,而不使用 <br> 元素。

此外,使用 <article> 而不是 <section> 可能更好,因为内容读起来像是可再分发的——但如果没有更多上下文,就很难分辨。

如果“Hello World”是文章的标题,您应该使用 <h1> 而不是 <header><header> 元素是分节元素,而不是版式元素。

综上所述,我会采取这样的方法:

pre {
  background: #eee;
  padding: 1rem;
}
<article id="hello-world" class="main-section">
  <h1>Hello world</h1>
  <p>To get started with writing JavaScript, open the Scratchpad and write your first "Hello world" JavaScript code:</p>
  <pre><code>function greetMe(yourName) {
  alert("Hello " + yourName);
}

greetMe("World");</code></pre>
</article>

补充说明:

确保您使用的是 HTML5 验证器。如果您尝试使用仅适用于以前版本的 HTML 的验证器来验证 HTML5 代码,您将遇到很多错误。

FreeCodeCamp 在这种情况下是不正确的。我发现学习 HTML 语义的最佳途径是阅读 MDN Web 文档的 HTML Element Reference.