[ Home ] - [ Articoli ] - [ Traduzioni ] - [ Altro ] - [ Appunti sui CSS ] - [ L'autore ]
Sei qui: Home > Traduzioni > Quirks mode e strict mode
Articolo originale: http://www.quirksmode.org/css/quirksmode.html
Autore: Peter Paul Koch
Traduzione: Gabriele Romanato (24 agosto 2007)
Quirks mode e strict mode sono due "modalità" che i browser moderni possono usare per interpretare il vostro CSS. Questa pagina da una breve introduzione delle motivazioni e delle differenze alla base delle due modalità.
Quando Netscape 4 ed Explorer 4 implementarono i fogli di stile, il loro supporto non corrispondeva allo standard W3C (o, piuttosto, era reciprocamente discorde). Netscape 4 aveva un supporto orribile. Explorer 4 si avvicinava di più allo standard, ma non lo implementava con piena correttezza. Sebbene Explorer 5 Windows abbia rimediato a molti dei bug di Explorer 4, esso ha continuato a mostrare altri problemi (soprattutto nel box model).
Per essere sicuri che i loro siti venissero resi correttamente nei vari browser, gli sviluppatori web dovettero implementare i CSS secondo le esigenze di questi browser. Così molti di questi siti non corrispondevano alle specifiche.
Perciò, quando la conformità agli standard divenne importante, i produttori dei browser si trovarono di fronte ad una scelta difficile. Accostarsi alle specifiche ufficiali era la strada da percorrere, ma se avessero semplicemente modificato la loro implementazione per conformarsi agli standard, molti siti web sarebbero risultati inpresentabili in misura più o meno evidente. I CSS esistenti avrebbero mostrato curiosi effetti collaterali se fossero stati mostrati nel modo corretto ex abrupto.
Accostarsi alla conformità avrebbe quindi causato problemi, ma non farlo avrebbe continuato a causare quella confusione tipica dell'era della guerra dei browser.
Quindi una soluzione al problema doveva:
In altre parole, tutti i browser necessitavano di due modalità: quirks per le vecchie regole e strict per gli standard. Explorer Mac fu il primo ad implementare le due modalità, e Explorer 6 Windows, Mozilla, Safari e Opera lo seguirono. Explorer 5 Windows, così come i vecchi browser, è sempre fermo in quirks mode.
Scegliere una modalità necessitava di un qualcosa che lo innescasse, e questo lo si trovò nel "doctype switching". Secondo gli standard, un documento (X)HTML dovrebbe avere un doctype che dichiari che tipo di (X)HTML viene usato nel documento.
Si noti che le vostre pagine non devono essere validate secondo il doctype scelto. La semplice presenza del tag di doctype è sufficiente ad innescare lo strict mode.
Sul mio sito uso il seguente doctype nella maggior parte delle pagine. Oltre a dichiarare le mie pagine XHTML 1.0 Transitional, esso innesca lo strict mode in tutti i browser.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Personalmente non sono felicissimo del doctype switching. Un doctype veicola informazioni sul tipo di (X)HTML che usate, o meglio, sulla struttura del documento. A mio avviso esso non dovrebbe veicolare nessuna informazione sulla presentazione del documento, perché così facendo si viola la separazione tra struttura e presentazione che è alla base dei fogli di stile.
Ma i produttori dei browser non vennero smentiti: browser dopo browser hanno implementato il doctype switching, e oggi tutti i browser moderni lo supportano.
All'inizio gli esperimenti con lo strict mode evidenziavano sempre il fatto che le immagini avevano un margine
inferiore che non poteva essere rimosso. Il motivo stava nel fatto che in strict mode
<img /> è un elemento inline, il che significa che si dovrebbe riservare
dello spazio per possibili caratteri discendenti come g, j, o q. Naturalmente un immagine non ha caratteri
discendenti, e quindi lo spazio non fu mai usato, ma nondimeno veniva preservato.
La soluzione consisteva nel dichiarare le immagini come elementi di blocco:
img {display: block}.
Nondimeno i produttori di browser, in primis Mozilla, pensarono che questa fosse una situazione confusa ed introdussero l' "almost strict mode". Quest'ultimo veniva definito come strict mode, ma le immagini continuavano ad essere blocchi e non elementi inline.
I doctype più comuni, tra cui quello che uso, innescano l'almost strict mode. Il trattamento delle immagini è certamente la differenza maggiore tra almost strict mode e strict mode autentico.
In Explorer 6 Windows, Microsoft ha implementato un altra regola: se un doctype che innesca lo strict mode viene preceduto da un prologo xml, la pagina viene mostrata in quirks mode. Questo venne fatto per permettere agli sviluppatori di avere delle pagine valide (che richiedono il doctype) rimanendo al contempo in quirks mode.
Questo è il prologo xml. Dovete porlo sulla prima riga del vostro documento, prima del doctype.
<?xml version="1.0" encoding="iso-8859-1"?>
Si noti che questo comportamento è stato rimosso da Explorer 7.
Quali sono esattamente le differenze tra le due modalità? In primis, tutte le nuove implementazioni in Explorer 7 funzionano solo in Strict Mode.
Ci sono altre differenze che possono confondere lo sviluppatore. La seguente tabella riassume le più importanti.
| Sempre | Supporta sempre gli standard |
| Mai | Non supporta mai gli standard |
| Dipende | Il supporto dipende dalla modalità di rendering (si veda il testo per i dettagli) |
Si veda anche la chiave di lettura delle mie tabelle di compatibilità.
| Problema | Explorer 6 Win | Explorer 7 beta 3 | Explorer 5.2 Mac | Firefox 1.5 | Safari 1.3 | Opera 9 | iCab 3.0 |
|---|---|---|---|---|---|---|---|
|
Box model
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Dipende | Sempre | Sempre | Sempre | Sempre |
|
Standard: Vi sono
due box model, il tradizionale e quello
W3C. Ovviamente il secondo, dove la
In Explorer la modalità di rendering stabilisce il box model da seguire. In quirks mode si usa il box model tradizionale, in strict mode quello standard. Il doctype switching è l'unico modo di selezionare
un box model in Explorer 6 Windows. Mozilla,
Opera ed Explorer Mac permettono l'uso della dichiarazione3 Eccezione: i bottoni mantengono sempre il box model tradizionale in Explorer Windows e Mozilla. Pagina di test. |
|||||||
|
white-space: pre
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Sempre | Sempre | Sempre | Sempre | Sempre |
|
Standard:
In Explorer Windows questa dichiarazione funziona solo in strict mode. |
|||||||
|
margin e width: auto
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Sempre | Sempre | Sempre | Sempre | Sempre |
|
Standard: Dando ad un elemento qualsiasi In Explorer Windows questo funziona solo in strict mode. |
|||||||
|
I valori senza unità di misura diventano pixel
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Dipende | Dipende | Dipende | Dipende | Mai |
|
Standard: I CSS richiedono che i valori debbano avere un'unità. In caso contrario il valore viene ignorato. Tuttavia in quirks mode la maggior parte dei browser aggiunge l'unità |
|||||||
| Problema | Explorer 6 Win | Explorer 7 beta 3 | Explorer 5.2 Mac | Firefox 1.5 | Safari 1.3 | Opera 9 | iCab 3.0 |
|
.test:hover
Pagina di test QuirksPagina di test Strict |
Non testabile | Dipende | Non testabile | Dipende | Sempre | Sempre | Sempre |
|
Standard: Il selettore Non funziona in alcuni browser in quirks mode. |
|||||||
|
Visualizzazione di
Pagina di test QuirksimgPagina di test Strict |
Mai | Mai | Mai | Dipende | Dipende | Dipende | Dipende |
|
Standard: Un'immagine ha In quirks mode Si noti che la pagina di test è in "vero strict mode" invece che "almost strict mode". Lo uso sul resto del mio sito. Si veda sopra per avere ulteriori informazioni su almost strict mode. |
|||||||
|
overflow: visible
Pagina di test QuirksPagina di test Strict |
Mai | Dipende | Sempre | Sempre | Sempre | Dipende | Sempre |
|
Standard: Quando si da ad un elemento una Explorer 6 allarga sempre l'elemento per farci entrare il contenuto, in qualsiasi modalità di rendering. In Opera ed Explorer 7 questo accade solo in quirks mode. |
|||||||
|
larghezza su elementi inline
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Dipende | Sempre | Sempre | Sempre | Sempre |
|
Standard: Un elemento inline come In quirks mode, tuttavia, Explorer cerca di rispettare la |
|||||||
|
dimensioni dei font delle celle di tabella
Pagina di test QuirksPagina di test Strict |
Dipende | Dipende | Dipende | Dipende | Dipende | Dipende | Sempre |
|
Standard: Tuttavia in quirks mode vuol dire che tali elementi avranno una dimensione dei font rispetto alla dimensione di default del browser (di solito 16px). Questo è un comportamento davvero strano, in quanto si basa su di un bug di Netscape 4 (!) e per qualche ragione i produttori di browser pensarono che fosse necessario perpetuarlo. |
|||||||
| Problema | Explorer 6 Win | Explorer 7 beta 3 | Explorer 5.2 Mac | Firefox 1.5 | Safari 1.3 | Opera 9 | iCab 3.0 |
Ulteriori informazioni si trovano sulla pagina di Jukka K. Korpela precedentemente menzionata.