2010-01-25 12 views
5

Ho notato che alcuni browser hanno problemi con i margini, specialmente quando un elemento è flottato. Ad esempio, questo sito Web che sto facendo sembra perfetto in Firefox, ma IE7 rovina completamente i margini a quanto pare. L'ho testato anche su diversi browser Linux e alcuni degli errori simili.CSS - I margini sono una brutta cosa?

Il sito è http://w3box.com/mat

Questo sembra bene in FF3.0 per quanto posso dire. Non l'ho ancora visto in FF2, o IE6. Perché succede? È perché ho DIV flottato con margini specificati?

Ci sono alcune cose che dovrei evitare o che avrei dovuto fare diversamente?

Modifica: Quindi sembra che i miei tag siano stati la fonte del fallimento. Avevo inserito le immagini in quello che non era definito nel CSS e che aveva galleggiamento su di esse, combinato con i margini. Questi hanno rovinato tutto e devo rifare questi.

Inoltre, alcune cose sono accadute quando ho usato XHTML Strict invece :) Grazie a tutti! Cercherò di risolvere il problema da solo :)

+0

Sembra in IE8, se sei interessato. – Sapph

+1

Prova ad abituarti a sviluppare siti con 'XHTML 1.0 strict' o' HTML 4.01 strict'. Questo risolve un sacco di problemi di boxmodel, –

+0

Grazie! Ora il sito sembra altrettanto sbagliato in FF come I IE :) Significa che ho bisogno di riposizionare tutto ma va bene! Basta che sia uguale in entrambi. :) Grazie per il suggerimento :) –

risposta

3

Marging non è male, ma IE has some troubles con i margini degli elementi float. Mentre ci sono molte ricette per il fixing, credo che nel tuo caso potresti usare il posizionamento assoluto invece di float + margini (non hai veramente bisogno del comportamento "float" quando l'immagine è avvolta dal testo)

+0

Questo è IE7 e l'errore non si verifica in IE8. L'ho appena testato. Non l'ho ancora testato in IE6 perché non riesco a trovare un singolo terminal server dove è ancora installato. Proverò il posizionamento assoluto però. Non c'è bisogno di ingombrare il codice più del necessario! :) –

+0

Vedi, il fatto è. Non capisco davvero perché questo sta accadendo. Voglio dire, il DIV #contentInner non ha nemmeno un float. E questo i suoi margini sono come raddoppiati o qualcosa del genere. Potrebbe essere le immagini che ho messo lì? Non hanno le loro classi, ma ho specificato il codice CSS nel tag . Questa potrebbe essere la spiegazione? Perché vedo l'errore nel menu dell'intestazione e il #contentInner DIV. E entrambi hanno i tag prima di loro .. –

+0

È il tag che è il problema. IE sembra aggiungere dello spazio dopo le immagini. Molto simile a un'interruzione di linea o qualcosa del genere. Il problema è risolto se rimuovo i tag . Quindi probabilmente dovrò cercare di posizionarli invece. –

2

Suggerirei di utilizzare una qualche forma di CSS Framework (Blueprint CSS, 960 Grid, ecc.) In quanto hanno un numero di margini, padding e altri resettaggi di elementi HTML comuni . Dovresti scoprire che lo sviluppo di browser incrociati è più semplice utilizzando un framework.

2

Diversi browser hanno diversi modi per gestire il modello di box. Il più delle volte i siti che vengono visualizzati bene in FF, Chrome o IE8 possono avere problemi in IE6 e 7. Per risolvere questo problema puoi provare a impostare tutti i margini e il riempimento predefiniti su 0 (e regolarli secondo necessità su specifici elementi):

* {margine: 0px; imbottitura: 0px; } // regola più semplice ...

Per vedere più sui CSS ripristinare si può guardare: http://meyerweb.com/eric/tools/css/reset/

e quindi applicare stili diversi per IE7 e 6 con i commenti condizionali.

+0

Ho appena provato questo e in realtà non ha fatto nulla. Lo avrei inserito comunque nell'html e nel body nel CSS. Inserisco il codice di ripristino CSS però :) –

4

Non sono d'accordo con usare una libreria se si vuole conoscere la parte CSS della curva sfortunatamente sta imparando come i diversi browser reagiscono ai CSS. Non vorrei nemmeno suggerire di utilizzare un foglio di stile di ripristino. Se lo farai, impari come funziona il CSS. Se usi una libreria o un set di fogli di stile che non capisci come lo risolveresti quando si rompe.

1

Come accennato in altre risposte, si tratta dell'interpretazione di IE della casella model.

Ogniqualvolta qualcosa è flottato, IE tende a raddoppiare i margini specificati. Questo può essere risolto con un foglio di stile aggiuntivo per IE usando conditional comments.

Consulta anche: http://www.positioniseverything.net/explorer/doubled-margin.html

+0

Ma non è stato risolto con IE7? È quello che pensavo. Ma non sembra comunque. –

+0

IE7 è ancora un po 'bizzarro con il modello di box: hanno risolto la maggior parte dei bug ma alcuni esistono ancora –

3

Non c'è niente di sbagliato con l'utilizzo di margini.

Le versioni precedenti di IE hanno un bug e questo da solo non è un motivo sufficiente per evitare l'uso di una delle funzionalità di base del layout del CSS. In particolare, questo bug si verifica in IE quando si fa galleggiare un oggetto e dare un margine nella stessa direzione, per es .:

.whatever { 
    float: right; 
    margin-right: 5px; 
} 

Si può trattare con questo una serie di modi, in base al layout. Un modo sarebbe aggiungere un altro div attorno alla tua scatola e usare il riempimento su quello per replicare lo stesso spazio di un margine.

+0

I margini e gli padding non producono lo stesso effetto. Questo è il punto centrale del modello di scatola. Produrrebbe solo lo stesso effetto senza sfondo e senza bordi. –

+0

Sì, hai ragione che non producono lo stesso effetto, ma se stai correggendo un bug potresti essere in grado di cambiarlo per fornire lo stesso spazio tra gli oggetti. Dipende sicuramente dalla situazione, ma può essere una opzione. –

+0

Concordato +1 reintegrato - beh se modifichi la risposta posso rimuoverlo. :-) –

Problemi correlati