2017-06-22 2 views
5

Ich versuche, ein einfaches Design mit flexbox zu machen, aber ich habe Probleme mit IE11. Grundsätzlich möchte ich eine Fußzeile, die nur dann an der Unterseite bleibt, wenn der Inhalt nicht hoch genug ist. Ich habe kein Problem, das wie dies mit Chrome tun:Flexbox, min-height und IE11

*, 
 
*:after, 
 
*:before { 
 
    box-sizing: border-box; 
 
} 
 

 
html, 
 
body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
body { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
main { 
 
    flex: 1; 
 
}
<header> 
 
    Header 
 
</header> 
 
<main> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
</main> 
 
<footer> 
 
    Footer 
 
</footer>

nur mit der Anzahl der <p>main</p> spielt das falsche Verhalten mit IE11 zu sehen.

Gibt es eine Möglichkeit, dies ohne JavaScript zu erreichen?

+0

nicht funktioniert. In diesem Fall erscheint "Footer" direkt unter "Header" oben auf "Main". – ssougnez

+0

Ah richtig ja, du kannst nur deinen flex ändern: 1 zu flex-grow: 1 und das sollte funktionieren – Pete

Antwort

5

IE hat einen min-height Fehler und muss display: flex auf der flexiblen Spaltencontainer Eltern, in diesem Fall die html

Fiddle demo

Aktualisieren Sie Ihre CSS ähnliche

*, 
 
*:after, 
 
*:before { 
 
    box-sizing: border-box; 
 
} 
 
html, body { 
 
    margin: 0; 
 
    display: flex; 
 
} 
 
body { 
 
    flex-direction: column; 
 
    min-height: 100vh; 
 
} 
 
main { 
 
    flex-grow: 1; 
 
}
<header> 
 
    Header 
 
</header> 
 
<main> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
    <p>Main</p> 
 
</main> 
 
<footer> 
 
    Footer 
 
</footer>

+0

Es funktioniert gut, danke – ssougnez

+0

Der 'min-height' Bug war in diesem Fall nicht das Problem. Aber 'flex-grow: 1' macht den Trick, denn wenn man' flex: 1' entfernt, setzt man 'flex-basis' auf den' auto' Standard zurück. –

+1

@Michael_B Ich dachte, dass eine gerade jetzt, nach Ihrem Kommentar von Ihrer Antwort, also nochmals danke – LGSon

2

Auf main, anstelle von flex: 1 verwenden Sie flex: auto. Das sollte alles sein, was du brauchst.


Die flex: 1 Stenografie Regel bricht an:

  • flex-grow: 1
  • flex-shrink: 1
  • flex-basis: 0

Die flex: auto Stenografie Regel bricht an:

  • flex-grow: 1
  • flex-shrink: 1
  • flex-basis: auto

IE hat flex-basis: 0 Probleme Parsen.

Weitere Informationen:

+0

Das funktioniert auch .. + 1. Trotzdem, wie kommt 'flex: auto' zu' 1 1 auto', wenn der Standardwert '0 1 auto' ist? – LGSon

+0

@LGSon, https://www.w3.org/TR/css-flexbox-1/# flex-common –

+1

Aha, danke .... das habe ich vorher wirklich vermisst, dachte es änderte nur die Flexbasis (ich gehöre zur älteren Generation und wir lesen keine Handbücher :) – LGSon

Verwandte Themen