2015-02-16 17 views
8

Jak dokładnie interpretuje je Internet Explorer i pod jakimi wytycznymi lub zestawem standardów?Dlaczego 3-cyfrowe wartości kodów kolorów szesnastkowych są różnie interpretowane w przeglądarce Internet Explorer?

Na przykład:

#FFF

się wydawać, że kolor biały w Google Chrome, na przykład, podczas gdy w programie Internet Explorer (testowałem go na 8 i 9) pojawia się jako czarny.

I Kod kiedyś przetestować ten był następujący:

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

(Jestem świadomy, że bgcolor jest przestarzała, to było po prostu wygodne, co miałem pod ręką realizacji).

Mam również świadomość, że jest to błąd i można go łatwo naprawić, dołączając kilka cyfr (w sumie 6) do kodu heksadecymalnego, ale interesuje mnie tylko nauka, dlaczego tak się dzieje. występuje, jeśli istnieje wyjaśnienie.

+1

Najprawdopodobniej błąd związany konkretnie z przestarzałym bgcolor, jeśli zastosujemy #fff przez konwencjonalny oznacza jego grzywnę. –

+0

@Aaron Vanston: Jedyny błąd/problem/problem to programista oczekujący przewidywalnego jednolitego wyniku podczas ustawiania * nieprawidłowej wartości dla (HTML) 'bgcolor' * (a następnie mówi o CSS ...) – GitaarLAB

Odpowiedz

2

Udało mi się odtworzyć go również w IE11. Jak wiesz, jest to wycofany atrybut. Zakładam, że twoja strona internetowa próbuje interpretować kod jako HTML5 i istnieje błąd w ich zgrabnej degradacji, aby sobie z tym poradzić. Więc po prostu się psuje.

Jak zaznacza @Aaron Vanston, używając stylu śródliniowego lub CSS, nadal możesz użyć skrótu do nałożenia koloru.

Nie będę nawet marnować czasu na zapisywanie bgcolor jako atrybutu. Jeśli natknąłem to w czymś byłem w pracy, to bym go usunąć za

style="background-color: #fff" 

lub alternatywnie CSS

body { 
    background-color: "#fff"; 
} 
15

Ponieważ jesteś „ciekaw dlaczego za naukę występuje, jeżeli istnieje wytłumaczenie to” ...

TLDR:

"Wartości kolorów" nie są "uniwersalne".

Skrócony/skrócony trzycyfrowy heksadecymalny formularz #RGB jest opisany w specyfikacji CSS, a nie w HTML. W rezultacie trzycyfrowa postać w atrybucie innym niż "styl" lub wewnątrz znacznika <style> nie jest interpretowana jako poprawny kolor w niektórych przeglądarkach.
https://en.wikipedia.org/wiki/Web_colors



W Głębokość:

Zaczynam z CSS 1 spec, Color units (6.3) (ponieważ wprowadza pewne terminy/pojęcia I wtedy nie trzeba powtarzać), która określa:

Kolor jest słowem kluczowym lub specyfikacją liczbową RGB.

Proponowana lista nazw kolorów słowo kluczowe: aqua, czarny, niebieski, szary, fuksja, zielony, limonka, bordowy, granatowy, oliwkowy, fioletowy, czerwony, srebrny, turkusowy, biały i żółty. Te 16 kolorów pochodzi z palety VGA systemu Windows , a ich wartości RGB nie są zdefiniowane w tej specyfikacji .

BODY {color: black; background: white } 
H1 { color: maroon } 
H2 { color: olive } 

Model kolorów RGB jest używany w numerycznych specyfikacjach kolorów. Przykłady te wszystkie określenia tego samego koloru:

EM { color: #f00 }    /* #rgb */ 
EM { color: #ff0000 }   /* #rrggbb */ 
EM { color: rgb(255,0,0) }  /* integer range 0 - 255 */ 
EM { color: rgb(100%, 0%, 0%) } /* float range 0.0% - 100.0% */ 

Format wartości RGB w zapisie szesnastkowym jest „#” bezpośrednio po trzech lub sześciu znaków szesnastkowych. Trzygodzinny zapis RGB (#rgb) jest przekształcany w sześciocyfrową formę (#rrggbb) przez replikację cyfr, a nie przez dodanie zer. Na przykład #fb0 rozwija się do #ffbb00. Zapewnia to, że biały (#ffffff) może być określony za pomocą krótkiej notacji (#fff) i usuwa wszelkie zależności od głębi kolorów wyświetlacza.

Format wartości RGB w notacji funkcyjną jest „rgb(” następnie oddzielone przecinkami trzech wartości liczbowych (albo trzy wartości całkowitą w zakresie 0-255, lub trzy wartości procentowe w zakres od 0,0% do 100,0%), a następnie ")". Białe znaki są dozwolone wokół wartości liczbowych.

Wartości spoza zakresów numerycznych należy obciąć. Te trzy zasady poniżej są więc równoważne: kolory

EM { color: rgb(255,0,0) }  /* integer range 0 - 255 */ 
EM { color: rgb(300,0,0) }  /* clipped to 255 */ 
EM { color: rgb(110%, 0%, 0%) } /* clipped to 100% */ 

RGB są określone w przestrzeni barw sRGB. Aplikacje klienckie mogą różnić się wiernością, w jakiej reprezentują te kolory, ale użycie sRGB zapewnia jednoznaczną i obiektywnie mierzalną definicję koloru, która może być powiązana z międzynarodowymi standardami.

W kontekście CSS, w odniesieniu do przeglądarki wsparciem, tylko 2 „ciekawych” rzeczy mogę znaleźć to:

  • Wszystkie przeglądarki obsługujące arkusze stylów (wersja 3 i wyżej, z wyjątkiem IE3 Mac) obsługuje tego trzy-znakowy skróconą formę kolorów szesnastkowym(Źródła: 1, 2 "Optymalizacja CSS Colors" przez króla AB)
    Uwaga historyczna ramy czasowe tego tekstu .. IE3 ... na Mac ... Przeglądarki takie jak FireFox 1 lub Chrome we ren't nawet wtedy wokół ..
  • Dwa rgb() metody cierpią na brak wsparcia dla nich Internet Explorer 3 za
    Źródło: 1 (bardzo dobry odczyt)



Zgodnie z HTML4 spec, the attributebgcolor był tylko dla <body>, <table>, <tr>, <th> i <td>. (. Więc o ile spec dziedzictwo to dotyczy, nie można go używać na <div> na przykład)

wszystkie z nich są w CDATA -type: %Color;
który był defined jak:

<!ENTITY % Color "CDATA" -- a color using sRGB: #RRGGBB as Hex values --> 

<!-- There are also 16 widely known color names with their sRGB values: 

    Black = #000000 Green = #008000 
    Silver = #C0C0C0 Lime = #00FF00 
    Gray = #808080 Olive = #808000 
    White = #FFFFFF Yellow = #FFFF00 
    Maroon = #800000 Navy = #000080 
    Red = #FF0000 Blue = #0000FF 
    Purple = #800080 Teal = #008080 
    Fuchsia= #FF00FF Aqua = #00FFFF 
--> 

Magiczne zdanie to: "kolor przy użyciu sRGB: #RRGGBB jako wartości heksadecymalne".

Jeśli czytam to na sobie kapelusz specyfikację implementor, trzeba zgadzam się, że nie widzę 3-cyfrowy #RGB notacja short-hand określone i bym nie wprowadziły go (ani bym realizowane RGB(DDD,DDD,DDD)).

Dla wszystkich poprzednich (HTML4) określonych elementów (patrz wyżej).
Oznacza to, że w odniesieniu do specyfikacji, format ważnych 'kolorowych kodów' nie ulegnie zmianie w najbliższym czasie ..



Wniosek:

Przyjmowanie tylko się nazwany kolor (z określonej/obsługiwanej listy) lub "hex triplet" (format #RRGGBB) wartość koloru sRGB w atrybucie HTML bgcolor nie jest błędem; to jest na spec!
rozwiązanie cross-browser: .. zobacz niespełniającego ☺

Jeśli mistakingly określa wartość koloru krótki ręki dla bgcolor na parsowania/silnik renderujący, który nie obsługuje, to albo nic się nie dzieje lub niezamierzony kolor może pokazać; skutecznie wprowadziłeś 'Chuck Norris'-land ..
Przede wszystkim dla MS IE i MS Outlook kolory wydają się prawie czarne. Na przykład: #ff0 (skrócona) stanie się #0f0f00 (zamiast #ffff00). Inny przykład: #07c staną #00070c itp
Jednak niektóre inne implementacje włączyć #ff0 do #000ff0 i #07c do #00007c !! Jeśli mistakingly określa RGB(RRR,GGG,BBB) wartość dla bgcolor, mogą pojawić się różnego rodzaju kolory, na przykład RGB(255,255,255) może stać się bardzo ciemny odcień zieleni source itp

Więc tutaj mamy zabawy przykład, w którym Internet Explorer firmy Microsoft (wszystkie znane wersje, w tym IE11) zrobili postępowali zgodnie ze specyfikacją i wiele osób wciąż narzeka ..
Znalazłem niezliczone raporty o błędach dotyczące "3-cyfrowego, stenotypowego" błędu "błędu dla bgcolor -wpływ " (obejmujący ponad 15 lat) adresowane na przykład do MS IE, alternatywnie przeglądarki internetowe używające mechanizmu analizowania/renderowania HTML MS IE oraz większości klientów poczty e-mail opartych na lokalnych aplikacjach/stronach internetowych, takich jak Gmail, (wszystkie wersje) Outlooka (-Express), Lotus Notes, Android itp. itp. (dla przykładem 1, 2, 3, 4, 5 itp)

dlaczego reklamacje/bug-rapports?
Ponieważ niektóre inne przeglądarki (jak Firefox, Chrome) zrobił/obsługują kolorów wartości w innych formatach następnie #RRGGBB na atrybut HTML za bgcolor.
Dlaczego inni ją obsługują? Mam tylko 2 domysły: (a) To pozostałość po "BrowserWar 1", gdzie była jedna z bitew "Moja przeglądarka może" wyczuć "większy kod p @ p, niż konkurent", ale nieco więcej prawdopodobnie będzie (b) ponowne użycie kodu z CSS kolor wartość parsera ... ostatecznie zrobiłbym że dobrze



Extra:

Dlaczego ktoś miałby anno 2015 nadal dbasz o bgcolor?
Dlaczego to wciąż generuje taką liczbę raportów o błędach i pytań?
Odpowiedź jest HTML Email ...
W teorii (do niczego internetowej dewelopera) to 'tylko HTML i CSS' ..
W praktyce jest to niezwykle trudne (1) aby uzyskać prawo. Pomyśl: wszystkie problemy z przeglądarkami, które kiedykolwiek istniały do ​​potęgi 3!
Musi pracować na o wiele więcej Klientów poczty e-mail na wielu platformach (mnóstwo "starych" aplikacji, które są nadal w użyciu), musi również działać w klientach internetowych, takich jak Gmail, AOL, Yahoo, Hotmail , itd itd.
Nie tylko muszą kodować najniższy wspólny mianownik (wiele technik uznano już za starą grubą dekadę temu), ale muszą nawet spróbować "dopasować się" do układu/stylu niektórych klientów internetowych.

Ich typowa struktura jest jeden duży stół tło, a następnie jeden div, a następnie jeden główny stół i zagnieżdżone tabele w razie potrzeby ...
umieścić rzeczy w dalszej perspektywie, zgodnie z litmus (anno 2014):
" okazuje się, że najbardziej niezawodny sposób kodowania kolorów tła jest użycie atrybutu HTML bgcolor z 6-cyfrowym kodzie szesnastkowym na poziomie tabeli i td "



Oczywiście ten«bałagan»nie będzie szybko się pojawiać i jest czymś powszechnym w tworzeniu sieci er to kodowanie/projektowanie wiadomości e-mail w formacie HTML ... Dlatego uważam, że dobre pełne zrozumienie (i odpowiedź na tę kwestię) jest nadal bardzo istotne w 2015 roku i najbliższej przyszłości.

Mam nadzieję, że to pomoże!

PS: MS IE to filter: progid:DXImageTransform.Microsoft.gradient również nie akceptuje 3-znakowych wartości kolorów, ale teraz, gdy przypomina się o tym, że "Wartości kolorów nie są uniwersalne", jest to mniej zaskakujące (i nie a bug, chyba że określono, że akceptuje takie wartości).

Powiązane problemy