Interpretacja pewnych elementów wyglądu strony w Internet Explorerze 5 w dużym stopniu różniła się od obowiązujących standardów. Inne przeglądarki często się do tego dostosowywały. W Internet Explorerze 6 ta sytuacja uległa zmianie. Jednak, aby nie powodować poważnych błędów wyświetlania na starszych stronach WWW, które poprawnie wyświetlały się we wcześniejszej wersji IE, Microsoft wprowadził w swojej nowej przeglądarce dwa tryby interpretacji kodu HTML:
Sposobem na przełączanie się pomiędzy trybami interpretacji jest deklaracja DTD. Mianowicie przejście do trybu zgodności ze standardami następuje, jeśli podamy deklarację Strict DTD (z lub bez adresu strony z definicją elementów języka), Transitional DTD (tylko z adresem) lub Frameset DTD (również z podaniem adresu). Natomiast użycie Transitional DTD albo Frameset DTD, ale już bez adresu, wywołuje tryb Quirks. W ten sposób zachowuje się nie tylko Internet Explorer 6, ale również inne popularne przeglądarki jak np. Mozilla/Firefox czy Opera.
Przykład:
Tryb zgodności ze standardami W3C:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">Tryb Quirks - niecałkowitej zgodności:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
Różnice w wyznaczaniu rozmiaru elementów - własności width oraz height. W trybie Quirks marginesy wewnętrzne i obramowanie zawierają się wewnątrz rozmiarów elementu, natomiast wg CSS na zewnątrz.
[Porównaj: Model pudełkowy wg CSS 2]
Nie dotyczy przeglądarki Firefox ani Opera.
We wcześniejszych wersjach Internet Explorera przedstawiony wyżej model określania rozmiarów wg CSS odnosi się tylko do szerokości komórek tabeli, ale nie do ich wysokości. Wcześniejsze wersje MSIE nie stosowały tych zasad również w ogóle dla tabeli o rozplanowaniu stałym ("fixed").
We wcześniejszych wersjach MSIE własność padding nie miała zastosowania do znacznika <img />.
W trybie Quirks element body
odzwierciedla przestrzeń, w której jest wyświetlany dokument. Szerokość tego elementu była zawsze równa szerokości okna przeglądarki. Marginesy ustalone dla body
były ustawiane wewnątrz ramki i suwaków okna.
W trybie zgodności ze standardami element body
może uzyskać określony rozmiar poprzez jego zawartość albo bezpośrednie ustalenie - zachowuje się analogicznie jak np. element div. W tym trybie to element html
reprezentuje ramy dokumentu. Analogicznie to element html
a nie body
staje się "pojemnikiem" dla elementów pozycjonowanych, które nie mają wypozycjonowanego rodzica.
W trybie Quirks atrybut scroll="yes|no|auto"
oraz własności CSS overflow, overflow-x
i overflow-y
stosuje się do selektora body
, natomiast w trybie zgodności do selektora html
.
W trybie zgodności elementy html
oraz body
mogą mieć osobne marinesy i tła.
W MSIE 6 została dodana obsługa własności min-height oraz wartości pre
dla word-spacing. Ponadto wartość list-item
własności display można przypisać dowolnemu elementowi.
Wartość auto dla własności margin oraz width określa, które własności powinny się dopasować, kiedy reguły stylów nakładają się lub są ze sobą sprzeczne. Pozioma pozycja i szerokość niepływających elementów blokowych jest ustalana przez własności margin
, border, padding i width
. Suma tych wartości (z lewej i z prawej strony) równa się szerokości bloku, który zawiera dany element; szerokość jest dziedziczona z obejmującego bloku. Nie można zmienić szerokości obejmującego (zewnętrznego) bloku poprzez zmianę wartości margin
, border
, padding
lub width
dla bloku wewnętrznego. Kiedy określamy wartości dla niektórych z tych własności, pozostałe mogą zostać dopasowane tak, aby wynikowa szerokość nie przekraczała szerokości "pojemnika". Własności margin
i width
mogą otrzymać wartość auto, wtedy właśnie zostaną dopasowane.
width
jest ustawione na auto, wszystkie inne wartości auto przekształcają się na zero, a szerokość jest ustalana z wypadkowej równości w odniesienie do bloku "pojemnika".Przykład:
<div>1</div> <div style="width: 50%; margin-left: 0">2</div> <div style="width: 50%; margin-right: auto">3</div> <div style="width: 50%; margin-left: auto">4</div> <div style="width: 50%; margin-left: auto; margin-right: auto">5</div>
Tryb Quirks w MSIE skutkuje nieprawidłowym sposobem obliczania szerokości bloku wyrażonej w procentach, gdy jednocześnie ustalono marginesy poziome. Podając "width: 100%" i niezerową wartość margin-left czy margin-right, nigdy sumarycznie nie przekroczymy szerokości ustalonej dla bloku nadrzędnego, podczas gdy w trybie zgodności marginesy zostaną dodane na zewnątrz.
Przykład:
<div style="width: 500px"> <div style="width: 100%; margin-left: 50px">...</div> </div>
W trybie zgodności ze standardami zawartość bloku wewnętrznego będzie miała szerokość 500px (nie licząc marginesów), natomiast w trybie Quirks przyjmie wartość: 500px - 50px = 450px.
Nie dotyczy przeglądarki Firefox ani Opera.
Tryb Quirks pozwala na pewnie zapisy niezgodne z CSS jak np. pominięcie znaku "#" (krzyżyk) przed heksadecymalną wartością koloru. Dotyczy to również przeglądarki Opera.
Starsze wersje Internet Explorera pozwalały wstawiać w arkuszu stylów komentarze w stylu HTML, tzn. <!-- ... -->
. Natomiast w trybie zgodności można używać tylko komentarzy w stylu C (długich): /* ... */
.
W trybie zgodności jeżeli deklaracja zawiera nierozpoznawaną wartość, zostaje pominięta w całości. Na przykład po podaniu:
span { text-decoration: underline cross-out overline }
tekst nie zostanie nawet podkreślony ani nadkreślony, ponieważ wartość cross-out jest nieprawidłowa. Natomiast starsze wersje Internet Explorera interpretowały deklarację do pierwszego nierozpoznanego składnika, tzn. w tym przypadku tekst zostałby pokreślony, ale nie nadkreślony. Miało to wpływ na następujące własności CSS: font, background, background-position, text-decoration, margin, padding, border, border-top, border-right, border-bottom, border-left, border-color, border-width, border-style, list-style-image, list-style, clip oraz behavior, text-autospace i layout-grid.
W trybie zgodności dla własności font musimy obowiązkowo podać przynajmniej wielkość i rodzaj czcionki, w przeciwnym razie cała deklaracja zostanie zignorowana. Wcześniejsze wersje Internet Explorera przyjmowały także częściowe ustawienia. Dotyczy to również przeglądarki Opera.
W trybie zgodności każda wartość określająca długość musi mieć obowiązkowo podaną jednostkę. Wartości bez jednostek lub z wstawioną spacją między liczbą a jednostką są ignorowane. W trybie Quirks przeglądarka w takich przypadkach przyjmuje wartość jako podaną w pikselach (px). Dotyczy to również przeglądarki Firefox i Opera.
Niedozwolone jest ujmowanie znanych wartości CSS w cudzysłowy. Starsze wersje Internet Explorera jednak interpretowały takie wartości.
Niedozwolone jest rozpoczynanie cyfrą wartości atrybutów class="..."
ani id="..."
(również Opera). Wartości te są ponadto "czułe" na wielkość liter (również Firefox i Opera).
W starszej wersji Internet Explorera domyślnej wielkości czcionki odpowiadała wartość small, natomiast MSIE 6 przyjmuje w tym przypadku medium (również Opera).
W trybie Quirks wartości tekstowe oprócz font-family (w MSIE 3+) dla tabeli są dziedziczone tylko z elementu body
(również Firefox i Opera). Przejście na tryb zgodności pozwala tabelom dziedziczyć od dowolnego rodzica wartości własności takich jak: color, font-size, font-weight, font-style, font-variant, text-decoration, text-transform, letter-spacing i line-height.
Tryb Quirks pozwala określić rozmiary elementów wyświetlanych w linii (inline).
W trybie zgodności znak odwróconego ukośnika "\" pozwala usunąć z następnego znaku jego specjalne znaczenie (tzw. "escape character").
W trybie Quirks przeglądarka Firefox i Opera obsługuje pseudoklasę :hover tylko dla odsyłaczy, obrazków i pól formularzy, chyba że selektor zawiera dodatkowo nazwę znacznika, identyfikator lub atrybuty.
W trybie Quirks Opera zawsze powiększa wysokość bloku w taki sposób, aby mieściła się w nim jego zawartość. Natomiast w trybie zgodności ustawienie wartości height jest prawidłowo uwzględnianie.
Źródło: CSS Enhancements in Internet Explorer 6
Inne przydatne artykuły:
Microsoft Internet Explorer 8.0 wprowadza aż trzy tryby renderowania dokumentów:
Przełączenie do trybu Quirks jest realizowane identycznie jak we wcześniejszych wersjach MSIE, tzn. poprzez odpowiednią deklarację DTD. We wszystkich innych przypadkach dokument powinien się wyrenderować w trybie Standards Compliance, który jest najbardziej zgodny ze standardami HTML i CSS. Natomiast w trybie Compatibility View dokumenty wyświetlają się tak jak w trybie zgodności ze standardami, który był dostępny w MSIE 7 - jak się okazało, wcale nie był on taki do końca "zgodny", jakby wskazywała uprzednia jego nazwa, ale Microsoft zdecydował się go zachować ze względu na kompatybilność wstecz.
Pewnym zaskoczeniem może być fakt, że użycie DTD innego niż dla trybu Quirks, może włączyć zarówno tryb MSIE 7 jak i MSIE 8. Standards Compliance (tryb najwyższej zgodności) jest domyślnym, jednak użytkownik przeglądający stronę może sam zdecydować - za pomocą specjalnego przycisku znajdującego się przy pasku adresu przeglądarki - że chce ją wyświetlić w trybie Compatibility View, czyli tak jak w MSIE 7. Jest to ostatnia deska ratunku, gdy dokument który usiłuje wyświetlić, nieprawidłowo renderuje się w założonym trybie najwyższej zgodności. W takim przypadku emulacja jest tak dokładna, że nie da się w ogóle rozpoznać, że tak naprawdę używany jest MSIE 8, ponieważ przeglądarka "przedstawia się" (za pomocą nagłówka HTTP "User-Agent" oraz dla skryptów JavaScript) jako MSIE 7.0.
Jak już wspomniano, Internet Explorer 8 wreszcie praktycznie w pełni obsługuje obowiązujące standardy. Paradoksalnie w pewnych przypadkach może to nam przysporzyć wiele kłopotów. Ze względu na całą masę błędów w poprzednich wersjach tej przeglądarki, często okazuje się, że strona zoptymalizowana tak, aby prawidłowo funkcjonowała np. w MSIE 6 lub 7, teraz wyświetla się nieprawidłowo, ponieważ wszystkie "obejścia", które wcześniej trzeba było zastosować, powodują teraz problemy. W takiej sytuacji doraźnym rozwiązaniem mogłoby być przynajmniej tymczasowe wymuszenie trybu renderowania dokumentu w trybie Compatibility View (kompatybilnym z MSIE 7), aż nie zdołamy wszystkiego poprawić. Można to zrealizować za pomocą specjalnego znacznika META:
<meta http-equiv="X-UA-Compatible" content="IE=wersja" />
Inaczej niż przełączanie w tryb Quirks za pomocą DTD, który to sposób jest identycznie obsługiwany przez wszystkie liczące się przeglądarki, przedstawiony znacznik META działa tylko w MSIE 8. Powód jego ignorowania przez inne przeglądarki jest bardzo prosty: dla nich nie jest potrzebny żaden dodatkowy tryb, ponieważ odpowiednio wysoki poziom zgodności ze standarami HTML i CSS osiągnęły już dawno :-)
Warto jeszcze zwrócić uwagę na kilka ważnych zagadnień:
<meta />
lub element <title>...</title>
!rel="alternate stylesheet"
jest równoważny rel="stylesheet alternate"
.Źródło: CSS Improvements in Internet Explorer 8
Inne przydatne artykuły: