Warum HTML-denken "chucknorris" ist eine Farbe?
Wie kommen bestimmte zufällige Zeichenfolgen erzeugen von Farben, wenn eingegeben, wie Hintergrundfarben in HTML? Zum Beispiel:
HTML:
<body bgcolor="chucknorris"> test </body>
...erzeugt ein Dokument mit einer roten hintergrund für alle Browser und Plattformen.
Interessanterweise, während chucknorri
erzeugt einen roten hintergrund sowie chucknorr
erzeugt einen gelben hintergrund.
Was ist denn hier Los?
- Als Anmerkung: verwenden Sie nicht
bgcolor
. Verwenden Sie CSS -background
. - Warum haben Sie jemals wollen, fügen Sie eine Hintergrundfarbe genannt
chucknorris
? Was war die erwartete Farbe? - Ich weiß nicht, warum mein Kommentar unter die akzeptierte Antwort gelöscht wurde, als "nicht konstruktiv", denn es beantwortet deine Frage ziemlich gut: die Leute Experimentieren mit diesen Dingen die ganze Zeit. Ich war nur 10, als ich entdeckte dies, und alles, was ich Tat, war zu der Zeit Herumspielen und sehen, was passiert. Sie haben nicht immer zu einem praktischen Grund, etwas zu tun, vor allem für etwas so frivol wie diese.
- und
<body bgcolor="stevensegal">
test </body> grün - Ich denke
"stevensegal"
interpretiert wird (fast) als hex code:0eee0a
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein überbleibsel aus dem Netscape-Tagen:
Ist es aus dem blog-post Ein wenig schimpfen über Microsoft Internet Explorer in der Farbe analysieren, die es deckt sehr detailliert, einschließlich unterschiedlicher Längen der Farbwerte, etc.
Wenn wir die Regeln wiederum aus dem blog-post, erhalten wir die folgenden:
Ersetzen Sie alle ungültige hexadezimal-Zeichen mit 0
Pad raus auf die nächste Gesamtzahl der Zeichen, die durch 3 teilbar (11 -> 12)
Aufgeteilt in drei gleich große Gruppen, wobei jede Komponente, die den entsprechenden Farbkomponenten des RGB-Farbe:
Abschneiden jedes der Argumente von rechts zwei Zeichen
Gibt das folgende Ergebnis:
Hier ist ein Beispiel, das die
bgcolor
Attribut in Aktion, um dieses "amazing" - Farbmuster:HTML:
Diese auch Antworten, die den anderen Teil der Frage; warum
bgcolor="chucknorr"
produzieren eine gelbe Farbe? Gut, wenn wir die Regeln anwenden, wird die Zeichenfolge:Gibt ein helles gelb-gold Farbe. Als der string beginnt als 9 Zeichen, wir halten an dem zweiten C diese Zeit, um sich damit landet es in den endgültigen Farbwert.
Ich ursprünglich festgestellt, wenn jemand darauf hingewiesen, die Sie tun könnten
color="crap"
und naja, es kommt heraus, Braun.0F6
wird#00FF66
, nicht#000F06
.<body bgcolor=error><h1 style=text-align:center>Error: Not Found<h1></span>
Man könnte hinzufügen, ein div mit anothe hintergrund oder so etwas wie, dass, also es ist nicht so, dass ästhetisch schockierend.f05
in einem Ihrer Kanäle,0xf0 / 0xff
ist viel näher als0x05/0xff
zu0xf05 / 0xfff
td[bgcolor="chucknorris"] {...}
).div color="crap"
ist in der Tat eine bräunliche Farbe in old-skool HTML4 (wenn Sie einen anderen browser, der noch Rendern 🙂rgb(192, 192, 0)
<body bgcolor="dog?">
: html.spec.whatwg.org/multipage/...Tut mir Leid zu widersprechen, aber nach den Regeln für die Analyse einer legacy-Farbwert geschrieben von @Yuhong Bao,
chucknorris
ist NICHT gleichzusetzen mit#CC0000
, sondern#C00000
einen sehr ähnlichen, aber leicht unterschiedlichen Farbton von rot. Ich benutzte die Firefox, ColorZilla add-on um dies zu überprüfen.Die Regeln besagen:
chucknorris0
chuc knor ris0
ch kn ri
C0 00 00
War ich in der Lage, diese Regeln richtig zu interpretieren folgenden Zeichenfolgen:
LuckyCharms
Luck
LuckBeALady
LuckBeALadyTonight
GangnamStyle
UPDATE: Die original-Beantworter, der sagte, die Farbe war
#CC0000
haben die da bearbeitet Ihre Antworten zu zählen, die Korrektur.adamlevine
funktioniert wie pro jsfiddle.net/LdyZ8/2959 aber die Buchstaben sind gesperrt inada00e000e
ist gepolstert, umada00e000e00
aber dann reduziert bis auf die typische 6-stellige HEX-Wert des[ad]a0[0e]00[0e]00
damit ad0e0e, die in der jsfiddle oben.Meisten Browser ignorieren Sie einfach alle NICHT-hex-Werte in deiner Farbe-Zeichenfolge, die Substitution nicht-hex-Ziffern mit Nullen.
ChuCknorris
übersetztc00c0000000
. An diesem Punkt, der browser teilt die Zeichenfolge in drei gleiche Abschnitte, was darauf hinweist Rot, Grün und Blau Werte:c00c 0000 0000
. Extra-bits in jedem Abschnitt wird ignoriert, das macht das Endergebnis#c00000
die eine rötliche Farbe.Beachten, dies gilt nicht gelten für CSS-Farb-Analyse, welche Folgen der CSS-standard.
HTML:
bgcolor
Attribut.Wird der browser versuchen, zu konvertieren
chucknorris
in hex Farbe code, denn es ist kein Gültiger Wert.chucknorris
alles außerc
ist keine gültige hex-Wert.c00c00000000
.Dies scheint ein Problem zu sein in Erster Linie mit Internet Explorer und Oper (12) als Chrom (31) und Firefox (26), einfach ignorieren.
P. S. Die zahlen in den Klammern sind die browser-Versionen, die ich getestet habe auf.
.
Auf einer leichteren note
Der Grund ist, der browser kann nicht verstehen und versuchen, Sie irgendwie zu übersetzen, was Sie verstehen können und in diesem Fall in einen hexadezimalen Wert!...
chucknorris
beginnt mitc
erkannten Zeichen in hexadezimal, und es wird auch die Konvertierung von allen verkannte die Zeichen in der0
!So
chucknorris
im hexadezimal-format wird:c00c00000000
alle anderen Charaktere werden0
undc
bleibt, wo Sie sind...Jetzt bekommen Sie durch 3 dividiert, für
RGB
(rot, grün, blau)...R: c00c, G: 0000, B:0000
...Aber wir wissen, gültigen Hexadezimalwert für die RGB-nur 2 Zeichen, bedeutet
R: c0, G: 00, B:00
Also das eigentliche Ergebnis ist:
Ich habe auch die Schritte, die in dem Bild als eine Kurzanleitung für Sie:
Die WHATWG-HTML-Spezifikation hat der genaue Algorithmus für die Analyse einer legacy-color-Wert:
https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-a-legacy-colour-value
Den code von Netscape Classic verwendet für die Analyse von Farbe strings ist open source:
https://dxr.mozilla.org/classic/source/lib/layout/layimage.c#155
Beispielsweise bemerken, dass jedes Zeichen wird analysiert, wie eine hex-Ziffer und dann verschoben wird in eine 32-bit-Ganzzahl ohne überprüfung auf überlauf. Nur acht hex-Ziffern passen in ein 32-bit-Ganzzahl, die ist, warum nur die letzten 8 Zeichen sind, werden berücksichtigt. Nach dem Parsen der hex-Ziffern in 32-bit-Ganzzahlen, Sie werden dann abgeschnitten in 8-bit-Ganzzahlen, die durch Division durch 16, bis Sie passen in 8 bit, das ist der Grund, warum führende Nullen werden ignoriert.
Aktualisieren: dieser code nicht genau was definiert wird, in der spec, aber der einzige Unterschied sind ein paar Zeilen code. Ich denke, es sind diese Zeilen, die Hinzugefügt wurde (bei Netscape 4):
Antwort:
c
ist die einzige gültige hex-Zeichen in chucknorris, der Wert verwandelt sich in:c00c00000000
(0 für alle Werte, die ungültig waren).Red = c00c
,Green = 0000
,Blue = 0000
.c00000
was ist ein backstein-rötlich getönten Farbe.chucknorris beginnt mit c, und der browser liest es in einen hexadezimalen Wert.
Wandelt der browser
chucknorris
auf einen hexadezimalen Wert,C00C00000000
.Dann die
C00C00000000
hexadezimalen Wert umgewandelt RGB format (geteilt durch 3):Muss der browser nur zwei Ziffern zur Angabe der Farbe:
Schließlich zeigen
bgcolor = C00000
im web-browser.Hier ist ein Beispiel verdeutlicht es:
HTML:
Den Regeln für das Parsen von Farben auf legacy-Attribute umfasst zusätzliche Schritte, als derjenigen, die in bereits vorhandene Antworten. Die truncate-Komponente 2-stellig Teil wird beschrieben als:
Einige Beispiele:
Unten ist eine teilweise Implementierung des Algorithmus. Es behandelt nicht die Fehler oder Fälle, in denen der Benutzer eine gültige Farbe.
JS:
CSS:
HTML: