2013-05-02 27 views
1

我喜欢干净的代码,我相信大多数开发人员都这样做。我遇到了一个问题,我的Meta标签都出现在一条线上,而不是分开。MasterPage输出在一行中的Meta标签

我有一个名为“client.master”文件,这里是头部代码:

<head runat="server"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
    <meta name="apple-mobile-web-app-capable" content="yes" /> 
    <meta name="apple-mobile-web-app-status-bar-style" content="default" /> 
    <meta name="format-detection" content="telephone=no" /> 

    <script src="/scripts/script1.min.js" type="text/javascript"></script> 
    <script src="/scripts/script2.min.js" type="text/javascript"></script> 

    <link rel="apple-touch-icon" href="/images/home-screen.png" /> 
    <link rel="apple-touch-startup-image" href="/images/home-startup.png" /> 
    <link href="/css/thirdparty/xxxxx.min.css" type="text/css" rel="stylesheet" /> 
    <link href="/css/design.css" type="text/css" rel="stylesheet" /> 

    <asp:ContentPlaceHolder ID="headContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 

这看起来非常干净,漂亮。但是,当查看页面的源代码时,输​​出显示<meta>标记和<link>标记全部在一行上。 脚本标签不是

这里是我的代码的输出:

<!DOCTYPE html> 
<html> 
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta name="apple-mobile-web-app-capable" content="yes" /><meta name="apple-mobile-web-app-status-bar-style" content="default" /><meta name="format-detection" content="telephone=no" /> 

    <script src="/scripts/script1.min.js" type="text/javascript"></script> 
    <script src="/scripts/script2.min.js" type="text/javascript"></script> 

    <link rel="apple-touch-icon" href="/images/home-screen.png" /><link rel="apple-touch-startup-image" href="/images/home-startup.png" /><link href="/css/thirdparty/xxxxx.min.css" type="text/css" rel="stylesheet" /><link href="/css/design.css" type="text/css" rel="stylesheet" /> 

    <title> 
     Login 
</title></head> 

通知的<meta><link>标签都在一行<title>标签有换行符。

这里是标题的Default.aspx页面的HTML:

<asp:Content ID="title" runat="server" ContentPlaceHolderID="title"> 
    Login 
</asp:Content> 

我的假设是因为<meta>标签和<link>标签是自我封闭和<script>标签与</script>结束。

是解决此问题的唯一方法,以</meta>关闭我的<meta>标记。关闭元标记和链接标记时,哪种方式可以被视为标准?或脚本标签?

在此先感谢您的帮助!

回答

1

如果你真的想跟着规范,linkmetavoid元素,它们不能关闭标签,如果你的DOCTYPE是HTML5,你可以使用自闭合标签<meta ..../>,但默认的方式是使用它只作为开始标记,这是一个正确的符合使用empty元素不需要一个结束标记(void之一,因为我说,不能有它)。

脚本不是void元素,而是empty之一,因此您只能使用开始标记,自动结束标记或开始和结束标记。

请注意,对于具有类型为空的内容模型的元素,确实意味着它可以是空的,而不是它应该;那可能就是所谓的void

至于为什么asp解析器会对你的metas做这件事,我想不出一个理由。我理解你对干净代码的偏好,但如果它有任何帮助,试着认为至少该bug导致文件大小减少:o)

请记住,所有这些都适用于HTML5,XHTML将无效和不同的空模型。