Denken Sie daran, dass ein Browser beim Selektorabgleich ein Element (das, für das er den Stil zu bestimmen versucht) und alle Ihre Regeln und deren Selektoren hat, und dass er herausfinden muss, welche Regeln mit dem Element übereinstimmen. Dies unterscheidet sich von der üblichen jQuery-Sache, wo man nur einen Selektor hat und alle Elemente finden muss, die diesem Selektor entsprechen.
Hätten Sie nur einen Selektor und nur ein Element, das mit diesem Selektor verglichen werden soll, dann wäre es in manchen Fällen sinnvoller, von links nach rechts zu suchen. Aber das ist eindeutig no die Situation des Browsers. Der Browser versucht, Gmail oder was auch immer zu rendern und hat die eine <span>
und die mehr als 10.000 Regeln, die Gmail in sein Stylesheet aufnimmt (ich denke mir diese Zahl nicht aus).
Insbesondere in der Situation, in der der Browser die meisten der Selektoren betrachtet, die er in Betracht zieht nicht mit dem fraglichen Element übereinstimmen. Das Problem besteht also darin, so schnell wie möglich zu entscheiden, dass ein Selektor nicht übereinstimmt. Wenn das in den Fällen, die übereinstimmen, ein wenig zusätzliche Arbeit erfordert, gewinnt man trotzdem aufgrund der Arbeit, die man in den Fällen spart, die nicht übereinstimmen.
Wenn Sie zunächst nur den ganz rechten Teil des Selektors mit Ihrem Element abgleichen, ist die Wahrscheinlichkeit groß, dass er nicht übereinstimmt und Sie sind fertig. Wenn es übereinstimmt, müssen Sie mehr Arbeit leisten, aber nur proportional zu Ihrer Baumtiefe, die in den meisten Fällen nicht so groß ist.
Andererseits, wenn Sie damit beginnen, den ganz linken Teil des Selektors abzugleichen... womit vergleichen Sie ihn dann? Sie müssen das DOM nach Knoten durchsuchen, die damit übereinstimmen könnten. Allein die Entdeckung, dass es nichts gibt, was mit dem ganz linken Teil übereinstimmt, kann eine Weile dauern.
Die Browsersuche erfolgt also von rechts; sie bietet einen offensichtlichen Ausgangspunkt und ermöglicht es Ihnen, die meisten Selektionskandidaten sehr schnell loszuwerden. Sie können einige Daten sehen unter http://groups.google.com/group/mozilla.dev.tech.layout/browse_thread/thread/b185e455a0b3562a/7db34de545c17665 (obwohl die Notation verwirrend ist), aber das Ergebnis ist, dass man insbesondere bei Google Mail vor zwei Jahren bei 70 % der (Regel, Element)-Paare entscheiden konnte, dass die Regel nicht übereinstimmt, nachdem man nur die Tag/Klasse/ID-Teile des Selektors ganz rechts für die Regel untersucht hatte. Die entsprechende Zahl für Mozilla's pageload performance test suite war 72%. Es lohnt sich also wirklich zu versuchen, diese 2/3 aller Regeln so schnell wie möglich loszuwerden und sich dann nur noch um die Übereinstimmung des verbleibenden 1/3 zu kümmern.
Beachten Sie auch, dass es andere Optimierungen gibt, die Browser bereits vornehmen, um zu vermeiden, dass sie überhaupt versuchen, Regeln zu erfüllen, die definitiv nicht erfüllt werden können. Wenn zum Beispiel der Selektor ganz rechts eine id hat und diese id nicht mit der id des Elements übereinstimmt, dann wird in Gecko überhaupt nicht versucht, diesen Selektor mit dem Element abzugleichen: Die Menge der "Selektoren mit IDs", die versucht werden, stammt aus einem Hash-Table-Lookup auf die ID des Elements. Dies sind also 70% der Regeln, die eine ziemlich gute Chance haben, mit dem immer noch nicht übereinstimmen, nachdem nur der Tag/die Klasse/die ID des Selektors ganz rechts berücksichtigt wurde.
5 Stimmen
3. Nein - egal wie man es liest, der Selektor passt immer auf dieselbe Gruppe von Elementen.
1 Stimmen
Das Parsen Weg, den Sie vorschlagen, wäre nicht wirklich wirksam, da es Zugriff auf das DOM eine Menge erfordert. Ich würde es von links nach rechts zu analysieren, und vermutlich, Selektoren wie jQuery parsen es von links nach rechts zu.
0 Stimmen
@Sime Vidas - Warum wird es dann von rechts nach links gemacht?
0 Stimmen
@JCOC611 - Aber warum tun das die Browser-Engines nicht?
0 Stimmen
@JCOC611 Ich dachte, die Sizzle-Engine von jQuery traversiert von rechts nach links und verwendet integrierte Optimierungen (z. B. wenn der Selektor mit einer ID beginnt)
42 Stimmen
Ein Browser kann nicht davon ausgehen, dass Ihre IDs eindeutig sind. Sie könnten dieselbe id="foo" überall in Ihrem DOM einfügen, und ein
#foo
Selektor müsste mit all diesen Knoten übereinstimmen. jQuery hat die Möglichkeit, zu sagen, dass $("#foo") immer nur ein Element zurückgibt, weil sie ihre eigene API mit ihren eigenen Regeln definieren. Aber Browser müssen CSS implementieren, und CSS sagt, dass alles im Dokument mit der angegebenen ID übereinstimmen soll.2 Stimmen
Die Frage scheint sich auf den Selektor zu beziehen passend zu und nicht über den Selektor Parsing .
2 Stimmen
@Boris Zbarsky - Sowohl die HTML- als auch die CSS-Spezifikationen besagen, dass IDs eindeutig sein müssen. Alles abzugleichen ist eine Entscheidung, die getroffen wurde, damit die Fehlerbehebung bei fehlerhaften Dokumenten durchgeführt werden kann, und nicht, weil es in der Spezifikation so steht.
2 Stimmen
@Quentin: Die CSS3-Spezifikation auf ID-Selektoren besagt, dass ein ID-Selektor auf "jedes Element" mit dieser ID passt und nicht auf "das Element" mit dieser ID.
2 Stimmen
@BoltClock - es heißt auch: "Das Besondere an Attributen des Typs ID ist, dass keine zwei solcher Attribute in einem konformen Dokument denselben Wert haben können.
4 Stimmen
@Quentin In einem "nicht-konformen" (zu HTML) Dokument können IDs nicht eindeutig sein, und in diesen Dokumenten erfordert CSS die Übereinstimmung aller Elemente mit dieser ID. CSS selbst stellt keine normativen Anforderungen an die Eindeutigkeit von IDs; der von Ihnen zitierte Text ist informativ.
5 Stimmen
@Boris Zbarsky Was jQuery tut, hängt vom Codepfad innerhalb von jQuery ab. In einigen Fällen verwendet jQuery die NodeSelector-API (native
querySelectorAll
). In anderen Fällen wird Sizzle verwendet. Sizzle kann nicht mit mehreren IDs übereinstimmen, QSA hingegen schon (AYK). Welcher Weg eingeschlagen wird, hängt vom Selektor, dem Kontext und dem Browser und seiner Version ab. Die Query-API von jQuery verwendet das, was ich als "Native First, Dual Approach" bezeichnet habe. Ich habe einen Artikel darüber geschrieben, aber er ist nicht mehr verfügbar. Sie können ihn aber hier finden: fortybelow.ca/hosted/dhtmlkitchen/JavaScript-Query-Engines.html1 Stimmen
@BorisZbarsky: An keiner Stelle in der gesamten Spezifikation -- in jede Version der Spezifikation - wird das Ergebnis des Versuchs, CSS auf ein ungültiges Dokument anzuwenden, erwähnt. (In der Tat ist eine der Errata ein Hinweis auf reparieren etwas schlecht geformtes HTML, anstatt die Gelegenheit zu nutzen, um einen Hinweis hinzuzufügen, dass die Stile weiterhin angewendet werden sollten). Was den Teil über die Eindeutigkeit der IDs angeht? Das ist normativ, wie jeder andere Text in der Spezifikation, sofern nicht anders angegeben.
2 Stimmen
@cHao So etwas wie ein "ungültiges Dokument" gibt es in Bezug auf CSS nicht. CSS arbeitet lediglich mit einem abstrakten Elementbaum. HTML legt fest, wie dieser Baum aufgebaut ist, und zwar auch für Dokumente, die nicht den Konformitätskriterien für Autoren entsprechen. Das Ergebnis der Anwendung von CSS auf ein Dokument mit doppelten IDs ist also durch die Kombination der beiden Spezifikationen vollständig definiert. Was den normativen Charakter der Spezifikation betrifft, so ist sie es auf jeden Fall: als eine Verfassen von Anforderung. Doppelte IDs werden nicht validiert, aber das hat keinen Einfluss darauf, wie UAs sie verarbeiten sollen.
2 Stimmen
@cHao Hier ist ein Beispiel, bei dem das DOM (das auch mit einem Elementbaum arbeitet) anstelle von CSS verwendet wird. Schauen Sie sich an dom.spec.whatwg.org/#dom-document-getelementbyid und beachten Sie die Verwendung von "das erste Element in Baumreihenfolge". Warum, glauben Sie, steht das genau da? Weil IDs in der Tat dupliziert werden können, wenn der Autor kein validierendes Dokument verfasst hat, und das DOM muss damit umgehen.
2 Stimmen
Das DOM schon. CSS nicht. Es wäre genauso korrekt, die
#whatever
Stile auf genau das eine Element, das vondocument.getElementById('whatever')
. In CSS ist ausdrücklich festgelegt, dass IDs eindeutig sind. Wenn Sie gegen diese Regel verstoßen, gibt es keine Vorschrift darüber, wie sich die Implementierung zu verhalten hat.0 Stimmen
@BorisZbarsky Weil das DOM in der Lage sein muss, mit ungültigen Dokumenten umzugehen, und es spezifiziert, wie eine Situation zu behandeln ist, die es nicht geben sollte, ohne zu explodieren?
0 Stimmen
@RobertMcKee Sicher, aber die gleichen Überlegungen gelten auch für CSS.
3 Stimmen
@cHao Die Sache ist die, dass die Mitglieder der CSS-Arbeitsgruppe nicht mit Ihnen übereinstimmen, dass die Browser-Implementierungen nicht mit Ihnen übereinstimmen und dass Websites von dem Verhalten der Browser-Implementierungen abhängen: Es ist tatsächlich üblich, dass Websites wiederholte IDs haben und davon abhängen, dass die ID alle Elemente stilisiert. Abgesehen von der theoretischen Reinheit, was ist also der Vorteil Ihres Arguments, wenn ich fragen darf?
1 Stimmen
@BorisZbarsky Sie haben einige gute Argumente vorgebracht, aber ich verstehe nicht, wie Sie glauben, dass die Mitglieder der CSS-Arbeitsgruppe die Dinge so sehen wie Sie, wenn die einzigen Dinge, die ich in der Spezifikation gesehen habe, etwas anderes besagen. Einige Browser-Implementierungen können/werden mehrere Elemente mit dem gleichen ID-Wert gleich stylen (nicht alle, aber zumindest alle der Top 4), und es ist wirklich nicht üblich, dass Websites wiederholte IDs haben und darauf angewiesen sind. Es ist eigentlich ziemlich selten, und ich glaube nicht, dass ich jemals eine gesehen habe, die davon abhängt. Können Sie 3 nennen? Ich kann Ihnen sagen, dass die am häufigsten verwendete Javascript-Bibliothek NICHT mit Ihnen übereinstimmt.
0 Stimmen
Entschuldigung, ich sollte sagen, dass 2 der am häufigsten verwendeten Javascript-Bibliotheken (jQuery und prototype.js) nur ein Element zurückgeben, wenn sie aufgefordert werden, nach der ID auszuwählen. Prototyp: jsfiddle.net/CTZT6 jQuery: jsfiddle.net/CTZT6/1
0 Stimmen
MooTools gibt auch nur ein einziges Element zurück, wenn ein id-Selektor angegeben wird: jsfiddle.net/CTZT6/2
2 Stimmen
@BorisZbarsky: Der Vorteil liegt darin, dass man sich keine Gedanken über ein Verhalten machen muss, das nirgendwo festgelegt wurde. Die CSS-Arbeitsgruppe scheint nicht einverstanden zu sein mit entweder von uns, wenn man bedenkt, dass sie keine einzige offizielle Erklärung abgegeben haben - abgesehen von der offiziellen Erklärung in den Spezifikationen, dass IDs eindeutig sind, was meinem Argument mehr Gewicht verleiht als Ihrem :P Kein Browser der Welt ist erforderlich zu handeln, soweit CSS betroffen ist, und sich auf nicht spezifiziertes Verhalten zu verlassen, ist einfach schlechte Codierung.
0 Stimmen
@BorisZbarsky: Der Nutzen ist également bei der Förderung eines garantiert einheitlichen Verhaltens zwischen CSS und JS. Wenn Ihre IDs nicht eindeutig sind, haben Sie absolut keine Garantien über das, was passieren wird - es sei denn, Sie wollen einen "Diese Website funktioniert in..."-Haftungsausschluss auf Ihre Seite zu klatschen.
1 Stimmen
@RobertMcKee Ich glaube, sie sehen die Dinge so wie ich, weil ich mit ihnen gesprochen habe. Das können Sie auch: Schicken Sie einfach eine E-Mail an www-style@w3.org. Und was Websites angeht, gibt es viele Templates, die ids für das Styling verwenden, wenn sie eigentlich Klassen verwenden sollten.... und nein, jQuery tut das nicht, wenn man seine Selektoren verwendet, aber das bedeutet nicht, dass Websites nicht von der CSS Motor, der das tut.
3 Stimmen
@cHao Sich nicht um ein Verhalten zu sorgen, das "nirgendwo angegeben ist", ist sinnlos, wenn es de facto Standard ist. Natürlich ist dieses Verhalten ist angegeben: CSS sagt, dass Dinge mit einer bestimmten ID übereinstimmen müssen und dass die Dokumentsprache definiert, was eine ID bedeutet. HTML definiert, welche Dinge welche IDs haben. Das Ergebnis ist, dass mehrere Elemente die gleiche ID haben können. Man muss wirklich versuchen, die Spezifikationen zu verdrehen und sich stark auf die nicht-normativen Teile stützen, um zu einer anderen Schlussfolgerung zu kommen.
1 Stimmen
@BorisZbarsky: Es braucht nichts weiter als eine wörtliche Lektüre aller bestehenden normativ Dokumentation. Kein Verdrehen erforderlich. Es braucht schon mehr, wie eine Abhängigkeit von einem Verhalten, das nirgendwo dokumentiert ist, um zu dem Schluss zu kommen, dass ein nicht definiertes Verhalten irgendwie definiert ist.
0 Stimmen
@cHao Oh, ich verstehe das Kernproblem. So etwas wie "undefiniertes Verhalten" gibt es in Webspezifikationen nicht (zumindest nicht in guten). Wir haben das versucht; es war ein kläglicher Fehlschlag. Specs definieren jetzt das Verhalten in allen Situationen. Wenn Sie ein undefiniertes Verhalten sehen, ist das entweder ein Fehler in den Spezifikationen oder Sie übersehen etwas.
0 Stimmen
@BorisZbarsky: Zeigen Sie mir die Spezifikation, die festlegt, wie sich CSS verhalten muss, wenn der UA ein ungültiges Dokument vorgelegt wird. Die CSS-Spezifikation tut das sicherlich nicht, und sie geht sogar weit über das Ziel hinaus no zu.
0 Stimmen
@BorisZbarsky: In diesem Fall würde ich mich sogar mit De-facto-Standards zufrieden geben. Zeigen Sie mir, wo die Browserhersteller das Verhalten ihrer jeweiligen UAs in einem solchen Fall dokumentiert haben.
2 Stimmen
@cHao wo steht in der CSS-Spezifikation etwas in dieser Richtung? Es gibt nicht einmal den Begriff "ungültiges Dokument" im normativen Text. Außerdem ist zu beachten, dass dev.w3.org/csswg/selectors4/#id-selectors heißt es ausdrücklich: "In nicht-konformen Dokumenten ist es möglich, dass mehrere Elemente einem einzigen ID-Selektor entsprechen."
1 Stimmen
@BorisZbarsky: Siehe, jetzt, Text etwas Das ist im Grunde das, was in einer fertigen Spezifikation stehen muss, bevor man sagen kann: "CSS erfordert" irgendetwas. Es muss allerdings expliziter formuliert werden, bevor es als Anforderung gilt; etwa so: "In einem nicht-konformen Dokument muss ein ID-Selektor mit allen Elementen übereinstimmen, deren ID-Attribut dem Bezeichner im Selektor entspricht." "Möglich" ist eher ein "kann" als ein "muss", und man kann sich leicht vorstellen, dass eine UA illegale ID-Attribute aus dem Dokument entfernt, es sei denn, es wird ausdrücklich verlangt, sie aus irgendeinem Grund beizubehalten.
1 Stimmen
@cHao Der von mir zitierte Text ist informativ, genau wie der Rest dieses Textes. Es gibt keine Änderung dessen, was die Spezifikation verlangt, nur eine klarere Erklärung für Leute, die verwirrt darüber zu sein scheinen, was sie verlangt. Deshalb heißt es auch nicht "muss": das ist Unsinn für einen informativen Text.
1 Stimmen
@BorisZbarsky: Es gibt also immer noch keinen normativen Text, der eine Anforderung für ein bestimmtes Verhalten in diesem Fall beschreibt.
4 Stimmen
@cHao Natürlich gibt es das. Sie ignorieren es nur absichtlich.
0 Stimmen
@BorisZbarsky: Dann mir zeigen . Machen Sie es so offensichtlich, dass nicht einmal ich es widerlegen kann. Alles, was es dazu braucht, ist ein Link zu einem normativen Text, in dem die Anforderung klar und deutlich formuliert ist. Ich habe jetzt ein halbes Dutzend Mal darum gebeten, einen solchen Text zu sehen, und Sie haben noch keinen Link vorgelegt. Ich habe mir die Spezifikationen selbst mehrmals angesehen und kann keine Worte finden, die eine solche Anforderung formulieren - und der einzige Text, den ich bisher gesehen habe, ist entweder auffallend vermeidet oder ausdrücklich festlegt, dass IDs eindeutig sein müssen. Normalerweise beides.
1 Stimmen
Es gibt keinen normativen Text, der dies explizit besagt, so wie es auch keinen normativen Text gibt, der explizit besagt, dass zwei Elemente mit derselben Klasse von einem Klassenselektor abgeglichen werden, und keinen normativen Text, der besagt, dass der Browser beim Parsen von CSS nicht abstürzen sollte. Die relevanten normativen Teile sind w3.org/TR/css3-selectors/#id-selectors Dort heißt es: "Ein ID-Selektor repräsentiert eine Elementinstanz, die einen Bezeichner hat, der mit dem Bezeichner im ID-Selektor übereinstimmt." Es wird nicht definiert, wie man feststellt, welchen Bezeichner das Element hat; das ist Sache der Dokumentsprache, also von HTML.
1 Stimmen
@cHao Und in der Spezifikation der Dokumentensprache heißt es: "Das Attribut id gibt den eindeutigen Bezeichner (ID) des Elements an. [DOM]" That's it. Das ist das gesamte Ausmaß des normativen Textes zu diesem Thema für UA-Implementierer. Wenn Sie es einfach implementieren, ohne zu versuchen, zwischen den Zeilen zu lesen, erhalten Sie das Verhalten, das jeder Browser hat.
0 Stimmen
@BorisZbarsky: Und wenn Sie tun "Zwischen den Zeilen lesen": Es ist durchaus möglich, eine UA zu schreiben, die die Spezifikation genau befolgt und trotzdem nicht das tut, was Sie (ohne Beweise) behaupten, dass die Spezifikation "erfordert". Da per Definition eine doppelter eindeutiger Bezeichner nicht existieren können, gibt es keinen Text, der besagt, was der Browser mit Dokumenten zu tun hat, die sie enthalten. Er könnte zum Beispiel alle bis auf das erste Duplikat weglassen und zu 100 % HTML5- und CSS3-konform sein. Er könnte das erste, das letzte oder ein beliebiges Duplikat beibehalten und mit HTML4 - und wiederum mit CSS3 - kompatibel sein.
0 Stimmen
@BorisZbarsky: Ein Browser, der eines dieser beiden Dinge tun würde, wäre nicht einmal in der Lage, mehr als einen Stil zu erstellen.
#whatever
denn es könnte niemals sein mehr als eine#whatever
. Und was jede Spezifikation angeht, die ich je gesehen habe, ist dieser Browser immer noch zu 100 % konform mit allen von ihnen.0 Stimmen
@cHao Wenn Sie bei den Spezifikationen zwischen den Zeilen lesen, werden Sie Schwierigkeiten bekommen. Insbesondere werden Sie in diesem Fall nicht spezifikationskonform sein, weil die Autoren der Spezifikationen davon ausgehen, dass Sie NICHT zwischen den Zeilen lesen. Wenn sie davon ausgehen müssten, dass Sie das tun, und jedes mögliche Zwischen-den-Zeilen-Lesen in der Spezifikation abdecken müssten, würden die Spezifikationen lächerlich unhandlich werden.
0 Stimmen
@cHao Wenn Sie der Meinung sind, dass die Spezifikationen verbessert werden müssen, können Sie uns gerne Feedback geben. www-style@w3.org für CSS, public-html@w3.org für HTML.
1 Stimmen
@BorisZbarsky: Ich betrachte es als Teil meiner Aufgabe, zwischen den Zeilen zu lesen - meine Annahmen zu überprüfen und zu unterscheiden, was tatsächlich ist erforderlich und was heute der am häufigsten implementierte Mechanismus ist. Ja, die vollständige Spezifikation des Fehlerverhaltens führt in ein sehr tiefes Kaninchenloch und macht die Spezifikation unhandlich... aber jedes nicht spezifizierte Verhalten ist per Definition un spezifiziert und ist daher offen für Interpretationen. IMO HTML5 sollte nie in das Loch in erster Linie gegangen, aus genau diesem Grund. (Nun, das und die Tatsache, dass der ganze Weg gültiges HTML irrelevant machen würde).
2 Stimmen
@cHao Ihre Vorstellung davon, wie Webspezifikationen funktionieren, entspricht nicht der Realität, denn diese Vorgehensweise führt zu enormen Interoperabilitätsproblemen. Aus diesem Grund zielen moderne Webspezifikationen darauf ab, das gesamte Verhalten vollständig zu spezifizieren. Wenn Sie einen Fall sehen, in dem das Verhalten nicht spezifiziert zu sein scheint, dann ist entweder die Spezifikation fehlerhaft oder Sie lesen sie falsch (und sie könnte immer noch fehlerhaft sein, weil sie falsch gelesen werden kann).
2 Stimmen
@BorisZbarsky: Der Sinn der Definition von Syntax und Konformitätskriterien ist es, zu sagen: "Wenn dein Zeug so aussieht, werden die Implementierungen es verstehen. Wenn das nicht der Fall ist, können wir die gewünschten Ergebnisse nicht garantieren. Der zweite Satz ist es, der den ersten Satz überhaupt erst wert macht, gesagt zu werden. Eine Sprachspezifikation kann nicht für jeden nicht-konformen Fall ein bestimmtes Verhalten vorschreiben (außer "berücksichtige den Inhalt nicht $LANGUAGE"). Das liegt weit außerhalb ihres Geltungsbereichs, und der Versuch, dies zu tun, macht sie zu einer UA-Spezifikation - und würde im Fall von HTML die Gültigkeit der Sprache selbst völlig irrelevant machen.
1 Stimmen
Die "enormen Interoperabilitätsprobleme" aufgrund von ungültigem HTML waren/sind darauf zurückzuführen, dass das Dokument nicht den Regeln der Sprache entspricht, die es vorgibt zu verwenden. Müll rein, Müll raus. Die Regeln sind nicht geheim; die wichtigen sind nicht einmal kompliziert. Es gibt keine Entschuldigung dafür, sie zu brechen, und das letzte, was eine sinnvolle Sprachspezifikation tun sollte, ist Unterstützung besagter Bruch.
4 Stimmen
@cHao Nein, der Sinn der Definition von Webspezifikationen ist es, die Interoperabilität zu gewährleisten. Die Definition der Syntax dient vor allem dazu, klare Erweiterungspunkte zu definieren. Die CSS-Spezifikationen zielen darauf ab, das Verhalten für alle nicht konformen Inhalte vorzuschreiben, so wie es HTML tut, und das schon seit Jahren. Und die "Interop-Probleme", von denen ich spreche, waren nicht auf ungültiges HTML zurückzuführen, sondern eher auf CSS-Probleme, die entweder darauf zurückzuführen sind, dass UAs die Anforderungen der Spezifikation nicht korrekt umsetzen, weil sie zwischen den Zeilen lesen, oder darauf, dass die Spezifikation Dinge explizit als undefiniert bezeichnet und dann dazu gezwungen wird, Unsinn zu spezifizieren, den UAs implementieren und Websites annehmen.
0 Stimmen
@cHao auf jeden Fall ist die andere Verwirrung hier, dass der Hauptzweck der CSS-Spezifikationen in der Tat eine UA-Spezifikation ist, nicht eine Sprachspezifikation. Das andere wurde versucht und ist gescheitert.
1 Stimmen
@BorisZbarsky: Die Tatsache, dass man sogar kann zwischen den Zeilen lesen bedeutet, dass die Spezifikation deckt nicht alle Fälle ab . Die Autoren der Spezifikation haben dies entweder absichtlich vermieden oder kläglich versagt. (Ich gehe von Ersterem aus, denn (1) alle verfügbaren Beweise deuten in diese Richtung, ungeachtet Ihrer Zuschreibung von Absicht an die Autoren, und (2) diese sind keine Idioten. :P) So oder so, ein wörtliches Lesen der Spezifikationen lässt einen nicht unerheblichen Teil des Fehlerverhaltens unbestimmt. Und ein wörtliches Lesen ist die einzige Option, wenn man versucht herauszufinden, was in diesen Fällen tatsächlich erforderlich ist.
1 Stimmen
Was die Definition von Syntax, Semantik usw. angeht, so ist das alles überflüssig, wenn Sie Recht haben. Ich kann Tag-Suppe schreiben und sie funktioniert genauso zuverlässig für alle Zeit. Warum sollte ich mich darum kümmern, ob das HTML überhaupt konform ist?
2 Stimmen
Warum überhaupt? Wenn es Ihnen nur darum geht, wie es in visuellen UAs aussieht, gibt es keinen Grund; deshalb kümmert sich in der Praxis fast niemand darum. Wenn Sie möchten, dass Ihr HTML besser wartbar und semantisch aussagekräftiger ist und vielleicht schneller gerendert werden kann, gibt es vielleicht Gründe, sich darum zu kümmern.
7 Stimmen
Ich bin mir nicht einmal sicher, ob irgendjemand außer euch beiden herausfinden kann, was in diesem langen Gespräch vor sich geht. Wir haben einen Chat für solche längeren Diskussionen. Alles, was Sie wirklich wissen wollen, sollten Sie in die Frage oder eine Antwort schreiben, vor allem, wenn es sich um klärende Informationen handelt. Stack Overflow kann nicht gut mit Diskussionen in Kommentaren umgehen.
1 Stimmen
Das kann ich, und ich kann sagen, dass das meiste von dem, was diskutiert wurde, nicht in SO, sondern in eine Mailingliste gehört.
2 Stimmen
Vielleicht hätte ich mich früher dazu äußern sollen, aber es ist ganz einfach: Entweder man hält sich an die Regeln, oder man riskiert browserübergreifende Inkonsistenzen. Das ist alles, was es zu tun gibt. Wenn Sie argumentieren: "Ich kümmere mich nicht um die Regeln, weil es im Browser so aussieht, wie ich es will", dann haben Sie nicht genug Browser getestet. Wenn Sie doppelte IDs in Ihrem HTML-Code haben, werden verschiedene Browser unterschiedliche Ergebnisse liefern. Sehen Sie sich dieses Dokument mit IE, Edge, Chrome und Firefox. Ich schließe meine Beweisführung ab.
0 Stimmen
Ich möchte wissen, in welcher Phase des CRP dies geschieht?