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).
Najprawdopodobniej błąd związany konkretnie z przestarzałym bgcolor, jeśli zastosujemy #fff przez konwencjonalny oznacza jego grzywnę. –
@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