Warum erzeugen seltsame Dinge im Schriftfarbenattribut echte Farben? [duplicate]

Lesezeit: 8 Minuten

Benutzer-Avatar
Jeremy Goodell

Ich unterrichte einen jr. High-/High-School-Webprogrammierkurs, und wir beginnen mit einfachen Elementen und Attributen wie Schriftart und Farbe, bevor wir zu CSS übergehen. Ich weiß, dass Farben veraltet sind und Schriftarten nicht in HTML5 enthalten sind, aber für Unterrichtszwecke finde ich es praktisch, mit einfachen HTML-Tags zu beginnen und uns zu CSS hochzuarbeiten. Die Schüler haben viel Freude daran, in der ersten Unterrichtswoche die Farben auf einer Seite ändern zu können. (Ich bringe ihnen in Woche 1 auch Laufschrift und Blinzeln bei, informiere sie aber, dass sie Punkte verlieren, wenn sie sie jemals wieder benutzen).

Einer der Schüler fing an, Hausaufgaben mit seltsamen Dingen in den Farbattributwerten einzureichen, wie „Kegel“ oder „Spiderman“. Ich begann damit zu experimentieren und stellte fest, dass fast alles, was Sie in das Attribut color=”” des Font-Tags einfügen, eine Art Farbe erzeugt. Und es scheint, dass die Farbe in den neuesten Versionen von IE, Firefox, Chrome, Opera und Safari konsistent ist.

Ich habe festgestellt, dass das Einfügen von “LuckyCharms” als CSS-Farbe NICHT FUNKTIONIERT. Es scheint nur dort zu funktionieren, wo Farben in HTML-Attributen erwartet werden, zum Beispiel font color=”LuckyCharms” oder body bgcolor=”LuckyCharms”.

Ich versuche meiner Klasse zu erklären, warum dies passiert, und bisher konnte ich es nicht verstehen oder Google eine gute Antwort geben. Es scheint, dass es als Farbcode interpretiert wird, aber ich kann nicht verstehen, wie.

AKTUALISIEREN: Nach einigem Ausprobieren habe ich einen 5-Stufen-Algorithmus (unter Verwendung des bereitgestellten Links) ermittelt, um so ziemlich jeden String in die entsprechende Hex-Farbe umzuwandeln. Ich werde den Algorithmus hier zur Erbauung zukünftiger Besucher bereitstellen:

  1. Ändern Sie jedes Nicht-Hex-Zeichen in eine 0.
  2. Fügen Sie dem String Nullen hinzu, bis seine Länge ein Vielfaches von 3 ist.
  3. Teilen Sie die Schnur in 3 gleiche Teile.
  4. Wenn die Länge der Teilzeichenfolgen größer als 2 ist und alle drei Teilzeichenfolgen mit einer 0 beginnen, entfernen Sie die führenden Nullen aus jeder Zeichenfolge.
  5. Wenn die Länge der Teilzeichenfolgen immer noch größer als 2 ist, kürzen Sie jede Teilzeichenfolge auf 2 Zeichen.

Das ist es, setzen Sie die Teilzeichenfolgen zusammen und Sie haben Ihren Hex-Farbcode. Ich habe diesen Algorithmus mit etwa 20 verschiedenen Beispielen verifiziert und die Ergebnisse mit dem Add-On-Farbwähler Firefox ColorZilla verglichen.

Beachten Sie, dass in diesem Fall die Regeln tatsächlich ausdrücklich in dem in einer der Antworten angegebenen Link angegeben sind und von allen Browsern eingehalten werden. Sie können sich also darauf verlassen, dass es in jedem Browser funktioniert (falls Sie wirklich lustige Farbnamen verwenden möchten).

  • Anstatt ihnen beizubringen, wie es aussieht, bringen Sie ihnen bei, was es ist meint. Vertrauen Sie mir, es hat sehr gut mit meinem Bruder funktioniert, als ich ihm das beigebracht habe. Bringen Sie ihnen gutes HTML bei, was <p> bedeutet, und was <strong> meint. Fahren Sie dann mit dem Styling fort. Vergessen Sie auch nicht, das zu erwähnen <font> und <color> sind veraltet und sollten nicht auf einer tatsächlichen Site verwendet werden und dienen nur zu Demonstrationszwecken. Jetzt kann ich deine Frage lesen. 🙂

    – Madaras Geist

    17. Oktober 2012 um 16:50 Uhr

  • Vorschläge zum Schließen einer Frage oder das Schließen einer Frage sollen nicht sagen, dass die Frage schlecht war. Nur, dass es sich um etwas handelt, das bereits abgedeckt ist, und die Zeit besser damit verbracht würde, die Antworten auf die vorhandene Frage zu verbessern, als mit der Beantwortung eines Duplikats von vorne anzufangen. Ein Duplikat zu sein bedeutet, dass es um etwas geht, das die Leute früher interessiert hat und beantwortet wurde; Die Frage ist also relevant, nur ein Duplikat.

    – Jukka K. Korpela

    17. Oktober 2012 um 16:58 Uhr

  • Ich habe ein “zufällige Zeichenfolge in CSS-Farbe“Konverter basierend auf Ihren 5 Schritten. Was denken Sie?

    – TimPietrusky

    10. März 2013 um 19:31 Uhr

  • @TimPietrusky FANTASTISCH! (Ich brauchte ein paar Minuten, um herauszufinden, wie es funktioniert)

    – Jeremy Goodell

    11. März 2013 um 15:27 Uhr

  • @JeremyGoodell danke Alter! Was hat so lange gedauert? Ist die Benutzeroberfläche so schlecht? Ich habe eine eigenständige Version erstellt: randomstringtocsscolor.com und Ihre Frage als src verknüpft.

    – TimPietrusky

    11. März 2013 um 16:42 Uhr

Die HTML 5-Spezifikation umfasst die Regeln zum Analysieren von Legacy-Farben.

Sie sind ziemlich lang und sollen es Browsern ermöglichen, konsistent zu sein, wie sie mit fehlerhaftem Code umgehen.

  • Und keine dieser Regeln gilt für CSS. CSS hat seine eigenen Regeln für die Interpretation von Farbwerten, die ziemlich streng sind. (CSS21 und CSS-Farbe-3)

    – BoltClock

    17. Oktober 2012 um 16:56 Uhr


  • Okay, ich denke, das funktioniert. Ich habe die Anweisungen für ältere Farben befolgt und „LuckyCharms“ zuerst in „LuckyCharms0“ konvertiert, um die Länge zu einem Vielfachen von 3 zu machen, dann habe ich sie in drei gleich große Zeichenfolgen konvertiert: „Luck“, „yCha“ und „rms0“, dann habe ich jede abgeschnitten Zeichenfolge wie folgt: “Lu”, “yC” und “rm”. Dann war ich für eine Minute ratlos, konvertierte aber schließlich “Lu” in “00”, “yC” in “C0” und “rm” in “00”. Sicher genug, “00C000” scheint die gleiche Farbe wie “LuckyCharms” zu haben. Ich bin mir nicht sicher, ob die Klasse diese Übung so interessant finden wird wie ich …

    – Jeremy Goodell

    17. Oktober 2012 um 17:14 Uhr

  • Ratten. Ich verwende jetzt das Addon Firefox Colorzilla, um zu sehen, was die Farben wirklich sind. LuckyCharms ist eigentlich #0CC000, also ist meine Interpretation der Parsing-Regeln nicht ganz richtig.

    – Jeremy Goodell

    17. Oktober 2012 um 18:02 Uhr

  • Ok, ich verstehe, ich habe Anweisung 10 nicht richtig interpretiert. LuckyCharms ist in der Tat #0CC000 nach den folgenden Regeln: (1) Konvertiere alle Nicht-Hex-Zeichen in Nullen: 00c00C0a000; (2) Fügen Sie 0 hinzu, um die Länge zu einem Vielfachen von 3 zu machen: 00c00C0a0000; (3) In 3 gleich lange Strings aufgeteilt: 00c0 0C0a 0000; (4) führende Nullen aus jeder Zeichenfolge entfernen, solange alle Zeichenfolgen länger als 2 sind und alle Zeichenfolgen immer noch mit 0 beginnen: 0c0 C0a 000; (5) Alle Zeichenketten auf 2 Zeichen kürzen: 0C C0 00. Jetzt kann ich heute Nacht schlafen.

    – Jeremy Goodell

    17. Oktober 2012 um 18:09 Uhr

  • Ich habe den 5-Stufen-Algorithmus als UPDATE in der obigen Frage gepostet.

    – Jeremy Goodell

    17. Oktober 2012 um 18:51 Uhr

Sehr interessant. Scheint, als würde der Browser jedes Zeichen interpretieren, das er kann (af), und den Rest auf Nullen belassen, wenn er nicht übereinstimmen kann. Zum Beispiel:

Spiderman
 00DE0 A

Braucht aber noch mehr Experimente.

  • Spiderman wird zuerst in 000de00a0 konvertiert (wobei alle Nicht-Hex-Zeichen durch 0s ersetzt werden), was in Ordnung ist, da die Länge 9 (ein Vielfaches von 3) ist, dann in 000 de0 0a0, was in Ordnung ist, da mindestens eine der Zeichenfolgen mit beginnt etwas anderes als 0, und kürzen Sie dann auf 00 DE 0A, genau wie Sie sagten. Es ist im Wesentlichen ein 5-Stufen-Algorithmus.

    – Jeremy Goodell

    17. Oktober 2012 um 18:40 Uhr

  • Übersehe ich etwas, oder hat eine Person mit 61,5.000 Wiederholungen eine Antwort geschrieben, die überhaupt keine Antwort ist, die tatsächlich ein Kommentar ist und alles verletzt, was wir über das Schreiben von Gut wissen (oder wissen sollten), Qualität Antworten?

    – trejder

    16. Oktober 2014 um 12:04 Uhr

  • @trejder Ja, du übersiehst die Tatsache, dass diese Antwort (fast genau) vor 2 Jahren geschrieben wurde, als ich keine 61,5k hatte.

    – Madaras Geist

    16. Oktober 2014 um 13:27 Uhr

Das ist eine spannende Frage.

Durch kurzes Experimentieren habe ich herausgefunden, dass „Luck“ die gleiche Farbe (zumindest in meinen Augen) wie „LuckyCharms“ erzeugt, aber „LuckBeALady“ einen dunkleren Farbton erzeugt, während „LuckBeALadyTonight“ blauer ist.

Übrigens war mein erster Gedanke, dass es auf die erkennbaren Hex-Zeichen einwirkt, aber das verwandelt “LuckyCharms” in cca, was schwarz wird. Kombinationen von Nullen und den Hex-Zeichen, wie Madara Uchiba vorschlägt, konnten nicht dasselbe Grasgrün wie “LuckyCharms” darstellen.

Habe da keine Antwort.

  • Ich dachte dasselbe über die Hex-Codes, stellte aber fest, dass es nicht flog.

    – Jeremy Goodell

    17. Oktober 2012 um 17:02 Uhr

  • Gemäß den Regeln, die in dem von @Quentin geposteten Link angegeben sind, “LuckyCharms” = “Luck yCha rms0” = “Lu yC rm” = #00C000, “Luck” = “Luck00” = “#00C000, LuckBeALady = “Luck BeAL ady0 ” = “Lu Be ad” = “#00BEAD” und LuckBeALadyTonight = “LuckBe ALadyT onnight = “Lu AL on” = #00A000. Meine Tests zeigen, dass diese Werte tatsächlich genau die gleichen Farben erzeugen.

    – Jeremy Goodell

    17. Oktober 2012 um 17:31 Uhr

  • hmmm, nicht ganz richtig, es scheint nicht für “adamlevine” zu funktionieren, was laut meiner Analyse “adam levi ne00” oder “#ADE0E0” sein sollte, aber das ist es nicht.

    – Jeremy Goodell

    17. Oktober 2012 um 17:47 Uhr

Die grundlegende Antwort auf das, was zu erwarten ist, lautet “es hängt vom Browser ab”. Eines der Probleme mit früheren HTML-Versionen vor 5 besteht darin, dass nicht angegeben ist, was passiert, wenn der Browser auf nicht standardmäßiges HTML stößt. Die Interpretation von @Madara Uchiha ist ein Beispiel dafür, wie ein Browser die Farbspezifikation interpretieren könnte, aber es ist genauso zulässig, dass der Browser abstürzt oder das CD-Fach auswirft oder die Auflösung Ihres Monitors auf 400 x 300 ändert px. Das ist natürlich nicht ideal – was Sie also sehen, ist die Idee eines Programmierers, was passieren sollte, wenn eine nicht standardmäßige HTML-Farbspezifikation angetroffen wird.

Der Grund, warum es mit CSS nicht passiert, ist, dass es ein anderer Parser ist, der die Farbe interpretiert. Derselbe Parser interpretiert die Farbe unabhängig davon, ob es sich um Inline-CSS oder in einem verlinkten CSS-Dokument handelt. CSS definiert Was passiert mit einem falschen Wert, wenn er auftritt: Er wird ignoriert und wirkt sich überhaupt nicht auf das Dokument aus.

Ich würde sagen, dass dies ein guter Zeitpunkt ist, um mit der Klasse über die Einhaltung von Standards zu sprechen, da dies ein kritischer Bereich des Verständnisses für Studenten ist – und für einige Fachleute, die ich unglücklicherweise kenne. Wenn sie sagen: “Aber Farbskittles funktioniert gut”, können Sie ihnen sagen, dass es gut funktioniert wenn sie es anschauenaber es ist durchaus möglich, dass es den Browser ihrer Dozenten zum Absturz bringt und ihnen ein dickes, fettes F einbringt. Das kommt einem Szenario aus der realen Welt so nahe wie möglich, wenn einige von uns ihre Wochenenden aufgeben müssen, weil jemand zur Demo-Zeit ist Sonst funktioniert der beschissene Code nicht richtig.

Ich bin aber nicht verbittert. Meist 🙂

1298470cookie-checkWarum erzeugen seltsame Dinge im Schriftfarbenattribut echte Farben? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy