我希望<code>
标签表现得像<pre>
标签。但问题是我在块的开头有一个换行符。我如何摆脱那个换行符?
这说明了我的意思...
这似乎是一个浏览器错误。参见例如这个页面。SGML(以及 HTML)表示浏览器需要在开始标记之后或结束标记之前立即删除换行符。但似乎大多数浏览器(注意:并非全部)仅在<pre>
标签上遵守此要求,而不是在其他标签上,例如<code>
标签。
因此,您似乎无能为力。我能想到的唯一可能的解决方法是使用严格的 XHTML。那是 XML,不是 SGML。也许浏览器会平等对待所有元素。我不确定,这只是一个想法。
需要明确的是,这不是浏览器错误。HTML5 规范为pre 元素说明了这一点
在 HTML 语法中,紧跟在 pre 元素开始标记之后的前导换行符会被去除。
在解析器的树构建阶段,对于in body模式:
一个开始标签,其标签名称是以下之一:“pre”、“listing”
...
为令牌插入一个 HTML 元素。
如果下一个标记是 U+000A LINE FEED (LF) 字符标记,则忽略该标记并继续下一个标记。(为方便创作,忽略 pre 块开头的换行符。)
...
正如其他人所说,没有办法用 CSS 模拟这种行为。<code>
当然,您可以使用 JavaScript 删除元素的任何初始换行符。
请注意,这表示,"In the HTML syntax ..."
。如果页面符合 XHTML并且使用 XML 内容类型提供服务,则不会发生这种情况。例如应用程序/xhtml+xml。在这种模式下,两者pre
和code
都会在开始时有额外的行。但是,这在 IE9 之前的 IE 版本中不受支持。
如果您查看代码的 chrome 中的检查元素:
<body>
<pre>foo 1
foo 2
foo 3
</pre>
<br>
<code>
bar 1
bar 2
bar 3
</code>
</body>
它会删除 pre 中第一个字符之前的所有 whitespce,但不会删除 code 标记中的所有 whitespce。
尝试在代码标签中执行此操作:
<code>bar 1
bar 2
bar 3
</code>