答案 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。在该模式下,pre
和code
在开始时都会有额外的行。但是,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>