2010-03-19 14 views
1

Mon objectif est de créer une mise en page de 200% de largeur et de hauteur, avec quatre conteneurs de hauteur et largeur égales (100% chacun), sans javascript comme ours minimal (ou de préférence sans hacks).Problème de mise en page basé sur Internet Explorer

En ce moment j'utilise HTML5, et l'affichage CSS: table. Cela fonctionne très bien dans Safari 4, Firefox 3.5 et Chrome 5. Je ne l'ai pas encore testé sur des versions plus anciennes.

Néanmoins, dans IE7 et IE8, cette disposition échoue complètement. (J'utiliser le script permettant HTML5 Javascript/cc .. /, donc il ne devrait pas être l'utilisation des nouvelles balises HTML5)

Voici ce que j'ai:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <meta charset="UTF-8" /> 
     <title>IE issue with layout</title> 
     <style type="text/css" media="all"> 
      /* styles */ 
      @import url("reset.css"); 

      /* Generall CSS */   
      .table 
      { 
       display:table; 
      } 

      .row 
      { 
       display:table-row; 
      } 

      .cell 
      { 
       display:table-cell; 
      } 


      /* Specific CSS */ 
      html, body 
      { 
       //overflow:hidden; I later intend to limit the viewport 
      } 

      section#body 
      { 
       position:absolute; 
       width:200%; 
       height:200%; 
       overflow:hidden; 
      } 

      section#body .row 
      { 
       width:200%; 
       height:50%; 
       overflow:hidden; 
      } 

      section#body .row .cell 
      { 
       width:50%; 
       overflow:hidden; 
      } 

      section#body .row .cell section 
      { 
       display:block; 
       width:100%; 
       height:100%; 
       overflow:hidden; 
      } 

      section#body #stage0 section header 
      { 
       text-align:center; 
       height:20%; 
       display:block; 
      } 

      section#body #stage0 section footer 
      { 
       display:block; 
       height:80%; 
      } 

     </style> 
    </head> 
    <body> 
     <section id="body" class="table"> 
      <section class="row"> 
       <section id="stage0" class="cell"> 
        <section> 
         <header> 
          <form> 
           <input type="text" name="q" /> 
           <input type="submit" value="Search" /> 
          </form> 
         </header> 
         <footer> 
          <table id="scrollers"> 
          </table> 
         </footer> 
        </section> 
       </section> 
       <section id="stage1" class="cell"> 
        <section> 
         content 
        </section> 
       </section>   
      </section> 
      <section class="row"> 
       <section id="stage2" class="cell"> 
        <section> 
         content 
        </section> 
       </section> 
       <section id="stage3" class="cell"> 
        <section> 
         content 
        </section> 
       </section> 
      </section> 
     </section> 
    </body> 
</html> 

Vous pouvez le voir vivre ici: http://www.tombarrasso.com/ie-issue/

+0

juste une note, '//' n'est pas une syntaxe de commentaire valide en CSS - seulement '/ * ... * /' est valide en CSS. – scunliffe

+0

En regardant dans les outils de développement IE8, il semble que IE ne parvienne pas à "imbriquer" vos balises HTML5. Je ne suis pas sûr que ce soit juste les outils de développement agissant, ou si cela reflète exactement ce que IE a "interprété" votre code. (Il fonctionne dans IE9 Dev Preview 1 au fait) – scunliffe

+0

Il s'avère que si j'ai ajouté le /*@cc_on...*/ dans un tag de script dans la tête, et non un fichier externe, il fonctionne dans IE8 comme il se doit. Cependant, la disposition elle-même se comporte différemment dans IE7, une cellule occupe la totalité des 200% et aucun autre contenu n'est affiché. – Tom

Répondre

1

Résolu!

Il s'avère qu'il y avait beaucoup de problèmes.

L'un est que ce commentaire /*@cc_on'abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video'.replace(/\w+/g,function(n){document.createElement(n)});@*/ est requis dans une balise de script dans la tête du document.

Deuxièmement, IE7 et ci-dessous pour ne pas reconnaître display:table ou similaire, voir Quirksmode. Enfin, les éléments du corps html devaient avoir une hauteur de 100% pour que IE sache à quoi faire référence.

Quoi qu'il en soit, cela est corrigé et fonctionne très bien.