79
<!DOCTYPE html>
...
<link rel='stylesheet' id='basecss-css' href='http://www.someurl.com/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' />

为什么验证器 ( http://validator.w3.org/ ) 拒绝这个?我不知道什么属性是“必需的”?

错误:

错误 408 行,第 142 列:元素链接缺少必需的属性属性。…/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' /> 元素链接的属性:全局属性 href crossorigin rel media hreflang type sizes 此外,title 属性对此有特殊的语义元素。

4

6 回答 6

91

添加

property='stylesheet'

如果您不想将链接移动到<head>文档的。

<link rel='stylesheet' property='stylesheet' id='basecss-css'  href='http://www.someurl.com/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' />
于 2014-12-16T18:46:27.593 回答
82

@stevelove 的建议显然是实用的解决方案,但这里是对“为什么”问题的理论回答:

尽管在旧的 HTML 规范中link元素是无条件无效的,但 HTML5 有更多的允许规则。body根据 HTML 5.1 Nightly (这或多或少是验证器试图跟上的),只要它有一个属性,文档正文中也允许该link元素(无论短语内容是允许的) 。itemprop这似乎使错误信息更加令人费解。部分解释是验证器实际上是针对 HTML5 + RDFa 进行验证,而 RDFa 定义了property属性。问题仍然是验证器检查的具体 RDFa 定义是什么,因为该定义也需要重新定义 HTML 规则。

无论如何,错误消息中的信息已过时。错误消息的更新速度显然不如验证器的基本功能快。

于 2013-08-31T19:47:59.583 回答
43

<link>在里面<body>吗?如果是这样,请尝试将其放在<head>文档顶部。

于 2013-08-31T15:51:30.390 回答
15

W3C HTML5 验证器维护者在这里。正如另一个答案中所指出的,除了检查 HTML5 规范本身的要求外,验证器还检查 HTML+RDFa 1.1 规范中的要求:

http://www.w3.org/TR/html-rdfa/

虽然 HTML 规范本身说link通常不允许在正文中*,但 RDFa 规范说如果link元素具有property属性,则允许在正文中。

所以验证器消息基本上是说,“只有当它有一个属性时,这个link元素才被允许在这里。property但是这个特定link的元素没有property属性。”</p>

* HTML 规范本身也规定,link如果元素具有itemprop属性,则允许在正文中使用该元素——但前提是该link元素没有rel值。(itemprop是“微数据”属性,其用途与 RDFa 属性基本相同property)。

所以我们有两个不同的属性,它们都独立地影响link元素在文档中被允许出现的位置,这使得验证器中的检查逻辑变得复杂,从而难以针对这种情况发出更好、更有帮助的错误消息。

于 2015-02-27T01:11:48.810 回答
1

只是为了将来的需要,这是我的评论:

w3c 页面中,我们有以下评论:

如果使用了 rel 属性,则该元素被限制为 head 元素。当与 itemprop 属性一起使用时,该元素可以在页面的 head 元素和正文中使用,但受微数据模型的约束。

所以这个错误可以通过更改relfor来解决itemprop,因为rel是用于头部,itemprop可以用于身体。

希望它可以帮助某人。

于 2014-12-15T01:51:12.567 回答
0

它希望它在你的脑海中。但是,如果 css 不是太重要而不能立即加载,您会得到 google 的 pagespeed 工具,告诉您将其放在正文的底部。

例如,我使用其中一个 jquery 主题 (redmond) 来设置我的自动完成样式。无需将其放在我的页面顶部,因为它只会减慢其他所有内容。

所以,不要太担心完美的 w3c 验证。

于 2014-12-12T00:05:38.613 回答