如何保持主题的W3C标准合规性


10

编写主题时,请确保它符合XHTML 1.1和CSS 2.1。然后,我添加了插件,该主题不再与XHTMl 1.1兼容。然后,我在CSS中使用了Google API字体,并且该字体已兼容CSS 2.1。

有没有办法可以保持合规性而又不遗漏插件,字体等,还是应该忽略验证错误?

Answers:


5

更正后,您的主题仍然符合XHTML 1.1和CSS 2.1,但是您添加的插件注入了符合要求的其他代码。

不幸的是,如果您使用插件,则没有简单的方法来保持合规性。您能做的最好的事情就是验证您的主题和您亲自负责的所有标记,然后希望其他开发人员花时间来验证自己的工作。

替代方案是您需要做很多工作-您仍然可以使用插件的核心功能,但不允许它们将任何标记输出到浏览器。添加您自己的自定义层,以解开插件涉及的所有内容,并构建您自己的输出缓冲区。这是您控制发送到浏览器的标记样式的唯一方法。

一些插件开始使用HTML 5 ...其他插件正在尝试使用CSS3。如果您安装了这些插件,但没有采取措施对它们的输出进行清理和验证,那么您的站点将停止正确验证。


1
谢谢,我认为我不想选择清理HTML的选项。我可能只需要从自己的站点中删除那些W3C徽章即可:)
James 2010年

哦不一定需要,因为您可以自动获得合规性,请参阅下面的答案。无需麻烦您的主题或插件输出:)
hakre 2010年

+1,您永远不能真正依赖其他人的代码,只希望他们的代码吐出有效的html。
本·埃弗拉德

8

每个插件都将生成它想要生成的代码,其中一些将不符合XHTML 1.1。纠正该错误的唯一合理方法是审核每个人,然后修改违规者或让开发人员进行修改或将您的修改用作补丁。

或者,您可以尝试编写一个过滤器进行清理,但尝试捕获所有特殊情况似乎是我个人噩梦的一个版本,并且这也会影响性能,从而产生可喜的收益。

您是否有一个想要这个的客户/老板,还是只是被认为是“ 物有所值 ”的东西?(是的,对此有些人有强烈的感觉。但是我不是其中之一。)

也就是说,XHT​​ML在网络上失去了“ 金发孩子 ”的地位。甚至Tim Berners-Lee 在2006年也这么说

事后回顾几年,有些事情变得更加清晰。有必要逐步发展HTML。试图使世界转向XML的尝试,包括一次围绕属性值的引号以及空标记和名称空间中的斜杠,都没有用。生成HTML的大型公众没有动弹,主要是因为浏览器没有抱怨。一些大型社区确实发生了变化,并享受着结构良好的系统的成果,但并非全部。重要的是,增量地维护HTML,以及继续过渡到结构良好的世界,并在该世界中开发更多功能。

您可能还希望阅读HTML5比XHTML 1.0更容易编写。在StackOverflow上结束。这是他们的摘要:

就语法而言,当您使用HTML5时,最终得到的是更干净,更易于阅读的标记,该标记始终调用标准模式。当您使用XHTML 1.0(用作text / html)时,您将指定一堆浏览器将自动执行的操作(以便针对糟糕的dtd进行验证)。


这是我的个人网站,主题本身已经很老了。网站和主题对我来说都是业余爱好。到我写一个新主题时,我们可能会在所有主要浏览器中获得相当好的HTML5支持。插件将继续生成不符合要求的标记。我可以尝试清理违规者,但随后插件更新会变得更加困难。感谢您的链接。
詹姆斯

是的,如果它不是出于商业目的,也不是为了展示您保持XHTML遵从性的专业知识,那么我就不必担心。
MikeSchinkel 2010年

我使用网站和服务器作为学习工具。学习与我工作不同的事物。
詹姆斯

mm 听起来像是个无聊的工作。学习似乎是我的全部!:)
MikeSchinkel 2010年

哦,这项工作很有趣,但主要是基于Windows的开发。这更像是C#的突破:)
詹姆斯

2

符合标准并不能保证您的网站可以在所有浏览器中正常工作。忽略标准合规性,而专注于使用尽可能多的浏览器进行测试。


1

您可以缓冲站点的整个输出,然后将其整理成兼容的HTML。最好的是,这可以完全自动化地完成:

您可以在主题初始化或相关挂钩上启用输出缓冲(例如* setup_theme *挂钩)。

这是两个代码片段。第一个显示您开始输出缓冲,稍后读取缓冲:

<?php
ob_start();
?><?php
$buffer = ob_get_clean();
$tidy = tidy_repair_string($buffer);
echo $tidy;
?>

第二个示例显示了一些实际的配置选项:

/* Tiny Configuration */
$config["clean"]         = true;
$config["hide-comments"] = true;
$config["output-xhtml"]  = true;
$config["indent-spaces"] = 2;
$config["tab-size"]      = 2;
$config["wrap"]          = 0;

$buffer = ob_get_clean();
$tidy   = tidy_repair_string($buffer, $config);

echo $tidy;

我敢打赌,已经有这样做的现有wordpress插件。让我们来看看:


有趣。我会试试看。
詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.