Ich verstehe, dass CSS nur solche mehrzeiligen Kommentare unterstützt
/* foobar */
Warum werden einzeilige Kommentare nicht unterstützt?
// foobar
Sie sind in der Programmierung genauso verbreitet und scheinen besonders nützlich für eine Sprache wie CSS zu sein, in der jede Regel in einer eigenen Zeile steht.
Wenn es keinen bestimmten historischen Grund für diese Entscheidung gab, was hat Browser daran gehindert, diese Entscheidung zu unterstützen?
Antworten:
Abwärtskompatibilität
Das Einfügen von einzeiligen Kommentaren in die CSS-Syntax kann die Bedeutung von Dateien ändern, die derzeit das Token verwenden
//
. Browser-Anbieter zögern sehr , Änderungen vorzunehmen, die möglicherweise vorhandene Seiten beschädigen könnten.CSS ist mit sehr genauen "fehlertoleranten" Parsing-Regeln definiert, was bedeutet, dass selbst wenn Sie etwas syntaktisch Unzulässiges schreiben, es genaue Regeln gibt, wie das Parsen erfolgen soll. Wenn eine unzulässige Folge von Zeichen (wie
//
) in einer Deklaration erkannt wird, wird die aktuelle Deklaration verworfen und alles bis zum nächsten Semikolon übersprungen.CSS ist so konzipiert, dass es die Einführung neuer Syntax ermöglicht, ohne alte Browser zu beschädigen. Alte Browser überspringen nur die Deklaration, die nicht unterstützte Syntax enthält, und fahren danach fort.
Diese Logik geht jedoch davon aus, dass die "Einheit", die verarbeitet oder übersprungen werden soll, die Deklaration ist. Wenn einzeilige Kommentare eingeführt würden, würde dies bedeuten, dass die Analyse danach
//
bis zum nächsten Zeilenumbruch und nicht bis zum nächsten Semikolon übersprungen werden sollte, wodurch geändert wird, welche Regeln analysiert und welche übersprungen werden. Dies könnte möglicherweise die Bedeutung vorhandener CSS-Dateien auf überraschende Weise ändern.Ein Beispiel:
Hier habe ich fälschlicherweise den Schrägstrich verdoppelt. Die Folge ist, dass die Schriftdeklaration ignoriert wird, der Rest funktioniert jedoch einwandfrei. Wenn die Unterstützung für
//
-Kommentare eingeführt würde, würde die schließende Klammer plötzlich auskommentiert, wodurch möglicherweise der gesamte Rest des Stylesheets beschädigt würde.Man könnte sagen, dass ich selbst schuld bin, da ich einen Fehler gemacht habe, aber das ändert nichts daran, dass eine unbekannte Anzahl von Seiten im Internet aus undurchsichtigen Gründen beschädigt oder seltsam gerendert werden kann.
Eine solche Änderung, die die Abwärtskompatibilität beeinträchtigt, sollte sehr sorgfältig abgewogen werden, und einzeilige Kommentare sind für das Risiko wahrscheinlich nicht zwingend genug, da Sie nur ein paar Tastatureingaben sparen.
Wenn CSS also einzeilige Kommentare haben sollte, sollte es wahrscheinlich von Anfang an eingeführt worden sein. Aber CSS begann mit einer sehr einfachen Sprache und zwei verschiedene Kommentarsyntaxen wären zu dieser Zeit als unnötige Komplexität angesehen worden. (Sogar ANSI C hatte keine einzeiligen Kommentare.)
quelle
//
wird in zwei "delim tokens" geparst, mit denen wiederum nirgends in der Grammatik erlaubt ist. Weitere Informationen finden Sie unter w3.org/TR/css-syntax-3/#tokenization ./**/
, aber dieses akzeptieren, weil es auch angibt , warum es sich nicht geändert hat.Noch ein weiteres Syntaxelement zu unterstützen ist nicht so einfach: Es gibt viele Tools, die in der Lage sein sollten, noch einen zusätzlichen Kommentarstil zu verarbeiten. Eigentlich wäre ich nicht überrascht zu sehen, dass die meisten Tokenizer / Parser Zeilenumbrüche einfach ignorieren und sie wahrscheinlich durch ersetzen
;
.Wenn es um die Sprache wesentlich sein würde, also machen Entwickler das Leben viel einfacher, dies getan werden könnte. Zum Beispiel würde es sich lohnen , keine Kommentare in CSS zu haben, und es wäre die Mühe wert, bestimmte Syntaxelemente hinzuzufügen, die Kommentare begrenzen.
//
-Stil Kommentare auf der anderen Seite? ... Ich verstehe den Punkt nicht. Siehe/* Hello, World! */
: ein einzeiliger Kommentar.Tatsächlich erwarten Sie wahrscheinlich
//
Kommentare im -Stil, da Sie an diese in C ++ oder ähnlichen Sprachen gewöhnt sind. Da CSS jedoch nicht von C ++ erbt, ist es ziemlich seltsam, ähnliche Syntaxfunktionen zu erwarten.Ebenso würde ein Python-Programmierer behaupten, dass CSS auch
#
Kommentare im -Stil haben sollte . Müssen wir nun beide Stile unterstützen? Dann würde ein Mann von Haskell Welt bitten , zu schließen--
und{- -}
als gut, und Sie werden sich fragen , warum Sie nicht CSS - Code nicht mehr erkennen.Der winzige Vorteil von
//
ist, dass Sie am Ende Ihres einzeiligen Kommentars keine drei weiteren Zeichen eingeben müssen (wenn wir mit dem Zählen von Zeichen beginnen, sollte CSS Kommentare im Python-Stil verwenden). Wenn Sie jedoch einen anständigen Texteditor verwenden, können Sie Text kommentieren / auskommentieren, indem Sie trotzdem eine Verknüpfung drücken.Wie ich erklärte, sind sie für eine kleine Teilmenge von Programmierern, die eine kleine Teilmenge von Texteditoren verwenden , nur wenig nützlich. Ihre Bemerkung zu jeder Regel in einer eigenen Zeile (ich bin übrigens nicht mit Ihrer Bemerkung einverstanden) hat mich über einen anderen Punkt nachdenken lassen: wie die Kommentare tatsächlich verwendet werden.
Hier ist die Verwendung von CSS-Kommentaren, die mir einfallen:
In den ersten drei Fällen verwenden Sie ohnehin mehrzeilige Kommentare. Dies ist offensichtlich für den Dateikopf und die Erklärung eines Hacks (die meisten Hacks erfordern mindestens einen Satz und einen Hyperlink zu StackOverflow oder einen Blog-Artikel); wie für die Begrenzer:
C-artiger Kommentar ist viel sichtbarer als:
im Text begraben.
quelle
//
Kommentare.//
in vielen Sprachen sehr verbreitet ist und das Konzept dahinter ist, dass es mehr als Syntax ist, es funktioniert auch anders. Dies ist jedoch die bisher ausführlichste Antwort.Das Problem ist, dass die meisten Sprachen mit Kommentaren (z. B. C #, Java) kompilierte Sprachen sind und der Compiler ALLE Kommentare entfernt, bevor der Inhalt dem Konsumenten (der CPU) präsentiert wird. CSS wird nicht kompiliert. Im Allgemeinen wird die Datei unverändert gesendet, während der Designer sie entwickelt hat, sodass keine Möglichkeit besteht, die Kommentare auszublenden. Der Kommentar im // Stil erfordert dann sowohl das // Symbol als auch einen Zeilenvorschub, um die syntaktische Korrektheit beizubehalten.
Ja, es gibt Minifier und Javascript erlaubt diese Art von Kommentaren. Javascript erlaubt auch eval (), also denke ich nicht, dass wir es als Modell nehmen wollen.
quelle
/* */
Kommentare haben?//
Kommentare nicht entfernen, wenn er entfernt werden kann/* */
?