是不是写传统上空的不良习惯的元素自闭标签?
我注意到jQuery(或它是Firefox)将我的一些<span class="presentational"></span> into <span class="presentational" />
现在我的问题是,是否可以像这样写我的标记? 任何浏览器会窒息吗?
就我个人而言,如果<span class="presentational" />
如果它是空的,我认为它看起来更干净。
当你在Firefox中查看源代码时,我假设你的问题与自闭元素上的红色尾部斜杠有关。 如果是这样,你已经陷入了最激烈的一场,但同时也是浏览器制造商与网络开发者之间的战争的积极辩论。 XHTML不仅仅是一个文档的标记。 这也是关于文件如何通过网络提供服务。
在我开始之前; 我努力不去在这里。
XHTML 1.1规范指出,Web服务器应该为XHTML提供Content-Type的application / xhtml + xml。 Firefox会将这些尾部斜线标出为无效,因为您的文档是以text / html而不是application / xhtml + xml的形式提供的。 以这两个例子; 相同的标记,一个作为application / xhtml + xml,另一个作为text / html。
http://alanstorm.com/testbed/xhtml-as-html.php
http://alanstorm.com/testbed/xhtml-as-xhtml.php
Firefox会将meta标记中的斜线标记为用text / html提供的文档无效,并且对于application / xhtml + xml提供的文档有效。
为什么这是有争议的
对于浏览器开发人员来说,XHTML的重点在于您可以将文档视为XML,这意味着如果有人向您发送了某些无效的内容,则说明您不必解析它。 所以,如果一个文档被作为application / xhtml + xml提供,并且内容格式不正确,那么开发人员可以说“不是我的问题”。 你可以在这里看到这个动作
http://alanstorm.com/testbed/xhtml-not-valid.php
当文档作为text / html提供时,Firefox将其视为普通的旧HTML文档并使用原谅,为您解决它,分析例程
http://alanstorm.com/testbed/xhtml-not-valid-as-html.php
所以,对于一个浏览器制造商来说,作为text / html的XHTML是很荒唐的,因为它从来没有被浏览器的渲染引擎视为XML。
多年前,网络开发人员希望不仅仅是标记猴子(声明:我把自己包括为其中之一)开始寻找开发不涉及三次嵌套表的最佳实践的方法,但仍然允许引人注目的设计体验。 他们/我们锁定在XHTML / CSS上,因为W3C表示这是未来,唯一的选择是单一供应商(微软)控制事实标记规范的世界。 真正的邪恶存在于单一供应商,而不是微软。 我发誓。
那么争议在哪里? application / xhtml + xml有两个问题。 首先是Internet Explorer。 在IE中有一个遗留缺陷/功能,其中内容用作application / xhtml + xml将提示用户下载文档。 如果您试图访问上面列出的xhtml-as-xhtml.php,那么IE可能会发生这种情况。 这意味着如果你想使用application / xhtml + xml,你必须浏览器浏览IE浏览器,检查Accepts头并只向那些接受它的浏览器提供application / xhtml + xml。 这听起来没有那么微不足道,而且也违背了Web开发人员所追求的“一次写入”的原则。
第二个问题是XML的严酷性。 这又是其中一种易发火焰的问题,但也有一些人认为单个错误标签或单个字符编码不当不应导致用户看不到他们想要的文档。 换句话说,是的,规范说,如果XML格式不正确,应该停止处理XML,但用户不关心规范,他们关心他们的猫的网站是否被破坏。
针对这个问题添加更多的汽油是XHTML 1.0(不是1.1)规范说XHTML文档可以作为text / html,假设遵循某些兼容性指导原则。 像img标签自动关闭之类的东西。 这里的关键词可能是。 在RFC中,可能意味着可选。 Firefox选择不使用XHTML doctype处理文档,而是使用text / html的内容类型作为XHTML。 然而,W3C验证者会愉快地报告这些文档是有效的。
我会让读者去思考一个文化的同时出现的奇迹/恐怖,这个文化写了一个文档来定义他们可能的意思。
向前进
最后,这就是整个HTML 5的内容。 XHTML成了这样一个政治热点,一群想要推动语言前进的人决定走向另一个方向。 他们为HTML 5制作了一个规范。目前这个规范正在W3C中被淘汰,预计将在未来十年内完成。 与此同时,浏览器供应商正在从正在进行的规范中挑选和选择功能并实施它们。
来自评论的更新
在评论中,Alex指出,如果您要嗅探某些东西,您应该检查Accept标头以查看application / xhtml + xml是否被用户代理接受。
这是绝对正确的。 一般来说,如果你要嗅探,嗅探功能,而不是浏览器。
除了其他答案之外:在IE中,在标记中加入<span />
等元素将导致JavaScript中的DOM遍历方法出现各种问题 。 看看下面的XHTML文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Test</title>
<script type="text/javascript">
function show() {
var span = document.getElementById("span");
alert(span.innerHTML);
}
</script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>
这个想法是,当页面加载时,JavaScript将获得对空跨度的引用并显示其HTML内容。 这将是一个空字符串,对吗? 不在IE中不会。 在IE中,您可以在整个文档中获得跨度后的所有内容:
</P>
<P id=p2>Second paragraph just containing text</P>
另外,第二个<p>
出现在span的childNodes
集合中。 同样的<p>
也在body的childNodes
集合中,这意味着一个节点可以有效地拥有多个父母 。 这对于依赖遍历DOM的脚本来说并不是什么好消息。
我也对此进行了博客。
是。 它是。 在某些情况下,旧版浏览器会造成问题。
<script type='text/javascript' src='script.js' />
在这种情况下,旧的浏览器可能不知道<script>
标签已经结束。
上一篇: Is writing self closing tags for elements not traditionally empty bad practice?