为什么HTML5建议将代码元素放在pre中?

koj*_*iro 63 html css code-formatting

HTML5文档建议code元素放在pre元素中,但我不明白这比使用代码元素和CSS更好还是更具语义.在他们自己的例子中:

<pre><code class="language-pascal">var i: Integer;
begin
   i := 1;
end.</code></pre>
Run Code Online (Sandbox Code Playgroud)

也可以写(对浏览器的默认值做一些假设pre):

<style>
code {
    display: block;
    white-space: pre;
}
</style>
…
<code class="language-pascal">var i: Integer;
begin
   i := 1;
end.</code>
Run Code Online (Sandbox Code Playgroud)

即使pre是有区分代码从代码内联串,我不认为它是一个更语义选择,而不是指定块岬code一类.

pre建议使用CSS解决方案是否有特定原因?

Zet*_*eta 71

<code>仅代表"计算机代码片段".它最初被认为是简单的代码片段,如i++<code>.

<pre> "代表预先格式化的文本块,其中结构由排版约定而不是元素表示".它的最初目的只不过是这样:提供与作者给出的文本相同的文本,例如

+----------------------------------+
|                                  |
| WARNING! PREFORMATED TEXT AHEAD! |                      =o=
|                               __;                                  ~^
+----------------TT------------°
                 ||    _____________    _____________________
                 ||    | TO GRANDMA  >  | TOTALLY NOT A TRAP  > 
  oÖo            ||    |°°°°°°°°°°°°    °°°°°°°°°°°°°°°°°°°°°          
   |  ö          ||    |                |      .mm,                    
~"""~"""~"""~"""~"""~"""~~"""~"""~"""~"""~"""~"""~"""~"""~"""~""..MWMWc...~"""~""

您不需要彼此使用.<pre>有自己的角色,就像<code>有自己的角色一样.但是,这<pre>是一种表明给定片段中的空白区域很重要的方式,这<code>是一个缺失的角色.

但是,回到你的问题:注意确切的措辞:

下面的例子说明了如何一个代码块可以使用被标记precode元素.

<pre><code class="language-pascal">var i: Integer;
begin
   i := 1;
end.</code></pre>
Run Code Online (Sandbox Code Playgroud)

在该示例中使用类来指示所使用的语言.

它说可以,不应该.你可以随心所欲地做到这一点.W3C不建议以任何方式使用,但我个人建议您使用<pre><code>....

进一步说明

每当空格是代码的一部分和代码的结构时,您应该声明应保留此结构.由于代码中的结构是由排版约定(制表符,换行符,空格)给出的,我个人建议您使用<pre><code>,即使它可以说是DOM中的更多代码和另一个节点.但是,每当缺少空白区域会使代码不完美时,这是必要的.

除此之外,您可以轻松区分内联代码和代码块而无需检查element.className,并且一些JS语法高亮显示器可以很好地工作<pre><code>...<code>自动剥离.

此外,如果您使用<code>with 的常规规则white-space:pre;,则无法在没有其他类的情况下将其用于内联片段.如果你要创建一个类,那么与之相比,你没有赢得任何东西<pre><code>.

参考

  • W3C:HTML5:4.5.12代码元素(W3C Recommendation 2014年10月28日)

    code元素代表计算机代码的一个片段.这可以是XML元素名称,文件名,计算机程序或计算机可识别的任何其他字符串.

  • W3C:HTML5:4.4.3前要素(W3C建议2014年10月28日)

    所述pre元件代表预格式化的文本块,其中结构是由印刷约定而不是由元素表示.

  • 每当空格是代码的一部分和代码的结构时,您应该声明应保留此结构.由于代码中的结构是由排版约定*(制表符,换行符,空格)给出的,我个人建议你使用`<pre> <code>`,即使它可以说是DOM中的更多代码和另一个节点.(除此之外,你可以很容易地在内联代码和块之间进行区分,而且一些JS语法高亮显示器仅在`<pre> <code> ...`上工作,并自动剥离`<code>`. (2认同)
  • +1如果您的目标是语义标记,我同意Zeta的建议,看作"<pre>"表示预格式化,"<code>"表示代码片段,当您标记的是预先格式化的代码时,使用`<pre> <代码>`有道理.如果你的目标是干净的标记,我会选择css`white-space:pre;`解决方案. (2认同)

Que*_*tin 12

CSS用于演示.

在许多编程语言中,空白是重要的(不是表示性的).

  • 还应该注意的是,即使在编程语言中,(技术上讲)不需要*空白区域,因此人们需要容易地阅读它. (3认同)
  • 这个答案让我想知道`<pre>`是否完全是语义标记,或者更像是`<b>`,`<i>`(即早期HTML版本的纯粹代表性遗留). (3认同)
  • @FabianBarney,嗯......是的,我知道.这就是我所说的"......即使在编程语言中,白色空间也不是*需要*......".我*从来没有*说过任何编程语言在技术上都不需要空白区域. (2认同)