2014-08-31 9 views
5

Ich habe seit 3 ​​Tagen versucht, zu vermeiden, den Tisch in meinem neuen responsiven Design zu verwenden, meistens weil jeder sagt, dass sie böse sind. Auf der anderen Seite, während man mehr über SEO und Tabellen recherchiert, sagen einige Leute sogar, dass es ihre Sichtbarkeit verbessert.IE 10 Fehler mit Anzeigetabelle CSS, wenn Höhe 100% ist?

In jedem Fall ist die Semantik mit divs und HTML5 viel schöner, also würde ich dieses folgende Beispiel wirklich gerne haben. Das Hauptproblem ist, dass in IE9 & 10 die "Abschnittszeile" wegen des Wertes "Höhe 100%" überläuft. Alle anderen Browser scheinen gut zu reagieren.

Wer weiß, wie diese zu lösen (im Idealfall ohne Javascript?):

JSFiddle: http://jsfiddle.net/fvqvdske/1/

Fullsize-Seite in IE10 Emulationsmodus zu testen: http://jsfiddle.net/fvqvdske/1/show

Das einzige Problem ist der Überlauf und IE9, 10 - die mittlere Zeile muss den gesamten Platz füllen, der von der Kopf- und Fußzeile übrig ist (und die Kopf- und Fußzeile muss in der Lage sein, die Höhe dynamisch an ihren Inhalt anzupassen, zB n o feste, keine absoluten Positionen).

HTML

<body> 
<header role="banner"> 
    <div> 
     <div> 
      This is the top banner 
     </div> 
    </div> 
</header> 
<section role="main"> 
    <div> 
     <div> 
      <div> 
       <div> 
        <div style="border: 2px solid red;"> 
         This is the content<br/> 
         This is the content<br/> 
         This is the content<br/> 
         This is the content<br/> 
         This is the content<br/> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</section> 
<footer role="contentinfo"> 
    <div> 
     <div> 
      This is the footer 
     </div> 
    </div> 
</footer> 
</body> 

CSS

html, body { 
     height: 100%; 
     width: 100%; 
     margin: 0; 
     padding: 0; 
    } 
    body { 
     height: 100%; 
     width: 100%; 
     display: table; 
     position: absolute; 
     border-spacing: 0; 
     border-collapse: collapse; 
    } 

    header, footer, section { 
     display: table-row; 
     text-align: center; 
     vertical-align: middle; 
     height: 1px; 
    } 

    header > div, section > div, footer > div { 
     display: table-cell; 
     vertical-align: middle; 
    } 

    header > div > div, 
    section > div > div, 
    section > div > div > div, 
    footer > div > div { 
     max-width: 400px; 
     width: 100%; 
     margin: auto; 
     background-color: brown; 
    } 

    section, 
    section > div, 
    section > div > div, 
    section > div > div > div, 
    section > div > div > div > div { 
     box-shadow: inset 0 1em 1em -1em #222, inset 0 -1em 1em -1em #222; 
     height: 100%; 
     vertical-align: middle; 
    } 

    section > div { 
     display: table-cell; 
     width: 100%; 
     height: 100%; 
    } 

    section > div > div { 
     display: table; 
     margin: auto; 
    } 

    section > div > div > div { 
     display: table-row; 
    } 

    section > div > div > div > div { 
     display: table-cell; 
    } 


    section { 
    } 

    /* temp */ 
    header { 
     background-color: pink; 
    } 

    section { 
     background-color: yellow; 
    } 

    footer { 
     background-color: orange; 
    } 
+0

Sein ein hässlicher Fehler haben Sie flex Box versucht, mit? 'display: flex;' http://jsfiddle.net/GXe9m/2/ – jagmitg

+1

Flexbox wird nicht genug für mein Projekt unterstützt: http://caniuse.com/#search=flexbox - Sind Sie sicher, dass dies ein Fehler ist .. Nichts, was wir tun können, um es zu umgehen? Ich habe ein kleines Update gemacht, um mein CSS zu säubern und es leichter zu machen, es zu befolgen. –

+0

Persönlich, wenn ich display: table, table-row und table-cell verwenden müsste, dann würde ich tatsächliche HTML-Tabellen verwenden. Das scheint mir verwirrend. Noch nie von dem SEO-Argument gehört. Haben Sie einen Link mit mehr Infos dazu? –

Antwort

2

ein paar Tage in dieser Frage Nachdem er, so scheint es, dass für dieses spezielles Layout (insbesondere die 100% Höhe), mit Tabellen ist die beste Option. Diese drei verschiedenen Threads mit unterschiedlicher Verdrehung der Frage waren nicht in der Lage Ergebnisse zu erhalten (so vermute ich, dass der IE Fehler ein Grund ist die Verwendung von Tabellen im Jahr 2014 zu halten):

Durch mehr über Tabellen und SEO lesen, ich w Da auch keine relevanten Informationen oder konkreten Daten gefunden werden können, die mit einer einzigen Tabelle hätten, hätte das überhaupt Auswirkungen. Die einzige greifbare Information, die ich finden konnte, ist, dass Tabellen nur angezeigt werden, wenn der vollständige HTML-Code in den Client heruntergeladen wurde. Das ist auch 2014 kein großes Problem, wenn man die HTML-Größe in der Gesamtgröße einer Webseite betrachtet. CSS kann für den gesamten Stil der Tabelle verwendet werden, der einige der anderen Beschwerden über Tabellen löst. Dieser Artikel spiegelt wahrscheinlich am besten die Situation hier:

http://olav.dk/articles/tables.html

Tabellen im Jahr 2014 könnten in Ordnung sein :)

+4

Wenn Sie 'table' für das Layout verwenden, sollten Sie es mit' role = "presentation" '[W3C: 4.9 .1 Das Tabellenelement] (http://www.w3.org/TR/html5/tabular-data.html#the-table-element): '[...] Tabellen sollten nicht als Layouthilfen verwendet werden. [ ...] Wenn eine Tabelle für das Layout verwendet werden soll, muss sie mit dem Attribut role = "presentation" [...] markiert sein. Da ein anderer Wert als '1' oder _empty_ für html5 nicht gültig ist, sollten Sie dies nicht tun Verwenden Sie "border = 0", um dies anzuzeigen. –

+0

@ t.niese Guter Fang! Ich habe das gerade meinem Code hinzugefügt. Vielen Dank –