Quirks-läge

Inom datoranvändning är quirks-läge en teknik som används av vissa webbläsare för att bibehålla bakåtkompatibilitet med webbsidor som är designade för gamla webbläsare istället för att strikt följa W3C- och IETF - standarderna i standardläge . Det här beteendet har sedan kodifierats i standarden, så det som tidigare var standardläge kallas nu helt enkelt för no quirks-läge .

Översikt

Strukturen och utseendet på en webbsida beskrivs av en kombination av två standardiserade språk:

  • HTML , ett märkningsspråk designat för webbanvändning, som beskriver strukturen och innehållet på sidan; och
  • CSS , ett generaliserat formatmallsspråk , som anger hur sidan ska renderas i olika medier (visuella stilar för skärmvisning, utskriftsstilar att använda vid utskrift av sidan, fonetiska stilar att använda när sidan läses upp av en skärmläsare , etc. .).

De flesta äldre webbläsare implementerade dock inte helt specifikationerna för dessa språk eller så utvecklades de före slutförandet av specifikationerna ( Microsoft Internet Explorer version 5.0 för Macintosh -plattformen, släppt 2000, var den första stora webbläsaren med fullt stöd för CSS nivå 1, till exempel). Som ett resultat har många äldre webbsidor konstruerats för att förlita sig på de äldre webbläsarnas ofullständiga eller felaktiga implementeringar, och kommer endast att återges som avsett när de hanteras av en sådan webbläsare.

Stödet för standardiserad HTML och CSS i större webbläsare har ökat avsevärt, men den stora mängden äldre dokument som bygger på egenskaperna hos äldre webbläsare utgör ett hinder för webbläsarutvecklare som vill förbättra sitt stöd för standardiserad HTML och CSS, men också vill behålla bakåtkompatibilitet med äldre, icke-standardiserade sidor. Dessutom fortsätter många nya webbsidor att skapas på det äldre sättet, eftersom kompatibilitetslösningarna som introducerats av webbläsarutvecklare innebär att en förståelse för standardiserade metoder inte är strikt nödvändig.

För att bibehålla kompatibiliteten med största möjliga antal webbsidor utvecklas moderna webbläsare i allmänhet med flera renderingslägen: i "no quirks mode" renderas sidor enligt HTML- och CSS-specifikationerna, medan i "quirks mode" görs försök att efterlikna beteendet hos äldre webbläsare. Vissa webbläsare (de som är baserade på Mozillas Gecko - renderingsmotor, eller Internet Explorer 8 i strikt läge , till exempel) använder också ett "nästan standardläge" som försöker kompromissa mellan de två, och implementerar en egenhet för tabellcellstorlek medan de annars överensstämmer med till specifikationerna.

Lägesskillnader och exempel

En framträdande skillnad mellan quirks och no-quirks lägen är hanteringen av CSS Internet Explorer box modell bugg . Före version 6 använde Internet Explorer en algoritm för att bestämma bredden på ett elements box som stod i konflikt med algoritmen som beskrivs i CSS-specifikationen, och på grund av Internet Explorers popularitet skapades många sidor som förlitade sig på denna icke-standardiserade algoritm. Från och med version 6 använder Internet Explorer CSS-specifikationens algoritm vid rendering i no-quirks-läge och använder den tidigare, icke-standardiserade algoritmen vid rendering i quirks-läge. [ citat behövs ]

En annan anmärkningsvärd skillnad är den vertikala justeringen av vissa typer av inlineinnehåll; många äldre webbläsare justerade bilder till den nedre kanten av deras innehållande ruta, även om CSS-specifikationen kräver att de justeras till baslinjen för texten i rutan. I no-quirks-läge Gecko -baserade webbläsare att anpassa sig till baslinjen, och i quirks-läge kommer de att justera till botten.

Dessutom implementerade många äldre webbläsare inte nedärvning av teckensnittsstilar i tabeller; som ett resultat måste teckensnittsstilar specificeras en gång för dokumentet som helhet och igen för tabellen, även om CSS-specifikationen kräver att teckensnittsstilen ärvs i tabellen. Om teckensnittsstorlekarna anges med relativa enheter, skulle en standardkompatibel webbläsare ärva grundteckensnittsstorleken och sedan tillämpa den relativa teckensnittsstorleken i tabellen: till exempel en sida som deklarerade en bastypsnittsstorlek på 80 % och ett tabellteckensnitt storlek på 80 % (för att säkerställa en storlek på 80 % i webbläsare som inte korrekt ärver teckensnittsstorlekar) skulle, i en standardkompatibel webbläsare, visa tabeller med en teckenstorlek på 64 % (80 % av 80 %). Som ett resultat ärver webbläsare vanligtvis inte teckenstorlekar till tabeller i quirks-läge.

Begränsat quirks-läge

Ett tredje kompatibilitetsläge känt som "limited quirks mode" (tidigare "nästan standardläge" eller "strikt läge"), som upprätthåller den "traditionella" vertikala storleken på tabellceller enligt CSS2-specifikationen, har implementerats i dessa webbläsare : Safari , Opera 7.5 (och senare), alla Gecko -baserade webbläsare sedan 1.0.1 (som Firefox ) och Internet Explorer 8 .

Läget "Nästan standard" matchar läget "standards" i alla detaljer utom en. Layouten av bilder inuti tabellceller hanteras på samma sätt som "quirks"-läget fungerar istället, vilket är ganska konsekvent med äldre webbläsare som Internet Explorer 7 (och tidigare). Detta innebär att layouter för skivade bilder-i-tabeller är mindre benägna att falla isär i webbläsare när de är i antingen "egenheter" eller "nästan standard"-läge, snarare än "standard"-läge.

Utlöser olika renderingslägen

Oftast bestämmer webbläsare vilket renderingsläge som ska användas baserat på närvaron av en dokumenttypsdeklaration på sidan; om en fullständig DOCTYPE finns kommer webbläsaren att använda no-quirks-läge, och om det saknas kommer webbläsaren att använda quirks-läge. Till exempel skulle en webbsida som började med följande DOCTYPE utlösa no-quirks-läge:


 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "  http://www.w3.org/TR/html4/strict.dtd"> 

Följande DOCTYPE är syntaktisk ogiltig och innehåller det offentliga identifierarnyckelordet "PUBLIC" men ingen offentlig identifierare (som anger namnet på den version av HTML som används) och ingen systemidentifierare URL för en HTML Document Type Definition . Detta skulle utlösa quirks-läge:

<!DOCTYPE html PUBLIC>

Dessutom kommer en webbsida som inte alls innehåller en DOCTYPE att renderas i quirks-läge.

Ett anmärkningsvärt undantag från detta är Microsofts webbläsare Internet Explorer 6 , som renderar en sida i quirks-läge om DOCTYPE föregås av en XML- prolog , oavsett om en fullständig DOCTYPE anges. Således skulle en XHTML- sida som börjar med följande kod renderas i quirks-läge av IE 6:



 <?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "  http://www.w3.org/TR/ xhtml1/DTD/xhtml1-strict.dtd"> 

Ovanstående är användbart till en viss grad eftersom det endast kan användas för att utlösa quirks-läge i IE 6.

Quirks-läge i alla versioner av IE kommer också att triggas om något föregår DOCTYPE. Till exempel, om ett hypertextdokument innehåller en kommentar, blanksteg eller någon tagg före DOCTYPE-deklarationen, kommer IE att använda quirks-läge:



 <!-- Denna kommentar kommer att sätta IE 6, 7, 8 och 9 i quirks-läge -->  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "  http://www.w3 .org/TR/html4/strict.dtd"> 

Problemet med XML-deklarationen åtgärdades i version 7 av Internet Explorer, där XML-prologen helt enkelt ignoreras. Men för maximal kompatibilitet med befintliga och äldre webbläsare World Wide Web Consortium , som upprätthåller XHTML-specifikationen, att författare till XHTML-dokument kan överväga att utelämna XML-deklarationen.

Jämförelse av dokumenttyper

Henri Sivonen sammanställde en lista över olika dokumenttyper och hur de behandlas i de vanligaste webbläsarna, som visar om sidor renderas i Q uirks, Standards eller A lmost standards-läge. Kriteriet som används för "Nästan standardläge" är icke-standardiserad tabellcellhöjdsrendering. Den här tabellen gäller för innehåll som visas med texten/html av innehållstyp . Innehåll som serveras med programmet Content-Type/xhtml+xml renderas i standardläge i Chrome, Firefox, Internet Explorer 9, Safari och Opera. Internet Explorer 6, 7 och 8 stöder inte Content-Type application/xhtml+xml.

Doctype NS6 Mozilla 0.9.5-1.0







IE 8+ Firefox Chrome Safari Opera 7.5+ Netscape 7+ Mozilla 1.0.1+ Konq 3.5+ HTML5 spec

IE 7 Opera 7.10

IE 6 Opera 7.0
Mac IE 5 Konq 3.2
Ingen F F F F F F F
HTML 2
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
F F F F F F F
HTML 3
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN//">
F F F F F F F
HTML 3.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
F F F F F F F
HTML 4.01
Sträng med systemidentifierare
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
S S S A A A A
utan systemidentifierare
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
S S S A A F A
Övergångsvis med systemidentifierare
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
S S A A A A F
utan systemidentifierare
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
F F F F F F F
HTML5
<!DOCTYPE html>
F S S A A A ?
XHTML Basic
med systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
S S S A A A A
XHTML 1.0
Sträng med systemidentifierare och XML-deklaration

 <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-strict.dtd"> 
S S S A F A F
med systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
S S S A A A A
utan systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
S S S A A A ?
Övergångsvis med systemidentifierare och med XML-deklaration

 <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"> 
S S A A F A F
med systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
S S A A A A F
utan systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
S S A A A A ?
XHTML 1.1
med systemidentifierare och en XML-deklaration

 <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11 /DTD/xhtml11.dtd"> 
S S S A F A F
med systemidentifierare och utan XML-deklaration
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
S S S A A A A
Doctype NS6 Mozilla 0.9.5-1.0







IE 8+ Firefox Chrome Safari Opera 7.5+ Netscape 7+ Mozilla 1.0.1+ Konq 3.5+ HTML5 spec

IE 7 Opera 7.10

IE 6 Opera 7.0
Mac IE 5 Konq 3.2

Lägesverifiering

I de flesta webbläsare indikerar tillägget Document Object Model document.compatMode renderingsläget för den aktuella sidan. I standardläge och nästan standardläge document.compatMode värdet "CSS1Compat", medan det i quirks-läge är lika med "BackCompat".

Dessutom, i Mozilla Firefox och Opera indikeras renderingsläget som används för en viss sida i informationsrutan "Sidinformation".

externa länkar