什么是 XHTML 中所有有效的自闭元素(例如 < br/>)(由主要浏览器实现) ?
我知道 XHTML 在技术上允许任何元素自闭,但我正在寻找所有主流浏览器都支持的元素列表。有关自闭元素(如 < div/>)引起的一些问题的示例,请参见 http://dusan.fora.si/blog/self-closing-tags。
< hr/> 是另一个
你应该看看 XHTML DTD,它们都列出来了。这里是一个快速回顾所有主要的:
<br /> <hr /> <img /> <input />
来自 W3学校参考网站:
<area /> <base /> <basefont /> <br /> <hr /> <input /> <img /> <link /> <meta />
那 <meta>和 <link>呢? 为什么他们不在名单上?
<meta>
<link>
根据经验,不要自动关闭任何打算包含内容的元素,因为这迟早会导致浏览器问题。
那些自然的自我关闭,如 <br>和 <img>,应该是显而易见的。那些不是... 只是不要自我封闭!
<br>
<img>
在这个主题上需要非常小心的一个元素是 <script > 元素。如果你有一个外部源文件,它会导致问题,当你自己关闭它。试试看:
<script
<!-- this will not consistently work in all browsers! --> <script type="text/javascript" src="external.js" />
这在 Firefox 中可以使用,但至少在 IE6中不能使用。我知道,因为我遇到这种情况时,过于热心地自我关闭我看到的每一个元素; -)
IE 的另一个自闭标记问题是 title 元素。当 IE (刚刚在 IE7中尝试过)看到这一点时,它会给用户一个空白页面。不管你怎么“查看源代码”,一切都在那里。
<title/>
我最初是在 XSLT 生成 self 关闭标记时看到这一点的。
每个支持 XHTML 的浏览器(Firefox、 Opera、 Safari、 IE9)都支持 所有元素上的自闭语法。
<div/>,<script/>,<br></br>都可以正常工作。如果它们不能正常工作,那么你就有 超文本标示语言和不适当添加的 XHTMLDOCTYPE。
<div/>
<script/>
<br></br>
DOCTYPE 不会改变文档的解释方式。 < a href = “ http://www.webdevout.net/article/beware-of-xhtml # content _ type”rel = “ noReferrer”> 只有 MIME 类型可以.
返回文章页面
HTML WG 已经讨论过这个问题: 意图是允许 old (HTML-only)浏览器接受 XHTML 1.0文档 指南,并将它们作为 text/html 提供。因此,文档作为 Text/HTML 应该作为 HTML 而不是 XHTML 处理。
事实上,互联网上绝大多数所谓的 XHTML 文档都是作为 text/html提供的。这意味着它们根本不是 XHTML,而是实际上依靠 HTML 解析器的错误处理获得的无效 HTML。所有那些“有效的 XHTML 1.0!”网络上的链接真的是在说“无效的 HTML 4.01!”.
text/html
为了测试使用 XHTML 的 DOCTYPE 是否有真正的 XHTML 或无效的 HTML,请将以下内容放在文档中:
<span style="color:green"><span style="color:red"/> If it's red, it's HTML. Green is XHTML. </span>
它验证,并且在真正的 XHTML 中它工作得很完美(参见: 1 vs 2)。如果你不相信自己的眼睛(或者不知道如何设置 MIME 类型) ,通过 XHTML 代理打开你的页面。
另一种检查方法是在 Firefox 中查看源代码。当斜杠无效时,它会突出显示红色斜杠。
在 HTML5/XHTML5中,这一点没有改变,而且区别更加明显,因为你甚至没有额外的 DOCTYPE。Content-Type是国王。
DOCTYPE
Content-Type
郑重声明,XHTML 规范允许任何元素通过使 XHTML 成为 XML 应用程序来自我关闭: [强调我的]
无论是否使用关键字 EMPTY 声明,任何没有内容的元素都可以使用空元素标记。
XHTML 规范也明确显示了这一点:
空元素必须具有结束标记,或者开始标记必须以 />结束。例如,<br/>或 <hr></hr>
/>
<br/>
<hr></hr>
自闭语法适用于 application/xhtml + xml 中的所有元素。它在 text/html 中的任何元素上都不受支持,但是在 HTML4中为“空”或者在 HTML5中为“ void”的元素无论如何都不会使用结束标记,所以如果在这些元素上加一个斜杠,看起来就好像支持自闭语法一样。
上次我检查的时候,下面是 HTML5中列出的空/void 元素。
适用于作者: area,base,br,coll,command,embed,events source,hr,img,input,link,meta,param,source
无效的作者: 基础字体,bgsound,框架,间隔,wbr
除了 HTML5中的一些新内容之外,这应该可以让您了解在将 XHTML 作为 text/html 提供时可能支持的内容。(只需通过检查生成的 DOM 来测试它们。)
至于作为 application/XHTML + XML 的 XHTML (这使它成为 XML) ,应用 XML 规则并且任何元素都可以是空的(即使 XHTML DTD 不能表达这一点)。
希望这对某些人有所帮助:
<base /> <basefont /> <frame /> <link /> <meta /> <area /> <br /> <col /> <hr /> <img /> <input /> <param />
我不打算对此进行过多的阐述,特别是因为我所写的大多数页面要么是生成的,要么标记确实包含内容。唯一两个曾经给我带来麻烦的是:
对于这个问题,我只是简单地采用了总是给它一个单独的结束标记,因为一旦它出现在 <head></head>中,它并不会真正使您的代码工作起来更加混乱。
<head></head>
这是我最近遇到的大问题。多年来,当脚本来自外部来源时,我总是使用自动关闭的 <script/>标记。但是我最近开始收到关于空表单的 JavaScript 错误消息。经过几天的研究,我发现问题在于(据说)浏览器没有到达 <form>标签,因为它没有意识到这是 <script/>标签的末尾。所以当我把它做成单独的 <script></script>标签时,一切都正常了。为什么不同的网页我在同一个浏览器,我不知道,但它是一个很大的解脱,找到了解决方案!
<form>
<script></script>
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
command
basefont, bgsound, frame, isindex
它们在 HTML5中被称为“ void”元素,它们在 官方 W3规格中列出。
Void 元素是其内容模型在任何情况下都不允许其拥有内容的元素。
截至2013年4月,它们是:
Area,base,br,coll,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr
截至2018年12月(HTML 5.2) ,它们是:
Area,base,br,coll,embed,hr,img,input,link,meta,param,source,track,wbr