HTML 浏览器无法很好地呈现空 DIV

HTML empty DIVs not well rendered by browsers

我收到有时包含以下代码的 XHTML 文档:

<div align="center" />

我的问题是浏览器(Firefox 38.0.1,Chrome 43.0.2357.65)将此代码显示为开始 <DIV> 标记,而不是像我预期的那样显示为空 div(<DIV></DIV>)。因此,文档的其余部分完全乱七八糟。

是浏览器错误还是 XHTML 功能?该代码看起来完全合法(虽然毫无意义,但我不是生产者)并被 XML 解析器(Perl XML::LibXML、https://validator.w3.org/check)接受。

您可以使用以下 XHTML 代码(由 https://validator.w3.org 验证)在您的浏览器中查看它的外观。最后一个 DIV 显示为带边框的文本,这是不应该的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Foo</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
  <body>
    <div style="border: 1px solid black; color: red;">
      <div />
      <div>Should be red and inside the border.</div>
    </div>
    <div>Should be outside the border and not red.</div>
  </body>
</html>

与 XHTML Strict Doctype 相同。

解决办法是,不要这样做!

在HTML中,一个<div>标签是一个开始标签,不管它是否包含// 被视为错误并被丢弃。

在 XHTML 中,这将是一个完整的 div,是的。但是,如果 XHTML 文件以 application/xhtml+xml MIME 类型提供,则它们只是 XHTML 文件。
文件的内容是什么并不重要;如果文件以 text/html 的 MIME 类型提供,就浏览器而言,它是一个 HTML 文件。

文件扩展名为 .xhtml 的普通文件被视为 XHTML,.html 被视为 HTML。如果您使用 PHP 或 ASP.NET 等系统,您需要为 MIME 类型发送适当的 HTTP header,否则它将使用默认值(通常是 text/html ).