Ich plane, mich von "schwebenden" Layouts zu entfernen und CSS-Flexbox für zukünftige Projekte zu verwenden. Ich war erfreut zu sehen, dass alle gängigen Browser in ihren aktuellen Versionen (auf die eine oder andere Weise) Flexbox zu unterstützen scheinen.
Ich ging zu "Solved by Flexbox", um mir einige Beispiele anzusehen. Das Beispiel "Sticky Footer" scheint jedoch in Internet Explorer 11 nicht zu funktionieren. Ich habe ein bisschen herumgespielt und es durch Hinzufügen display:flex
zum <html>
und width:100%
zum zum Laufen gebracht<body>
Meine erste Frage lautet also: Kann mir jemand diese Logik erklären? Ich habe nur rumgespielt und es hat funktioniert, aber ich verstehe nicht ganz, warum es so funktioniert hat ...
Dann gibt es das Beispiel "Medienobjekt", das in allen Browsern funktioniert, außer - Sie haben es erraten - Internet Explorer. Ich habe auch damit herumgespielt, aber ohne Erfolg.
Meine zweite Frage lautet daher: Gibt es eine "saubere" Möglichkeit, das Beispiel "Medienobjekt" in Internet Explorer zum Laufen zu bringen?
quelle
Antworten:
Laut http://caniuse.com/#feat=flexbox :
"Die Standardwerte für IE10 und IE11 für
flex
sind0 0 auto
nicht0 1 auto
gemäß dem Entwurf der Spezifikation ab September 2013"Wenn Sie also irgendwo in Ihrem CSS so etwas haben :
flex:1
, wird das nicht in allen Browsern gleich übersetzt. Versuchen Sie es zu ändern1 0 0
und ich glaube, Sie werden sofort sehen, dass es funktioniert.Das Problem ist, dass diese Lösung wahrscheinlich Firefox durcheinander bringt, aber dann können Sie einige Hacks verwenden, um nur Mozilla ins Visier zu nehmen und es zurück zu ändern:
Da
flexbox
es sich um einen W3C-Kandidaten handelt und nicht offiziell ist, liefern Browser tendenziell unterschiedliche Ergebnisse, aber ich denke, das wird sich in naher Zukunft ändern.Wenn jemand eine bessere Antwort hat, würde ich gerne wissen!
quelle
-ms-flex: 1 0 0;
und IE11flex: 1 0 0;
..?flex: 1 0 0;
. Aberflex: 1 0 0%;
( beachten Sie die % ) oderflex: 1 0 auto;
wird funktionieren.flex: 1;
Ich denke, es hängt davon ab, was Sie wollen ...flex-basis
. Github hat eine gute Diskussion darüber, warum esflex:1 0 100%
in einigen Fällen für IE11 funktioniert, während es in anderenflex: 1 0 0%
sogarflex: 1 0 auto
funktioniert. Sie müssen den Inhalt im Voraus kennen.Verwenden Sie einen anderen Flex-Container, um das
min-height
Problem in IE10 und IE11 zu beheben :HTML
CSS
Sehen Sie sich eine funktionierende Demo an .
body
da es Elemente vermasselt, die über jQuery-Plugins (Autocomplete, Popup usw.) eingefügt wurden.height:100%
oderheight:100vh
auf Ihrem Container nicht, da die Fußzeile am unteren Rand des Fensters haftet und sich nicht an lange Inhalte anpasst.flex-grow:1
eher alsflex:1
Ursache IE10 und IE11 Standardwerte für dieflex
sind0 0 auto
und nicht0 1 auto
.quelle
flex-direction: column
um.ie-fixMinHeight
Nebenwirkungen zu vermeiden. Wenn Sie kein IE-spezifisches HTML haben, können Sie es verwenden.fixMinHeight { display: -ms-flexbox; -ms-flex-direction: column; }
height
vsmin-height
war der Schlüssel.Sie brauchen nur
flex:1
; Es wird das Problem für den IE11 beheben. Ich stimme Odisseas zu. Weisen Sie HTML-Körperelementen zusätzlich eine Höhe von 100% zu .CSS-Änderungen:
Arbeits-URL: http://jsfiddle.net/3tpuryso/13/
quelle
display: flex;
und zugehörigen Stile sowohl auf denbody
Container als auch auf den Container angewendet werden müssen : jsfiddle.net/Skateside/nezdrrkrmain
einstellen, scheint der Inhalt nicht mehr richtig zu wachsen (zumindest in Chrom). Wenn Sie genügend Inhalte hinzufügen, wird die Fußzeile überlaufen. jsfiddle.net/3tpuryso/65html
zumin-height: 100%
stattdessen mit dem Inhalt zu folgenHier ist ein Beispiel für die Verwendung von Flex, das auch in Internet Explorer 11 und Chrome funktioniert.
HTML
quelle
Html
.Manchmal ist es so einfach wie das Hinzufügen von: '-ms-' vor dem Stil Wie -ms-flex-flow: Zeilenumbruch; damit es auch funktioniert.
quelle