21

我注意到很多网站,包括 SO,使用 XHTML 作为他们的标记语言,然后不遵守规范。只需浏览 SO 的源代码,就会缺少段落、无效元素等的结束标签。

那么,如果工具(和开发人员)要生成无效标记,是否应该使用 XHTML 文档类型?浏览器是否应该更坚定地接受糟糕的标记?

在任何人大喊伪君子之前,我的博客有一个涉及 captha 的无效标记(或者我上次检查时确实如此),其中涉及到 noscript 标签的样式。

4

14 回答 14

16

使用有效标记的原因有很多。我最喜欢的是它允许您将验证用作回归测试的一种形式,一旦错误达到临界质量,就可以防止“delta rot”的标记等价物导致真正的渲染问题。确实,允许诸如拼写错误和错误嵌套/未关闭的标签之类的“懒惰”错误累积是很草率的。有效标记是识别热情的程序员的一种方式。

还有调试问题:有效标记还为您提供了一个稳定的基线,可以用来解决不可避免的跨浏览器兼容性问题。任何珍惜时间的 Web 开发人员都不应该在没有首先确保标记至少在语法上有效的情况下开始调试浏览器兼容性问题——任何其他无效标记都应该有充分的理由出现。

(顺便说一句,stackoverflow.com 未能通过这两项测试,并且拒绝了解决问题 建议。)

综上所述,要回答您的具体问题,除非您计划生成有效(或至少格式正确)的标记,否则可能不值得使用其中一种 XHTML 文档类型。XHTML 的主要优势源于 XHTML 是 XML 的事实,它允许通过使用 XML 的工具和技术对其进行处理和转换。如果您不打算使您的 XHTML 格式良好的 XML,那么选择该 doctype 就没有什么意义了。最新的 HTML 4 规范可能会满足您的所有需求,而且更加宽容。

于 2008-08-06T14:46:40.660 回答
2

我们应该始终尝试使其根据标准进行验证。我们将确保该网站将在当前浏览器和未来浏览器上正常显示和运行。

于 2008-09-02T09:56:54.997 回答
2

我不认为,如果你指定了一个文档类型,那么没有任何理由不遵守这个文档类型。

使用 XHTML 使自动错误检测变得容易,每次更改都可以自动检查无效标记。这可以防止错误,尤其是在使用自动生成的内容时。对于使用模板引擎(JSP、ASP.NET StringTemplate 等)的 Web 开发人员来说,复制/粘贴一个关闭标记太少或太多是非常容易的。当这是您唯一的错误时,可以立即检测并修复它。我曾经为一个每页有 165 个验证错误的网站工作,其中 2 或 3 个是实际错误。这些在其他错误的混乱中很难找到。自动验证可以从源头上防止这些错误。

不用说,选择一个标准并坚持它永远不会有利于与其他系统(屏幕抓取器、屏幕阅读器、搜索引擎)的互操作性,而且我从来没有遇到过这样的情况:使用 CSS 解决方案的有效语义 XHTML 对所有人来说都是不可能的主流浏览器。

显然,在处理复杂系统时,并不总是可以坚持使用您的 doctype,但这主要是由于开发这些系统的不同部分的不同团队之间的不正确沟通,或者很可能是遗留系统。在最后一种情况下,最好隔离这些情况并相应地更改您的文档类型。

务实而不是仅仅因为有人这么说就坚持 XHTML 是件好事,不计成本,但以目前关于 CSS 和浏览器、测试和验证工具的知识,大多数时候收益远大于成本。

于 2008-09-02T10:11:45.473 回答
2

你可以说我对 XHTML 有效性有强迫症。我发现代码无效的大部分问题来自于程序员不知道 HTML 和 XHTML 之间的区别。我一直在编写 100% 有效的 XHTML 和 CSS 或一段时间,并且在使用其他浏览器时从未遇到过任何重大的渲染问题。如果您保持所有内容有效,并且不要尝试任何太奇特的 css 明智,您将节省大量修复时间。

于 2008-09-15T15:34:30.250 回答
1

我根本不会使用 XHTML 来减轻自己的哲学压力。无论如何,并不是任何浏览器都将其视为 XHTML。

如果页面以 application/xhtml+xml 格式发送,浏览器将拒绝糟糕的标记,但它们很少这样做。这可以。

我会更关心诸如 CSS 和 JavaScript 与 Stack Overflow 的内联使用之类的事情,只是因为它们使维护变得更加困难。

于 2008-08-06T14:29:44.780 回答
1

尽管我相信努力实现有效的 XHTML 和 CSS,但由于多种原因,这通常很难做到。

  • 首先,一些内容可以通过 AJAX 加载。有时,片段没有正确插入到现有的 DOM 中。
  • 您正在查看的 HTML 可能并非全部在同一个文档中生成。例如,页面可以由多个组件或模板组成,然后在浏览器呈现它之前组合在一起。这不是一个借口,但您不能假设您看到的 HTML 是一次性手动编码的。
  • 如果 Markdown 生成的某些代码无效怎么办?你不能责怪 Stack Overflow 没有生成有效的代码。
  • 最后,DOCTYPE 的目的不是简单地说“嘿,我正在使用有效代码”,而是让浏览器了解您正在尝试执行的操作,以便它至少可以接近正确解析该信息。

我认为大多数开发人员不会指定 DOCTYPE,然后明确地不遵守它。

于 2008-08-06T14:35:35.923 回答
1

虽然我同意“如果它渲染得很好,那就不用担心”的说法,但是遵循标准是有好处的,即使它现在可能还没有得到完全的支持。您仍然可以使用 Table 进行布局,但它不好是有原因的。

于 2008-08-06T14:42:25.130 回答
1

No, you should not use XHTML if you can't guarantee well-formedness, and in practice you can't guarantee it if you don't use XML serializer to generate markup. Read about producing XML.

Well-formedness is the thing that differentiates XHTML from HTML. XHTML with "just one" markup error ceases to be XHTML. It has to be perfect every time.

If "XHTML" site appears to work with some errors, it's because browsers ignore the DOCTYPE and interpret page as HTML.

See XHTML proxy that forces interpretation of pages as XHTML. Most of the time they fail miserably. This is one of the reason why future of XHTML is uncertain and why development of HTML has been resumed.

于 2008-10-11T13:16:24.397 回答
0

这取决于。我的博客有这个问题, YouTube 视频导致 XHTML 无效,但它呈现得很好。另一方面,我有一个“有效 XHTML”链接,并且“有效 XHTML”声明和无效 XHTML 的组合并不专业。

由于 SO 并不声称是有效的,我认为这是可以接受的,但就我个人而言,如果我是 Jeff,我会感到困扰并尝试修复它,即使它在现代浏览器中看起来不错,但有些人宁愿继续前进并实际完成任务而不是修复不存在的错误。

于 2008-08-06T14:25:40.577 回答
0

只要它在 IE、FF、Safari 中运行(在此处插入其他浏览器)就可以了。验证不如让它在多个浏览器中正确呈现重要。例如,仅仅因为它是有效的,并不意味着它可以在 IE 中正常工作。

在您的网站上运行 Google Analytics 或类似工具,查看您的用户使用哪种浏览器,然后判断您最需要支持哪些浏览器,并在您有空闲时间时担心不太重要的浏览器。

于 2008-08-06T14:29:09.697 回答
0

我说,如果它渲染得很好,那么它是否像素完美都没关系。

建立一个网站并按照您想要的方式运行需要一段时间,返回并进行更改会稍微改变页面呈现的方式,然后您必须解决这些问题。

现在,我并不是说您应该构建草率的网页,但我认为没有理由修复未损坏的内容。浏览器不会在不久的将来随时放弃对纠错的支持。

于 2008-08-06T14:29:56.543 回答
0

我不明白为什么当某些浏览器在正确呈现标准代码时仍然存在问题时,每个人都试图让他们的网站符合标准。我从事网页设计已经有 10 年了,我停止了双重编码(阅读:hacking css),并改变了愚蠢的东西,以便我可以在我的网站上放置一个按钮。

我相信使用 < div> 无论如何都会导致您无效,并且如果没有它,执行任何主要的 JavaScript/AJAX 都会变得有点困难。

于 2008-08-06T14:30:23.203 回答
0

有很多标准,而且它们的“执行”或支持很差,我认为这并不重要。不要误会我的意思,我认为应该有标准,但因为它们没有被强制执行,没有人遵循它们,这是一个巨大的螺旋式下降。

于 2008-08-06T14:33:33.947 回答
0

对于 99.999% 的网站来说,这真的无关紧要。唯一一次重要的是,我通过 HTMLTidy 运行 HTML 输入以对其进行 XHTML 化,然后对其进行处理。

几乎,这是老程序员的公理:不信任任何输入。

于 2008-08-06T14:37:08.603 回答