如何使用CSS使另一个标签的行为与pre标签完全相同?

时间:2011-04-28 21:24:26

标签: html css pre

我希望<code>代码的行为类似于<pre>代码。但问题是我在块的开头有一个换行符。我如何摆脱那次换行?

这显示了我的意思......

http://jsfiddle.net/6NmPN/

3 个答案:

答案 0 :(得分:4)

这似乎是一个浏览器错误。参见例如this page。 SGML(以及HTML)表示浏览器需要在开始标记之后立即删除换行符,或者紧跟在结束标记之前。但似乎大多数浏览器(注意:并非所有浏览器)仅在<pre>标记上遵守此要求,而不在<code>标记等其他标记上。

所以,似乎你无能为力。我能想到的唯一可能的解决方案是使用XHTML严格。这是XML,而不是SGML。也许浏览器会平等对待所有元素。我不确定,这只是一个想法。

答案 1 :(得分:1)

为了清楚起见,这不是一个浏览器错误。 HTML5规范针对the pre element

说明了这一点
  

在HTML语法中,是一个领先的换行符   紧随其后的人物   剥离前元素开始标记。

并且在解析器的树构造阶段,对于in body模式:

  

标记名称为以下之一的开始标记:   “pre”,“listing”

     

...

     

为令牌插入HTML元素。

     

如果下一个标记是U + 000A LINE FEED(LF)字符标记,则忽略   那个标记然后继续下一个   一。 (Prelines开头的Newlines   块被忽略作为创作   便利性。)

     

...

正如其他人所说,没有办法用CSS模仿这种行为。当然,您可以使用JavaScript删除<code>元素的所有初始换行符。

请注意,"In the HTML syntax ..."。如果页面是符合XHTML的并且它是以XML内容类型提供的,则不会发生这种情况。例如应用/ XHTML + XML。在该模式下,precode在开始时都会有额外的行。但是,IE9之前的IE版本不支持此功能。

答案 2 :(得分:-3)

如果你在代码的chrome中查看inspect元素:

<body>
  <pre>foo 1
foo  2
foo 3
</pre>
<br>
<code>
bar 1
bar  2
bar 3
</code>
</body>

它会删除pre中第一个字符之前的所有whitespce,但不会删除代码标记中的所有whitespce。

尝试在代码标记中执行此操作:

<code>bar 1
bar  2
bar 3
</code>