Warum werden 3-stellige hexadezimale Farbcodewerte im Internet Explorer anders interpretiert?

9

Wie genau interpretiert der Internet Explorer sie und unter welchen Richtlinien oder Normen?

Zum Beispiel:

#FFF

erscheint beispielsweise in Google Chrome als die Farbe Weiß, während sie im Internet Explorer (ich habe es auf 8 und 9 getestet) als schwarz erscheint.

Ich Code, den ich verwendet habe, um dies zu testen, war wie folgt:

<body bgcolor="#ffffff"> vs. <body bgcolor="#fff">

(Ich bin mir bewusst, dass bgcolor veraltet ist, es war einfach praktisch für das, was ich zur Hand hatte).

Ich bin mir auch bewusst, dass dies ein Fehler ist, und dass er leicht behoben werden kann, indem ein paar Ziffern (alles in allem 6) an den Hexcode angehängt werden, aber ich bin nur daran interessiert, die Wissenschaft dahinter zu sehen , wenn es eine Erklärung dafür gibt.

    
seanlevan 16.02.2015, 23:12
quelle

2 Antworten

2

Ich konnte es auch in IE11 neu erstellen. Wie Sie wissen, ist dies ein veraltetes Attribut. Ich nehme an, deine Webseite & amp; Der Browser versucht, den Code als HTML5 zu interpretieren, und es gibt einen Fehler in ihrer graziösen Verschlechterung, um damit umzugehen. Es bricht also einfach.

Wie @Aaron Vanston darauf hinweist, können Sie mit Inline-Stil oder CSS immer noch die Kurzschrift verwenden, um eine Farbe anzuwenden.

Ich würde nicht einmal meine Zeit damit verschwenden, bgcolor als Attribut zu schreiben. Wenn ich in etwas, an dem ich gerade arbeite, auf etwas stoßen würde, würde ich es zugunsten von

entfernen %Vor%

oder die CSS-Alternative

%Vor%     
EnigmaRM 16.02.2015, 23:51
quelle
16

Da Sie interessiert sind, die Wissenschaft dahinter zu sehen, warum es auftritt, wenn es eine Erklärung dafür gibt ...

TLDR:

'Farbwerte' sind nicht 'universal'.

Die abgekürzte / verkürzte dreistellige hexadezimale #RGB -Form wird in der CSS-Spezifikation beschrieben, nicht in HTML. Daher wird die dreistellige Form in einem anderen Attribut als "style" oder in einem <style> -Tag in einigen Browsern nicht als gültige Farbe interpretiert.
Ссылка



Eingehend:

Ich beginne mit der CSS 1-Spezifikation, Farbeinheiten (6.3) ( da es einige Begriffe / Konzepte einführt, die ich dann nicht wiederholen muss), die spezifiziert:

  

Eine Farbe ist entweder ein Schlüsselwort oder eine numerische RGB-Spezifikation.

     

Die vorgeschlagene Liste der Namen der Keyword-Farben lautet: aqua, black, blue,   Fuchsia, Grau, Grün, Limone, Kastanienbraun, Marine, Olive, Purpur, Rot, Silber,   blaugrün, weiß und gelb. Diese 16 Farben stammen aus Windows   VGA-Palette und ihre RGB-Werte sind in diesem nicht definiert   Spezifikation.

%Vor%      

Das RGB-Farbmodell wird in numerischen Farbspezifikationen verwendet.   Diese Beispiele haben alle dieselbe Farbe:

%Vor%      

Das Format eines RGB-Wertes in hexadezimaler Schreibweise ist ein ' # '   unmittelbar gefolgt von drei oder sechs hexadezimalen Zeichen.   Die dreistellige RGB-Notation ( #rgb ) wird in sechsstellige Form konvertiert   ( #rrggbb ) durch Replizieren von Ziffern, nicht durch Hinzufügen von Nullen. Beispielsweise,    #fb0 wird auf #ffbb00 erweitert. Dies stellt sicher, dass Weiß ( #ffffff ) sein kann   wird mit der kurzen Notation ( #fff ) angegeben und entfernt alle Abhängigkeiten   auf die Farbtiefe des Displays.

     

Das Format eines RGB-Wertes in der funktionalen Notation ist ' rgb( '   gefolgt von einer durch Kommas getrennten Liste von drei numerischen Werten (entweder   drei ganzzahlige Werte im Bereich von 0-255 oder drei Prozentwerte   im Bereich von 0,0% bis 100,0%) gefolgt von ) . Whitespace-Zeichen   sind um die numerischen Werte erlaubt.

     

Werte außerhalb der numerischen Bereiche sollten abgeschnitten werden. Die drei Regeln   unten sind daher gleichwertig:

%Vor%      

RGB-Farben werden im sRGB-Farbraum angegeben. UAs können in den variieren   Treue, mit der sie diese Farben darstellen, aber Verwendung von sRGB   bietet eine eindeutige und objektiv messbare Definition von was   die Farbe sollte sein, die mit internationalen Standards in Verbindung gebracht werden kann.

Im Zusammenhang mit CSS gab es in Bezug auf die Browser-Unterstützung nur zwei "interessante" Dinge, die ich finden konnte:

  • Alle Browser, die Stylesheets unterstützen (Version 3 und höher, außer IE3 Mac), unterstützen diese aus drei Zeichen bestehende Kurzform hexadezimaler Farben (Quellen: 1 , 2 , "CSS-Farben optimieren" von King AB)
    Beachten Sie den historischen Zeitrahmen dieses Textes. IE3 ... auf Mac ... Browser wie FireFox 1 oder Chrome waren damals noch nicht einmal da.
  • Die beiden rgb() -Methoden leiden unter der Nicht-Unterstützung von Internet Explorer 3 für sie
    Quelle: 1 (sehr gut gelesen)



Gemäß der HTML4-Spezifikation ist das Attribut bgcolor war nur für <body> , <table> , <tr> , <th> und <td> . (Was die Legacy-Spezifikation betrifft, kann sie beispielsweise nicht für <div> verwendet werden.)

Alle sind vom CDATA -Typ: %Color;
Das wurde definiert als:

%Vor%

Der Zaubersatz hier ist: " eine Farbe mit sRGB : #RRGGBB als Hex-Werte ".

Wenn ich dies mit dem Hut eines Spezifizierungs-Implementierers lese, muss ich zustimmen, dass ich nicht die 3-stellige Kurzbezeichnung code% angeben kann, und ich hätte sie nicht implementiert (ich hätte sie auch nicht implementiert) #RGB ).

Wie für HTML5 ist das RGB(DDD,DDD,DDD) -Attribut für alle vorherigen (HTML4) angegebenen Elemente veraltet (siehe oben).
Das bedeutet, dass sich das Format gültiger 'Farbcodes' in Bezug auf die Spezifikation in absehbarer Zeit nicht ändern wird.



Fazit:

Nur akzeptieren eine benannte Farbe (aus einer angegebenen / unterstützten Liste) oder ein Hex-Triplet (Format bgcolor ) Der sRGB-Farbwert des HTML-Attributs #RRGGBB ist kein Fehler ; es ist per spec!
Cross-Browser-Lösung: ..siehe Spezifikation ☺

Wenn man fälschlicherweise einen Kurzzeiger-Farbwert für bgcolor in einer Parsing- / Rendering-Engine angibt, die dies nicht unterstützt, dann passiert entweder nichts oder eine unbeabsichtigte Farbe wird angezeigt; effektiv haben Sie 'Chuck Norris'-land eingegeben.
Vor allem für MS IE und MS Outlook erscheinen die Farben fast schwarz . Beispiel: bgcolor (Kurzschrift) wird #ff0 (anstelle von #0f0f00 ). Ein anderes Beispiel: #ffff00 wird #07c , usw.
Allerdings werden einige andere Implementierungen #00070c in #ff0 und #000ff0 in #07c !! Wenn man einen #00007c -Wert für RGB(RRR,GGG,BBB) falsch festlegt, können alle Arten von Farben erscheinen, zum Beispiel kann bgcolor zu einem sehr dunklen Grünton werden Quelle , etc.

Hier haben wir also ein lustiges Beispiel, wo Microsofts Internet Explorer (alle bekannten Versionen, einschließlich IE11) die Spezifikation befolgt haben und viele Leute sich noch beschweren ..

Ich habe unzählige Bug-Rapports in Bezug auf "den 3-stelligen Farbwert-Kurzschreibfehler" für das RGB(255,255,255) -Attribut " (über 15 Jahre hinweg) gefunden, der zum Beispiel in MS IE, alternativen Browsern, angesprochen wird MS IE HTML Parsing / Rendering Engine und die meisten lokalen App / webbasierten Email-Clients wie Gmail, (alle Versionen von) Outlook (-Express), Lotus Notes, Android, etc. etc. etc. (zB 1 , 2 , 3 , < a href="https://www.sundoginteractive.com/sunblog/posts/help-all-i-see-is-a-black-background-in-my-email"> 4 , 5 , etc.)

Warum die Beschwerden / Bug-Rapports?
Da einige andere Browser (wie FireFox, Chrome) Farbwerte in anderen Formaten unterstützen / unterstützen dann bgcolor im HTML-Attribut #RRGGBB .
Warum unterstützen andere das?
Ich habe nur 2 Vermutungen: (a) Es ist ein Rest von "BrowserWar 1", wo eine der Schlachten herum war "Mein Browser kann 'Sinn' von größerem cr @ p-Code machen als der Konkurrent", wäre aber etwas wahrscheinlicher (b) Wiederverwenden des Codes aus dem CSS-Farbwert-Parser ... schließlich hätte ich das auch getan



Extras:

Warum sollte sich irgendjemand anno 2015 noch um bgcolor kümmern?
Warum generiert das immer noch so viele Bug-Rapports und Fragen?
Die Antwort ist HTML Email ...
In der Theorie (zum ahnungslosen Web-Entwickler) ist es "nur HTML und CSS" ..
In der Praxis ist es erstaunlich schwierig ( 1 ) um richtig zu kommen. Denken Sie daran: alle Cross-Browser-Probleme, die jemals in der Macht von 3 bestanden haben!
Es muss auf weit mehr E-Mail-Clients auf zahlreichen Plattformen (viele "Legacy" -Anwendungen, die tatsächlich noch verwendet werden) funktionieren, es muss auch in webbasierten Clients wie Gmail, AOL, Yahoo, Hotmail, usw. usw.
Sie müssen nicht nur den kleinsten gemeinsamen Nenner kodieren (viele Techniken wurden schon vor einem Jahrzehnt als alt angesehen), sie müssen sogar versuchen, sich in das Layout / den Stil einiger der webbasierten Clients einzufügen.

>

Ihre typische Struktur ist eine große Hintergrundtabelle, dann ein div, dann eine Haupttabelle und verschachtelte Tabellen, falls nötig ...
Um die Dinge in eine andere Perspektive zu stellen, laut lackmus (anno 2014): < br> " Es stellt sich heraus, dass die Verwendung von HTML bgcolor mit einem 6-stelligen Hexadezimalcode auf der Tabelle und auf der Ebene von td "

die zuverlässigste Methode zur Codierung von Hintergrundfarben ist



Natürlich wird dieses "Durcheinander" nicht bald verschwinden und eine gemeinsame Sache für einen Web-Entwickler ist das Codieren / Entwerfen von HTML-E-Mail ... Daher denke ich, dass ein gutes vollständiges Verständnis (und eine Antwort auf diese Angelegenheit) besteht immer noch sehr relevant anno 2015 und die nahe Zukunft.

Hoffe, das hilft!

PS: MS IEs bgcolor akzeptiert auch keine 3-stelligen hexadezimalen Kurzfarbwerte, aber jetzt, wo man an die Vorstellung erinnert wird, dass 'Farbwerte nicht Universal' sind, ist dies weniger überraschend (und kein Fehler , außer es wurde angegeben, dass er solche Werte akzeptieren würde.

    
GitaarLAB 22.08.2015 08:24
quelle

Tags und Links