sabato 9 agosto 2008

RenderingMode: un aspetto importante

Forse non tutti sapranno che i browser possono "lavorare" in due modalità: StrictRenderingMode e QuirksRenderingMode.
Questi due metodi interpretano in modo differente le istruzioni CSS.
Nella modalità QuirksRenderingMode, i browsers si comportano come i loro predecessori, o i predecessori dei loro predecessori. Nella modalità StrictRenderingMode, il browser, a seconda della sua versione e di quanto previsto dai suoi programmatori, interpreta le regole css secondo gli standard previsti dal w3c, a volte provocando risultati inaspettati.

Perchè esistono queste due possibilità?
Quando Netscape 4 ed IE 4 hanno iniziato ad implementare il supporto CSS, non rispettavano gli standard del w3c. Già con IE 5 ci furono dei grossi miglioramenti, ma restavano comunque numerosi bugs da correggere.
Per essere sicuri che i lori siti venissero visualizzati correttamente nei vari browser, gli sviluppatori web dovettero creare i loro fogli di stile sulla base della resa su questi browser. Così facendo, però, il loro CSS non rispettava le specifiche del w3c.
Ad un certo punto, però, l'aderenza agli standard divenne importante anche per i creatori dei browser, che cercarono di avvicinarsi alle specifiche del w3c, senza però aderirvi completamente, dato che, se l'avessero fatto, l'effetto su molti siti sarebbe stato disastroso.

La soluzione a questo problema fu permettere ai programmatori web di scegliere se far funzionare il browser in modalità compatibile con le specifiche del w3c (strict mode), o se farlo funzionare come i vecchi browser (quirks mode), e in base a questa scelta, costruire le proprie regole css.

Explorer Mac fu il primo browser a implementare le due modalità, e presto seguirono IE 6, Mozilla/Firefox, Safari, e Opera. IE 5, così come browser più vecchi (ad es. Netscape 4), lavorano solo in quirks mode.

La scelta del metodo da utilizzare richiede un piccolo hack, il 'doctype switching'.
Secondo gli standard, ogni documento HTML/XHTML deve dichiarare un doctype che indichi al browser come interpretare il codice.
Le pagine senza doctype vengono interpretate in quirks mode.
La dichiarazione di un doctype nuovo o sconosciuto fa interpretare la pagina in strict mode.
La semplice presenza del doctype è sufficiente per passare allo strict mode, non è necessario che il documento sia validabile per quel doctype.

Forzare il browser a lavorare in Quirks Mode

Può capitare che, in certi casi, si voglia far lavorare il browser in Quirks Mode. Questo si verifica quasi esclusivamente per la famiglia di Internet Explorer, dato che il rendering dei nostri documenti HTML nelle varie versioni del browser può essere anche molto differente.

Ci sono due semplici modi per forzare ad esempio IE 6 ad interpretare i nostri css come se fosse IE 5:
  1. Inserire un commento prima della dichiarazione del doctype. Il contenuto non è importante, è sufficiente che si tratti di un commento, delimitato dagli appositi tag. Questo hack funziona per tutte le versioni di IE.
    Esempio:
    <!-- commento -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. Inserire una dichiarazione xml prima del doctype. Questo hack funziona per tutte le versioni precedenti a IE 7.
    Esempio:
    <?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">

Quale Rendering Mode sta utilizzando il browser?
Per verificare quale rendering mode è attualmente utilizzato dal browser, è sufficiente scrivere il codice "javascript:alert(document.compatMode);" nella barra degli indirizzi del browser.
Otterremo una alertbox contenente la parola "BackCompat" o "QuirksMode" se il browser è in QuirksRenderingMode, oppure la parola "CSS1Compat", se il browser è in StrictRenderingMode.



Articoli consigliati: http://css-discuss.incutio.com/?page=RenderingMode
http://www.quirksmode.org/css/quirksmode.html

Nessun commento:

Posta un commento