2017-01-16 6 views
2

Ich würde gerne wissen: ist es möglich, ein 3-Zeilen-Layout, 100% Höhe, mit Flexbox zu bauen?3 Reihen, 100% Höhe Layout, mit Flexbox

<header> The header content goes here. </header> 
<div class="content"> The main content goes here. </div> 
<footer> The footer content goes here. </footer> 

fester Höhe Kopf- und Fußzeilen, während der Inhalt der flüssige Teil.

Ich meine, so etwas wie dieses, aber ohne absolute Positionierung:

* { 
 
    margin: 0; 
 
} 
 
header { 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 64px; 
 
    top: 0; 
 
    background: red; 
 
} 
 
footer { 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 64px; 
 
    bottom: 0; 
 
    background: green; 
 
} 
 
.content { 
 
    position: absolute; 
 
    width: 100%; 
 
    top: 64px; 
 
    bottom: 64px; 
 
    background: blue; 
 
}
<header>The header content goes here.</header> 
 

 
<div class="content">The main content goes here.</div> 
 

 
<footer>The footer content goes here.</footer>

http://jsfiddle.net/BMxzn/

+0

So etwas wie [das] (http://jsfiddle.net/DomeTune/5qqw1kzy/1/) – DomeTune

+1

@ Michael_B Ok, danke, ich habe meine eigene Antwort zusammen mit den richtigen Dokumenten hinzugefügt. – Stratboy

Antwort

1

Ich füge meine eigene akzeptierte Antwort hier hinzu, weil sie auch andere Probleme anspricht.

Ich bemerkte, dass der normalerweise vorgeschlagene Code ein Problem mit Android vor 4.4.4 hat. Durch die bessere indagating > this und > this Ich fand heraus, dass das Problem > this, auch wenn Android nicht auf der betroffenen Browsern Liste erwähnt. So, das war meine Lösung Flexschrumpf hinzuzufügen: 0 auf den Inhalt:

body{ 
    display: flex; 
    flex-direction: column; 
    height: 100%; 
} 

.main-content{ 
    flex: 1 0 auto; // flex-shrink:0 > android 4.4.2 fix (and some other browsers too) 
} 

Es ist auch gut, eine Art von flex Eigenschaft zuweisen Kopf- und Fußzeile. Ich bemerkte auf Android 442, die sonst die bg Farbe verschwunden war:

.main-header, 
.main-footer{ 
    flex: none; // or flex something. 
} 

Bitte beachten Sie auch, dass ich Autoprefixer bin mit. Andernfalls sollten Sie nicht die Verknüpfung auf dem Haupt-Inhalte (IE Scheiße-fix):

.main-content{ 
    flex-grow: 1; 
    flex-shrink:0; 
    flex-basis:auto; 
} 
7

body { 
 
    display: flex; 
 
    flex-direction: column; 
 
    height: 100vh; 
 
} 
 
.content { 
 
    flex: 1;  /* this is the key; consumes all available height */ 
 
    background: blue; 
 
} 
 
header { 
 
    height: 64px; 
 
    background: red; 
 
} 
 
footer { 
 
    height: 64px; 
 
    background: green; 
 
} 
 
* { 
 
    margin: 0; 
 
}
<header>The header content goes here.</header> 
 
<div class="content">The main content goes here.</div> 
 
<footer>The footer content goes here.</footer>

0

Sehr ähnlich diese Frage: this & this

Sie brauchen nur 3 Zeilen Code:

display:flex; 
flex-flow:column; 
height:/* whatever height needed */ 

und dann flex:1; an dem Behälter, die verbleibenden Raum zu füllen braucht

* { 
 
    margin: 0; 
 
} 
 
body { 
 
    display: flex; 
 
    flex-flow: column; 
 
    height: 100vh;/* if you relay on flex, then vh is also understood */ 
 
} 
 
body>* { 
 
    padding: 1em; 
 
} 
 
header { 
 
    background: red; 
 
} 
 
footer { 
 
    background: green; 
 
} 
 
.content { 
 
    flex: 1; 
 
    background: blue; 
 
    color: white; 
 
    /* optionnal if you want to keep footer at screen 
 
    overflow:auto; */ 
 
}
<header>The header <b>of any height</b> content goes here.</header> 
 

 
<div class="content">The main content goes here.</div> 
 

 
<footer>The footer <b>of any height</b> content goes here.</footer>

Es müssen keine Höhen für Fußzeile oder Kopfzeile festgelegt werden, aber Sie können overflow:auto zum Hauptcontainer hinzufügen.

+0

@Stratboy, war es in der Frage angegeben? ist es auch gut mit IE? :) Kannst du mir das in android https://jsfiddle.net/10ohr6wy/9/ (flex: 1 1 auto;) zurückgeben, benötigt von IE –

+0

da die Frage blockiert war, konnte ich keine Antwort von mir selbst hinzufügen Ich habe eine andere Frage gestellt.Wie auch immer, meine Antwort auf den anderen Thread ist besser, weil es Android-Probleme angeht. Es ist alles auf den externen Links dokumentiert, die ich mit der Antwort gepostet habe, so dass Sie sich auf diese beziehen können. schrieb den obigen Kommentar nur um zukünftige Leute zu informieren, also nichts persönliches. Einen schönen Tag noch. – Stratboy

+0

@Stratboy, okay, ich habe diese andere Frage nicht gesehen, wo Androide beteiligt war :). Hast du einen Blick auf die Fiddle geworfen, die ich vorher verlinkt habe, wie es sich in android verhalten hat (über eine andere Frage hier beim Überlauf, ich habe mich nur gefragt, ob der IE auch für Android ... Buggy) –