Bei der Elementverknüpfung fehlt die erforderliche Attributeigenschaft

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

Warum lehnt der Validator ( http://validator.w3.org/ ) dies ab? Welches Attribut ist "erforderlich", das mir nicht bekannt ist?

Der Fehler:

Fehlerzeile 408, Spalte 142: Elementverknüpfung fehlt erforderliche Attributeigenschaft. … / Module / 14ce1e21 / peadig-eucookie.css 'type =' text / css 'media =' all '/> Attribute für Elementverknüpfung: Globale Attribute href crossorigin rel media hreflang-Typgrößen Auch das title-Attribut hat eine spezielle Semantik Element.

no9
quelle
Ich kann diese Fehlermeldung nicht reproduzieren .
Quentin
Es ist komisch ... aber der Validator wirft den Fehler trotzdem.
Nr. 9
Vermutlich fehlt Ihnen in Ihrer Frage ein Kontext.
Quentin
1
Vielleicht ist es das Problem, weil es nicht in der Kopfzeile ist?
Nr. 9
@ no9: Wie Jukka unten erklärt (und die Antwort sollte wie angegeben werden , die Sie eine <link> innerhalb des <body> und haben Antwort auf diese Weise: <link rel='stylesheet' id='someId' href='folder/file.css' type='text/css' media='all' property='' />.. Funktioniert in allen Browsern und validates Es ist alles über das Attribut property.
Frank Conijn

Antworten:

82

Der Rat von @stevelove ist anscheinend die praktische Lösung, aber hier ist eine theoretische Antwort auf die Warum-Frage:

Obwohl ein linkElement bodyin älteren HTML-Spezifikationen unbedingt ungültig ist , hat HTML5 freizügigere Regeln. Gemäß HTML 5.1 Nightly (mit dem der Prüfer mehr oder weniger Schritt halten will) ist das linkElement auch im Dokumententext zulässig (wo immer Phrasierungsinhalte zulässig sind), sofern es über ein itempropAttribut verfügt. Dies scheint die Fehlermeldung noch rätselhafter zu machen. Ein Teil der Erklärung ist, dass der Validator tatsächlich gegen HTML5 + RDFa validiert und RDFa das propertyAttribut definiert . Das Problem bleibt weiterhin, gegen welche spezifische RDFa-Definition der Validator prüft, da die Definition auch Regeln für HTML neu definieren müsste.

Die Informationen in der Fehlermeldung sind ohnehin veraltet. Fehlermeldungen werden anscheinend nicht so schnell aktualisiert wie die Grundfunktionalität des Validators.

Jukka K. Korpela
quelle
5
Lesen Sie die Antwort von hawkeye126, um dies zu beheben.
Frenchie
Diese Fehlermeldung ist ab 2017 NICHT mehr vorhanden.
TheAmazingKnight
91

Hinzufügen

property='stylesheet'

Wenn Sie Ihren Link nicht zum <head>Dokument verschieben möchten .

<link rel='stylesheet' property='stylesheet' id='basecss-css'  href='http://www.someurl.com/modules/14ce1e21/peadig-eucookie.css' type='text/css' media='all' />
9ete
quelle
43

Ist dein <link>in der <body>? Wenn ja, platzieren Sie es <head>oben im Dokument.

stevelove
quelle
4
Abgesehen von der Validierung sollten Sie Stylesheets immer oben im Dokument platzieren, um zu vermeiden, dass der Rest der Seite für das Rendern blockiert wird, wie hier beschrieben: developer.yahoo.com/performance/rules.html#css_top
stevelove
10
@stevelove (ein Jahr später / zum späteren Nachschlagen) Das wird nicht oft optimiert. In der besten aller möglichen Welten sollten Sie kritisches CSS über dem Falz <style>oben in das Dokument und den Rest unten einfügen. Dies ist der beste Weg, um eine Seite schneller zu öffnen. Sie können im Web Dokumente zu diesem Thema finden, ABER es ist nicht immer möglich, dies zu tun (und häufig die Effizienz> Leistung des Geschäftscodes).
Ludovic Guillaume
15

W3C HTML5 Validator Betreuer hier. Wie in einer anderen Antwort ausgeführt, prüft der Validator nicht nur die Anforderungen in der HTML5-Spezifikation selbst, sondern auch die Anforderungen in der HTML + RDFa 1.1-Spezifikation:

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

Und während die HTML-Spezifikation selbst sagt, dass sie linknormalerweise nicht im Body erlaubt ist says, sagt die RDFa-Spezifikation, dass ein linkElement, das ein propertyAttribut hat, im Body erlaubt ist.

Diese Validator-Nachricht lautet also im Grunde: 「Das linkElement ist hier nur zulässig, wenn es ein propertyAttribut hat. Dieses spezielle linkElement hat jedoch kein propertyAttribut. 」

* Die HTML-Spezifikation selbst besagt auch, dass das linkElement im Hauptteil zulässig ist, wenn es ein itempropAttribut hat - aber nur, wenn das linkElement keinen relWert hat. ( itempropist das Attribut "Mikrodaten", dessen Zweck im Wesentlichen dem des RDFa- propertyAttributs entspricht).

Wir haben also zwei verschiedene Attribute, die beide unabhängig voneinander beeinflussen, wo in einem Dokument das linkElement angezeigt werden darf, und die die Überprüfungslogik im Validator so komplizieren, dass es für diesen Fall schwierig ist, eine bessere, hilfreichere Fehlermeldung auszugeben.

Sideshowbarker
quelle
1

Nur für zukünftige Bedürfnisse, hier ist mein Kommentar:

Auf der w3c-Seite haben wir folgenden Kommentar:

Wenn das rel-Attribut verwendet wird, ist das Element auf das head-Element beschränkt. Bei Verwendung mit dem Attribut itemprop kann das Element sowohl im head-Element als auch im Hauptteil der Seite verwendet werden, vorbehaltlich der Einschränkungen des Mikrodatenmodells.

So kann der Fehler durch Ändern relfür behoben werden itemprop, da relim Kopf und itempropim Körper verwendet werden soll.

Hoffe es hilft jemandem.

h3nr1ke
quelle
2
Ich habe einen anderen Weg gefunden, um es zu lösen, Sie können rel und Eigenschaft in demselben Tag kombinieren, zum Beispiel <link rel='stylesheet' property='stylesheet' href='custom.css' type='text/css' media='screen' />
h3nr1ke
0

Es will, dass es in deinem Kopf ist. Wenn das CSS jedoch nicht zu wichtig ist, um es sofort zu laden, wird das Pagespeed-Tool von Google angezeigt, das Sie auffordert, es am unteren Rand des Körpers abzulegen.

Als Beispiel verwende ich eines der jquery-Themen (redmond), um meine automatische Vervollständigung zu gestalten. Sie müssen dies nicht oben auf meiner Seite einfügen, da dies nur alles andere verlangsamt.

Sorgen Sie sich also nicht zu sehr um die perfekte w3c-Validierung.

Randy Greencorn
quelle