2010-12-15 77 views
0

Je veux que ma page ressemble à ceci:problème IE: Div positionnement

+------+------+ 
|first |third | 
|  |  | 
+------+------+ 
|second|  
|  |  
+------+ 

Dans la dernière version de FF et Chrome le ciselée ci-dessous fonctionne comme il se doit. Mais dans IE la sortie ressemble à ceci:

+------+ 
|first | 
|  |  
+------+------+ 
|second| third|  
|  |  | 
+------+------+ 

Mon ciselée

<style> 
    #wrapper 
    { 
     width: 680px; 
    } 

    #first 
    { 
     background: Red; 
     float: left; 
     width: 500px; 
    } 

    #second 
    { 
     background: Green; 
     float: left; 
     width: 500px; 
    } 

    #third 
    { 
     background: Red; 
    } 
</style> 
<div id="wrapper"> 
    <!-- 1st two Divs--> 
    <div id="first">Div ONE</div> 
    <div id="second">Div TWO</div> 
    <!-- 3rd Div should be on the top right side next to div one --> 
    <div id="third">Div Three</div> 
</div> 

J'apprécierais vraiment si vous pouviez me donner une solution sans modifier le balisage HTML.

Nous vous remercions de votre temps!

Andrew, Suisse

+0

avez-vous essayé float: droit pour le troisième div? – Catalin

+0

oui mais il ne génère pas la bonne sortie. – Andrew

+0

Quelle version d'IE utilisez-vous? – Lazarus

Répondre

0

Ici, cela devrait fonctionner:

#wrap { width:800px; position:relative; } 
#first, #second, #third { width:400px; height:400px; } 
#third { position:absolute; top:0; right:0; } 

démonstration de travail:http://vidasp.net/tinydemos/layout.html

+0

C'est une solution plutôt inflexible. Que se passe-t-il si le troisième conteneur a un contenu qui nécessite une hauteur de 1200px? – lnrbob

+0

Merci! Cette solution fonctionne pour moi puisque la troisième div ne sera jamais plus haute que les autres. – Andrew

1

Essayez ceci:

<style> 
    #wrapper 
    { 
     width: 680px; 
    } 

    #first 
    { 
     background: Red; 
     float: left; 
     width: 500px; 
    } 

    #second 
    { 
     background: Green; 
     width: 500px; 

    } 

    #third 
    { 
     background: Red; 
     float: left; 

    } 
</style> 

Vous auriez à flotter le troisième div gauche et retirer le flotteur du deuxième div.

Vous ne devez modifier le code HTML, mais vous devrez réorganiser les divs:

<div id="wrapper"> 
    <div id="first">Div ONE</div> 
    <div id="third">Div Three</div> 
    <div id="second">Div TWO</div> 
</div> 

Cela vous donnera l'ordre d'affichage que vous recherchez.

+0

Merci beaucoup pour votre réponse, mais comme je l'ai dit, le code HTML devrait être intacte. – Andrew

+0

J'ai une autre solution qui laisserait le html intact, mais cela dépend des dimensions des boîtes - sont-elles fixées? – SMSidat

0

Que diriez-vous quelque chose comme ceci:

<style> 
    #wrapper 
    { 
     width: 680px; 
    } 

    #first-second-wrapper { 
     float: left; 
     width: 500px; 
    } 

    #first 
    { 
     background: Red; 
    } 

    #second 
    { 
     background: Green; 
    } 

    #third 
    { 
     background: Red; 
     margin-left: 500px; 
    } 
</style> 
<div id="wrapper"> 
    <!-- 1st two Divs--> 
    <div id="first-second-wrapper"> 
     <div id="first">Div ONE</div> 
     <div id="second">Div TWO</div> 
    </div> 
    <!-- 3rd Div should be on the top right side next to div one --> 
    <div id="third">Div Three</div> 
</div> 
+0

Merci beaucoup, mais n'y a-t-il pas une solution qui laisse le html intact? – Andrew

+0

@Andrew Oui, mais cela dépend des dimensions des boîtes ... –

0

Je ne sais pas quelle version de IE vous sont en train de tester mais cela rend correctement dans mon IE8. Lorsque je passe en mode standard IE7 à l'aide de la barre d'outils dev, j'obtiens le problème. Ceci peut être résolu avec ce css:

#second 
    { 
     background: Green; 
     float: left; 
     width: 500px; 
     clear:both; 
    } 

Vous devrez peut-être inclure dans un commentaire conditionnel que je ne suis pas sûr des effets sur les autres navigateurs. Voici an example de cela.