为什么Visual Studio的Format Document工具将标题标记放在两行上?

Gle*_*ven 13 html formatting visual-studio

所以,如果我有这样的HTML标题

<h2>A Heading</h2>
Run Code Online (Sandbox Code Playgroud)

我跑Edit -> Format Document它最终看起来像这样

<h2>
    A Heading</h2>
Run Code Online (Sandbox Code Playgroud)

为什么是这样?它不会对其他块元素执行,但它会对其他内联元素执行此操作(例如<label>).

更新:澄清一下,我的意思是为什么这是默认设置,而不是更改设置的设置

Cᴏʀ*_*ᴏʀʏ 16

这样做是因为它们是默认设置.在较旧的浏览器中,有时在子元素之后的新行上具有块或内联元素的结束标记(有效地留下空格,例如非中断空格或空文本节点)会影响页面的呈现方式.我以前遇到过麻烦.例如,如果您的锚点有边框或填充,则以下内容可能会出现问题:

<a>
    <img src="..." />
</a>
Run Code Online (Sandbox Code Playgroud)

有时在链接的底部会有额外的间距.将其更改为以下内容将删除额外的间距:

<a><img src="..." /></a>
Run Code Online (Sandbox Code Playgroud)

基本上,愚蠢的格式化解决了浏览器中的一些渲染问题,如IE6那样的伪劣CSS支持.如果您有IE6,请查看我创建的这个JSFiddle来说明问题.图像底部有额外的间距,锚标签存在于自己的行上.

来自Scott Guthrie的博客:

如果格式化选择的标记并看到一个close标记没有被移动到一个单独的行 - 这是因为前面的标记的末尾和终止标记之间没有空格,因此VS小心不要更改它以避免更改呈现语义.

因此,与Visual Studio中的设计器的格式或输出一样丑陋,它更可能在比正确格式化标记(例如XHTML)更多的浏览器中工作.

要在Visual Studio中更改格式的默认值,请转到:

Tools > Options > Text Editor > HTML > Format > Tag Specific Options...
Run Code Online (Sandbox Code Playgroud)

在"默认设置"下,将客户端和服务器"标记支持内容"选项的"换行符"选项更改为"之前和之后".