Qualche tempo fa avevo elogiato IE7 per la buona compatibilità con gli standard ed eccoci oggi di fronte ad un bug veramente grave se pensiamo a come questo viene fuori.
La dichiarazione overflow:hidden di un elemento parent viene ignorata se in un elemento child (interno a quello parent) viene dichiarato il position:relative.
Ma la cosa davvero bella è che il bug si manifesta solo se nel documento è specificato un corretto DOCTYPE.
Vediamo il tutto tramite un esempio minimizzato.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="IT-it">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>IE7 Bug - Overflow:hidden e position:relative</title>
<style type="text/css">
.parent{
width:300px;
height:60px;
border: 1px solid #ccc;
overflow:hidden;
}
.child{
position:relative;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
Questo è un po' di testo.<br />
Questo è un po' di testo.<br />
Questo è un po' di testo.<br />
Questo è un po' di testo.<br />
Questo è un po' di testo.<br />
Questo è un po' di testo.<br />
</div>
</div>
</body>
</html>
Notate che dentro il div con classe parent è annidato il div con classe child. Nonostante il parent sia settato per nascondere tutto il contenuto che eccede i 60px di altezza ed i 300px di larghezza, Internet Explorer 7 ignorerà la direttiva a causa del position:relative; della classe .child.
Eliminando le prime due righe del documento a beneficio di un laconico e poco corretto <html> tutto funzionerà a dovere. Ma ci ritroveremo immediatamente con una pagina impossibile da validare ed il cui comportamento sarà poco chiaro da browser a browser. Questo perchè, nonostante qualcuno pensi che la dichiarazione di DOCTYPE sia una sfigataggine dei nerd, questa è realmente utilizzata dai browser per determinare l'output da visualizzare all'utente.
Soluzione
Per far si che overflow sia rispettato anche su Internet Explorer si abbia l'accortezza di definire nello stile dell'elemento parent lo stesso tipo di position dell'elemento child. Nel nostro caso:
.parent{
width:300px;
height:60px;
border: 1px solid #ccc;
overflow:hidden;
position:relative;
}
A voi un esempio con spiegazione estesa.
.Commenti 
Porca miseria, ma per quanto tempo ancora dovremo combattere con le fantasiose differenze tra browser?
Per fortuna che IE8 avrà la modalità ultracompatibile. Per abilitare la pagina html ad essere letta in tale modalità basterà inserire all'inizio un tag non-standard solo per IE8.... che tristezza....
P.S.: anche se hai abbandonato dblog, usi ancora FCKeditor? Avrei una domandina...
Di
Filippo (Inviato il 09/04/2008 @ 18:28:22)
@ Massimiliano: differenze ce ne saranno sempre, ma questo di IE7 è un errore madornale. Vuol dire che il tester ha lavorato su html non valido...
@ Filippo: LOL! Poco ci manca :D
Spara per FCKEditor. Lo uso pure qui :)
Di
davidonzo (Inviato il 09/04/2008 @ 18:40:45)
No no, ero serio! Il team che lavora su IE8 ha già annunciato questa nuova meravigliosa caratteristica! :D
Per FCKeditor, ho scaricato l'ultima versione dal sito e l'ho sostituita completamente a quella integrata in dblog per problemi vari con la versione precedente.
Il problema ora è che, nella finestra dell'editor, il campo a disposizione per scrivere è ridotto a tre righe... se scrivo più di tre righe divento scemo a forza di scrollare.
Questo problema c'è con qualsiasi browser per Mac e per Windows, ho provato.
E' un problema dell'editor o della pagina di dblog nel quale si apre l'editor secondo te?
Che posso fare?
Qui c'è un'immagine che vale più di mille parole:
http://www.nighted.com/public/dblog-nighted/image/nighted/fckeditor_problem.jpg
Di
Filippo (Inviato il 10/04/2008 @ 12:20:31)
@ Filippo: noooooooooooooo........
Per FCKeditor, stai usando l'editor in asp giusto?
Apri il file /fckeditor/fckeditor.asp e cerca le righe:
sWidth = "100%"
sHeight = "200"
Aggiusta i parametri per come preferisci (ovvero, aumenta sHeight).
Di
davidonzo (Inviato il 10/04/2008 @ 12:37:33)
No, sto usando il file "/fckeditor/editor.asp" che è fornito da dblog. ho provato ad usare l'editor in asp "fckeditor.asp", ma mi apre una pagina bianca...
Sono arenato.
Purtroppo smanetto in html, asp e altro, ma non abbastanza da capire dov'è il problema...
Di
Filippo (Inviato il 10/04/2008 @ 12:44:41)
@ Filippo: capito, allora apri il file fckeditor.js, cerca la stringa
this.Height = height || '200' ;
e cambiala in
this.Height = height || '370' ;
370 è il valore predefinito di dblog. In ogni caso fai a tuo piacimento.
Di
davidonzo (Inviato il 10/04/2008 @ 13:17:26)
Grazie mille!! Ha funzionato benissimo con Camino su Mac OS (motore Gecko). Devo provare con Firefox (stesso motore) e IE7 su Windows.
Purtroppo non funziona con Safari per Mac, è ancora come prima. Comunque no-problem!
Grazie!
Di
Filippo (Inviato il 10/04/2008 @ 16:42:35)
Pulisci la cache dei browser in cui sembra non funzionare.
Di
davidonzo (Inviato il 11/04/2008 @ 17:40:14)
F-E-N-O-M-E-N-A-L-E!!!!
Grazie mille!! Non avevo pensato alla cache. L'ho cancellata ed ora funziona alla grande anche con Safari oltre che con tutti gli altri browser!
Ora posso finalmente postare con Safari... :-)
Grazie!!
Di
Filippo (Inviato il 13/04/2008 @ 15:28:14)