2009-07-05 12 views
6

Sto provando a creare un sito dinamico in cui ho tre scatole mobili l'una accanto all'altra. Sono 33,33% in larghezza ciascuno. Il contenitore div intorno a loro è del 75% in larghezza.Come posso aggirare il problema dell'arrotondamento percentuale di IE CSS?

ho trovato un articolo sul problema qui: CSS: Jumping columns
Ho anche trovato un esempio dello stesso problema qui: Jumping columns example

Trascinare la dimensione della finestra per vedere il salto in IE7 o versioni precedenti.

Qualcuno sa se è possibile aggirare questo? (senza Javascript)

risposta

2

In una situazione come questa, tenderei ad aggirare il problema utilizzando un foglio di stile solo IE che confonde i valori finché non funzionano. In questo caso, basta impostare le larghezze al 33%, non sarà perfetto ma allora è solo la natura del web.

+0

Grazie Rory. So che potrebbe essere risolto in questo modo e potrei essere costretto a farlo nel caso in cui nessun altro abbia un'idea migliore. È una specie di brutto modo per risolverlo. –

+0

Purtroppo è anche una necessità in molti casi. Il modo meno brutto/schifoso di farlo sarebbe un commento condizionale. –

+0

"È una specie di brutto modo di risolverlo" sì e no, okay si potrebbe chiamarlo un trucco, ma sarei molto sorpreso se qualcuno potesse inventare qualcosa di più ordinato, la maggior parte degli hack di IE6 sono molto peggiori! – roryf

14

Io uso due soluzioni diverse a seconda della situazione. In primo luogo, prova l'approccio Nicole Sullivan (utilizzando overflow: hidden; sull'elemento finale fila invece di galleggiante/larghezza):

http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/

.container { 
    width: 75%; 
} 

.box1 { 
    width: 33.33%; 
    float: left; 
    display: inline; /* fixes another IE bug */ 
} 

.box2 { 
    overflow: hidden; 
} 

Questo funziona nella maggioranza dei casi.

In caso contrario, aggiungo un margine negativo di diversi pixel all'ultimo elemento.

.box2 { 
    width: 33.33%; 
    float: left; 
    display: inline; /* fixes another IE bug */ 
    margin-right: -3px; 
} 

Se l'ultimo elemento è a destra, invece, basta aggiungere il margine negativo a sinistra. Finora questo ha funzionato per me nei pochi casi in cui lo overflow non andava bene.

+1

Questo segreto vantaggio della proprietà di overflow è * sexy * –

0

Penso che una semplice risposta potrebbe essere quella di non arrotondare affatto, basta creare un elemento finale "spacer" con una larghezza dell'1% che condivide l'aspetto degli elementi 1/3. Anche IE dovrebbe essere in grado di gestire un arrotondamento 33 + 33 + 33 + 1.

0

Ho avuto lo stesso problema. ie7 non ha reso correttamente il 33.33%. Funzionerebbe con il 33% ma poi è stata una linea sottile. Ho usato il consiglio dal secondo blocco di codice nella prima risposta sopra, più un piccolo hack. Ha funzionato per me, spero che aiuti.

.all-boxes { 
    width: 33.33%; 
    float: left; 
    display: inline; 
    *margin-right: -1px; /* Add the asterisk */ 
} 

il valore del margine potrebbe essere necessario modificare, sulla base di implementazione, ma 1px funzionato per me.

Problemi correlati