我现在正在构建一个网站,到目前为止,我已经痛苦地强制所有内容都兼容,并且它在浏览器中看起来几乎相同。然而,我开始实现一些第三方/免费的 JavaScript,它们可以执行诸如添加属性之类的操作(例如订单=2)。我可以解决这个问题,但这很痛苦,而且我开始失去确保一切有效的原则。真的,解决这样的问题有什么意义吗?我得到了 Firefox 的 HTMLValidator 插件,并且查看了大多数主要网站(包括这个、google 等),它们不是有效的 XHTML 或 HTML。

有帮助吗?

解决方案

我还没有遇到过添加非标准属性导致任何浏览器中出现渲染问题的情况。

不要尝试解决这些非标准属性。验证器作为工具可以方便地仔细检查代码是否存在无意的错误,但众所周知,即使完全有效的 xhtml 也并不总是能够在浏览器中一致地呈现。很多时候,设计决策要求我们使用浏览器特定的(和非标准的)技巧来实现效果。这就是网络开发人员的生活,大量未经验证的技术驱动网站(谷歌、雅虎等)就证明了这一点。

其他提示

验证对于确定事情何时未能满足您可能同意的标准很有用。如果您故意使用专门添加验证标准之外的内容的工具,显然这不会违反您的个人标准协议。

如果你的老板或客户认为一切都应该返回绿灯,那么这种讨论就会变得更加困难,因为你必须向他们解释上述内容并说服他们这不仅仅是你的懒惰。

也就是说,请确保这不仅仅是因为您懒惰。虽然验证器可能会令人烦恼地不断地提出第三方属性的每个实例,但这并不会使他们提到的其他验证错误无效(哈)。作为双重检查工作的一种方式,通常值得进行扫描。

标准合规性是为了增加您的页面在您未测试的浏览器中运行的机会。这包括屏幕阅读器、您测试的浏览器的下一次更新,以及您测试但已被用户以意外方式配置的浏览器。

验证并不能向您保证任何事情,因为您的页面可能会经过验证,但仍然不够明确,以至于有一天它在某些浏览器上的行为不会像您希望的那样。

然而,如果您的页面确实通过了验证,那么您至少可以通过 XHTML 规范来说明它的行为方式。如果它没有验证,那么您所拥有的只是浏览器编写者之间的一堆非正式约定。

如果您想要做的某件事在一个 HTML 3 中是允许的,但在另一个 HTML 3 中不允许,那么编写有效的 HTML 3 可能比编写无效的 XHTML 更好。

如果您计划利用 XHTML 作为 XML,那么让您的页面有效且格式良好是值得的。否则,普通的旧语义 HTML 可能就是您想要的。无论哪种方式,受众的需求都会超过验证者的需求。

请记住,XHTML 标记在大多数浏览器中的呈现方式与没有它时的呈现方式不同。DOCTYPE 属性确定浏览器呈现的模式并规定允许和不允许的内容。如果您偏离了 XHTML 合规性,请务必在所有浏览器中重新测试。

就我个人而言,我尽可能坚持最新标准,但您必须在时间/金钱与合规性之间进行权衡,这取决于大多数人的个人喜好。

就浏览器而言,XHTML 合规性毫无意义,因为:

  1. 浏览器没有 XHTML 解析器。他们有非版本特定的、与 Web 兼容的 HTML 解析器,可以围绕 http://www.w3.org/1999/xhtml 命名空间。

  2. 一些具有 XML 解析器的浏览器可以将作为 application/xhtml+xml 的 XHTML 标记视为 XML。这将采用 XML 并为元素中的元素提供默认的 HTML 样式和行为 http://www.w3.org/1999/xhtml 命名空间。但是,就解析而言,它与 XHTML 无关。遵循 XML 解析规则,而不是某些 XHTML DTD 的规则。

因此,当您使用 XHTML 标记时,您是在向浏览器提供一些陌生的东西,然后看看它是否按您的预期显示。问题是,您可以使用任何标记来做到这一点。如果它按预期渲染并生成正确的 DOM,那么您就做得很好了。您只需确保牢记 DOCTYPE 切换并确保您不依赖浏览器错误(这样在没有错误的浏览器中事情就不会崩溃)。

XHTML 合规性的好处是语法检查(通过验证)以查看标记的格式是否良好。这有助于避免解析错误。当然,这也可以使用 HTML 来完成,因此在这种情况下 XHTML 没有什么特别的。不管怎样,你仍然需要在浏览器中进行测试,并希望浏览器供应商能够制作出出色的 HTML 解析器来接受各种垃圾。

尝试符合浏览器的期望并不是毫无意义的。HTML5 为这一重大时刻提供了帮助。而且,说到 HTML5,您可以根据需要定义自定义属性。只需在它们前面加上 data- 前缀,如 <p data-order="This is a valid, custom attribute.">test</p> 中所示。

HTML 有效通常对您和浏览器渲染引擎都有帮助。浏览器需要处理的怪癖越少,它们就越能专注于添加新功能。你越严格,你花时间思考为什么这个该死的专有标签在其他浏览器中不起作用的时间就越少。

另一方面,恕我直言,XHTML 更毫无意义,除非您计划将其集成到某些 XML 文档中。由于IE仍然无法识别它,所以坚持下去是没有用的。

我认为编写“有效代码”很重要,因为您通过遵循规则树立了榜样。如果每个开发人员都为 Fx、Safari 和 Opera 编写过代码,我认为 IE 必须比版本 8 更早“开始遵守规则”。

大多数时候我都会尝试编写兼容的代码,在除一种情况外的所有情况下权衡时间/成本与观众的需求。如果您的代码需要符合 503 标准,那么编写符合要求的代码符合您和受众的最佳利益。我遇到过很多屏幕阅读器,当代码稍有偏差时就会崩溃。

就像大多数海报所说的那样,这实际上取决于观众的需求。

无论如何,这并不是毫无意义的,但有足够的理由打破它。在 CSS 开发的初始阶段,如果您的标记有效,这对于诊断浏览器问题非常有用。除此之外,如果您想做某事并且您认为最合适的方法是打破验证,通常没问题。

使用自定义属性的另一种方法是使用“rel”属性,示例请参见 莱特盒 (及其亲属)。

当然,您总是可以继续按照您想要的方式编写它,并确保至少它可以工作。当然,我们已经受过这种心态的煎熬,也亲眼目睹了它的后果, 互联网浏览器 6.

我是这个的忠实粉丝 Mike Davidson 的面向标准的开发方法.

仅仅因为你可以验证你的代码并不意味着你比其他人更好。哎呀,这甚至并不一定意味着你比其他人写出更好的代码。能够完全用 Flash 编写银行应用程序的人是比您更好的编码员。能够将第三方代码集成到复杂的发布环境中的人是比你更好的编码员。将验证视为使用图片完美的语法;它可以帮助你表达你的想法,是良好教育的标志,但它并不像你想到并随后交流的想法和概念那么重要。我所共事过的最有魅力、也可能是最聪明的人来自南方,他经常使用“不是”这个词。这并没有让他变得不聪明,事实上,这让他更令人难忘。所以我想说的是,有很多东西可以用来评判一个人……验证是其中之一,但肯定不是最重要的。

很多人误解这篇文章的意思是我们不应该按照标准编码。显然,我们应该这样做,但这不是真正应该考虑的事情。这 验证军 总是会谴责那些不验证的内容,但验证的意义远不止于有效的代码。

因此,不要失去原则,但请记住,如果您遵循标准,那么您将来陷入问题的可能性就会大大降低。您尝试提供的内容远比其显示方式重要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top