MSIE i Quirks mode. Vad betyder det?
Det har nämnts i en massa trådar. Speciellt i samband med CSS. Vad är det för något.
Utbilda oss :i
HTML & CSSur HTML, XHTML & CSS
15 svar · 1 190 visningar · startad av mattiasnordin
MSIE i Quirks mode. Vad betyder det?
Det har nämnts i en massa trådar. Speciellt i samband med CSS. Vad är det för något.
Utbilda oss :i
Att webbläsaren läser in sidan (koderna) "felaktigt" det vill säga sidan har ingen doctype (oftast)
red/ IE har en tendens att "korrigera" felaktiga koder så de trots allt ser bra ut i sina gena webbläsare medan Firefox Opera osv läser koderna mer exakt. Det innebär att om dessa är felaktiga på något vis så syns det i dessa webbläsare, vilket som sagt IE släpper igenom mer...
Quirks mode handlar inte om hur webbläsaren lagar trasig kod, utan endast hur den tolkar CSS.
Man kan få webbläsare att använda Quirks mode i fullt korrekta dokument. Med IE är det speciellt lätt, det är bara att lägga en kommentar framför DOCTYPEN. :)
Hur som helst, Quirks mode behövdes för att webbläsare skulle kunna gå närmare standarden samtidigt som gamla dokument fortsatte att fungera. Fenomenet kallas för "DOCTYPE Switching". Mer att läsa:
Quirks mode handlar inte om hur webbläsaren lagar trasig kod, utan endast hur den tolkar CSS.
Ursäkta mig - då måste jag ha missat något.
Standard mode handlar väl om att sidan håller sig med dels ett befintligt rätt doctype samt, i sammanhanget, rena koder medan quirks mode är det motsatta? Då borde det väl inte bara handla om css - eller?
Jag menade inte att de lagar trasig kod utan att en icke helt rätt kodad sida hamnar i qiurks mode och inte standard mode, men att IE släpper igenom fler kodningsfel vilket inte andra webbläsare har för vana att göra. Jag kanske skrev lite luddigt här.
Man ska ange en doctype som stämmer överens med hur man kodat sidan. Ibland kan quirks vara bra... Om man vill att äldre webläsare ska visa sidan på samma sätt som nyare. Men då får man också koda sin sida utan de nyare finesserna.
Kodar du din sida med CSS2 är det inte någon bra idé med quirks-mode. Det som ser OK ut i en webläsare blir rena rotmoset i en annan...
Antagligen kodar du din sida i HTML 4.01 eller XHTML 1.0?
Det här är t.ex korrekt för HTML 4.01:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
eller
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
eller
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
Om du skulle använda den här:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- blir det QUIRKS-MODE
Doctypen skrivs överst i documentet innan <html> men det visste du såklart!
Följande dokument är helt korrekt kodad, fast webbläsare tolkar det i Quirks mode:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>Test</title>
<p>Quirks mode!
Medan följande dokument, också fullt korrekt, tolkas i Standards mode:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>Test</title>
<p>Standards mode!
Och följande dokument, som inte är korrekt, tolkas också i Standards mode:
<!DOCTYPE HTML>
<p>Standards mode!
<title>Test</title>
Det kan finnas andra skillnader mellan Quirks- och Standards mode än CSS, men om du skriver in
javascript:alert(document.compatMode);
i adressfältet så får du en idé om vad det främst handlar om. :)
Du zcorpan kan du förklara det här:
Och följande dokument, som inte är korrekt, tolkas också i Standards mode:
<!DOCTYPE HTML> <p>Standards mode! <title>Test</title>
och det här:
java script:alert(document.compatMode);
Det är ett dokument med en okänd DOCTYPE, varför webbläsare använder Standards mode. Att dokumentet inte validerar spelar ingen roll.
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/compatmode.asp
http://www.mozilla.org/docs/dom/domref/dom_doc_ref11.html
Okej... Tack! Trodde att det var tvärtom! Att okänd doctype gav quirks mode. Man lär sig nåt nytt varje dag! :)
OK - Ett annat perspektiv än det rent tekniska då ;)
MSIE4 var ganska tidigt ute med CSS, men som det visade sig senare, så gjorde den också "fel" på vissa centrala saker i CSS - framförallt kanske hanteringen av den s.k. "box model" som bestämmer vad som skall och inte skall ingå när man beräknar bredd på ett block (t.ex. en div) - Se t.ex. http://tantek.com/CSS/Examples/boxmodelhack.html för en förklaring.
Detta var länge inget större problem, för folk hade redan börjat kasta ut NN4 pga att den var - ehm - mindre bra på en hel del som den borde kunna när detta hände, och man kunde med ganska gott samvete koda sidor bara baserat på MSIE (för CSS funkade ju inte alls "lika bra" i den snabbt minskande konkurrensen). (Det var förresten ungefär här man började köra med "@import(fil.css)" för att undvika att NN4 försökte sig på CSS-tolkning med oberäkneliga krascher som följd om man hade otur)
Sedan kom MSIE5/Mac...
Teamet som gjorde MSIE5/Mac såg till att MSIE5/MAC började följa "standard" bättre än sin förlaga på Windowsplattformen, men de gick iland med det bl.a. genom att införa s.k. "doctype switching" för att både kunna "bete sig som alla andra gör även om det är fel" och "bete sig som w3c:s specifikationer säger" beroende på hur webbsidorna var skrivna. När detta gjordes, hade W3C ganska nyligen (om jag kommer ihåg rätt) uppdaterat sina specifikationer så att de <!DOCTYPE-taggar som rekommenderades där, också var korrekta (vilket inte alltid var fallet när MSIE togs fram från början). Detta i kombination med att de flesta ändå inte använde <!DOCTYPE alls vide den här tiden gjorde att MSIE5/Mac funkade med bägge typerna av kod...
Dels den "gamla-som-medvetet-gör-samma-fel-som-MSIE4" och dels den "nya-som-funkar-enligt-standard".
"quirky mode" och "standards mode" var födda - och vi vet ju idag att MSIE5/Mac visserligen var ett *stort* steg i rätt riktning, men att det kanske ändå inte blev riktigt så perfekt som de tänkte sig ;).
Numera har i princip alla webbläsare med någon form av självbevarelsedrift <!DOCTYPE-switching inbyggt, och det florerar webbläsare som har fler moder än 2 (Gecko-baserade läsare har t.ex. flera moder idag, även om skillnaderna mellan några av dem knappt är märbara om man inte råkar använda vissa speciella mekanismer i CSS).
Sammanfattningsvis -
Webbläsarna har olika renderingsmoder för att gammalmodigt skrivna webbsidor fortfarande skall fungera.
Mekanismen som ställer in vilken mod som webbläsaren väljer, kan man bl.a. styra genom att välja hur man skriver sin <!DOCTYPE-tagg
Ibland behöver man "gå tillbaka" till den "felaktiga" moden ("quirks mode" - dvs ungefär "den egensinniga/underliga/mysko moden") för att kunna använda t.ex. "gammal beprövad layout-teknik" eftersom det finns mycket kodexempel därute som "lutar sig" på den felaktiga hanteringen av saker som introducerades när CSS var mycket ungt (och MSIE det "enda" alternativet trots att det kanske inte alltid var det alternativ som gjorde "rätt" enligt standard utan mer var en "de facto"-standard...)
Skrivet med reservation för att någon detalj kan ha försvunnit i tidens slöjor :e
PS.
Jo - förresten, <!DOCTYPE switching har alltså inget med om man väljer HTML eller XHTML att göra. Inte heller har det något med valet av Transitional, Strict eller Frameset att göra... Bara hur (och i MSIE var) man skriver sin <!DOCTYPE ...
Se i övrigt de länkar som zcorpan hänvisar till - där finns alla tekniska detaljer man behöver om detta ;) - och kanske också min egen gamla utläggning i inlägget http://www.webforum.nu/showthread.php?s=&postid=650163#post650163
Eftersom jag är översättare till vardags kan jag tillägga som kuriosa:
QUIRKS betyder: nyckfull, egensinnig... :)
"moder"? :)
zcorpan >> Svengelskatalare är vi väl alla som hellre använder termen "Quirks mode" än den svenska tolkningen "Bakåtkompatibelt tolkningsläge" (som bl.a. börjat florera i Mozillaprojektet) - Om du nu nödvändigtvis måste börja predika om hur svenska språket skall användas också så får du nog först se till att bli lite noggrannare med hur du använder det själv :P
Jag vill inte påstå att jag är duktig på svenska, och jag försökte inte hoppa på dig på något sätt, men jag tyckte bara att "renderingsmoder" lät lite lustigt. ;) Jag kopplar nämligen "moder" med "mamma", vilket i det här fallet blir lite knepigt... :moose
OK - Vi får väl försöka sluta missförstå varandra och instifta termen "renderingskläder" (tänk "mode-r" :P ) istället då - eller vad tycker du :moose
(sorry, jag vet att den här är Cafémässig - måste ha fått en 2K+-infarkt !!!!) :birp