Element link is missing required attribute property
<!DOCTYPE html>
...
<link rel='stylesheet' id='basecss-css' href='http://www.someurl.com/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' />
Why is the validator (http://validator.w3.org/) rejecting this? What attribute is "required" that I am not aware of?
The error:
Error Line 408, Column 142: Element link is missing required attribute property. …/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' /> Attributes for element link: Global attributes href crossorigin rel media hreflang type sizes Also, the title attribute has special semantics on this element.
Solution 1:
Add
property='stylesheet'
if you do not want to move your link to the <head>
of the document.
<link rel='stylesheet' property='stylesheet' id='basecss-css' href='http://www.someurl.com/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' />
Solution 2:
The advice from @stevelove is apparently the practical solution, but here’s a theoretical answer to the “why” question:
Although a link
element is unconditionally invalid in body
in older HTML specifications, HTML5 has more permissive rules. According to HTML 5.1 Nightly (which is more or less what the validator tries to keep up with), the link
element is allowed in the document body, too (wherever phrasing content is allowed), provided that it has an itemprop
attribute. This seems to make the error message even more puzzling. Part of the explanation is that the validator is actually validating against HTML5 + RDFa, and RDFa defines the property
attribute. The problem still remains what specific RDFa definition the validator is checking against, since the definition would need to redefine rules for HTML, too.
The information in the error message is outdated, anyway. Error messages are apparently not updated as fast as the basic functionality of the validator.
Solution 3:
Is your <link>
inside the <body>
? If so, try putting it in the <head>
at the top of the document.
Solution 4:
W3C HTML5 validator maintainer here. As pointed out in another answer, in addition to checking requirements in the HTML5 spec itself, the validator also checks against requirements in the HTML+RDFa 1.1 spec:
http://www.w3.org/TR/html-rdfa/
And while the HTML spec itself says link
is normally not allowed in the body*, the RDFa spec says that if a link
element has a property
attribute, it is allowed in the body.
So that validator message is basically saying,「The link
element is only allowed here if it has a property
attribute. But this particular link
element doesn't have a property
attribute.」
* The HTML spec itself does also say that the link
element is allowed in the body if it has an itemprop
attribute—but only if the link
element doesn't have a rel
value. (itemprop
is “Microdata” attribute whose purpose is basically the same as the RDFa property
attribute).
So we have two different attributes that both independently affect where in a document the link
element is allowed to appear, and that complicates the checking logic in the validator in a way that makes it difficult to emit a better, more helpful error message for this case.