2016-03-26 14 views
13

Wie mache ich meine flex Artikel (article in diesem Beispiel), die flex-grow: 1;nicht Überlauf hat es flex Eltern/Container (main)?Wie kann verhindert werden, dass Flex-Artikel überlaufen?

In diesem Beispiel article ist nur Text, obwohl es andere Elemente enthält möglicherweise, Tabellen usw.

main, aside, article { 
 
    margin: 10px; 
 
    border: solid 1px #000; 
 
    border-bottom: 0; 
 
    height: 50px; 
 
} 
 
main { 
 
    display: flex; 
 
} 
 
aside { 
 
    flex: 0 0 200px; 
 
} 
 
article { 
 
    flex: 1 0 auto; 
 
}
<main> 
 
    <aside>x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x </aside> 
 
    <article>don't let flex item overflow container.... y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y </article> 
 
</main>

Antwort

13

Ihre flex Produkte haben

flex: 0 0 200px; 
flex: 1 0 auto; 

Das bedeutet:

  • Die erste bei 200px breit beginnen.

    Dann wird es nicht wachsen noch schrumpfen.

  • Der zweite beginnt mit der Breite des Inhalts.

    Dann, wenn es verfügbaren Speicherplatz gibt, wird es wachsen, um es abzudecken.

    Sonst wird es nicht schrumpfen.

Um horizontalen Überlauf zu verhindern, können Sie:

  • Verwenden flex-basis: 0 und sie dann mit einer positiven flex-grow wachsen lassen.
  • Verwenden Sie eine positive flex-shrink, um sie schrumpfen zu lassen, wenn nicht genügend Platz vorhanden ist.

vertikalen Überlauf zu verhindern, können Sie

  • Verwenden min-height statt height den flexiblen Elemente als sichtbar auf dem Flex Artikel
  • Verwendung mehr, wenn nötig
  • Verwendung overflow verschiedene wachsen lassen overflow anders als sichtbar auf dem flexiblen Behälter

Zum Beispiel

main, aside, article { 
 
    margin: 10px; 
 
    border: solid 1px #000; 
 
    border-bottom: 0; 
 
    min-height: 50px; /* min-height instead of height */ 
 
} 
 
main { 
 
    display: flex; 
 
} 
 
aside { 
 
    flex: 0 1 200px; /* Positive flex-shrink */ 
 
} 
 
article { 
 
    flex: 1 1 auto; /* Positive flex-shrink */ 
 
}
<main> 
 
    <aside>x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x </aside> 
 
    <article>don't let flex item overflow container.... y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y </article> 
 
</main>

+0

es scheint nicht zu funktionieren, wenn ich '

' innerhalb der '
' sogar die Tabelle mit 'div' und' overflow: auto; ' – vee

+0

wrap Wenn Sie mit vielen flexiblen Elementen zu tun haben, die Container überlaufen (anstelle von Text), Sie sollte [flex-wrap] verwenden (https://developer.mozilla.org/en/docs/Web/CSS/flex-wrap) – Veehmot

3

Statt flex: 1 0 auto verwenden nur flex: 1

main, aside, article { 
 
    margin: 10px; 
 
    border: solid 1px #000; 
 
    border-bottom: 0; 
 
    height: 50px; 
 
} 
 
main { 
 
    display: flex; 
 
} 
 
aside { 
 
    flex: 0 0 200px; 
 
} 
 
article { 
 
    flex: 1; 
 
}
<main> 
 
    <aside>x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x </aside> 
 
    <article>don't let flex item overflow container.... y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y </article> 
 
</main>

+1

Um zu klären, 'flex: 1 'ist wie' flex: 1 1 0'. – Oriol

+0

Super, danke!Ich denke, ich hatte das falsche mentale Modal für das, was "flex-shrink" dann ist, da ich glaube, dass ich es verkleinern möchte. Auch @Oriol denke ich 'flex: 1' ist' flex: 1 1 auto'. – philfreo

+0

@philfreo Nein, es ist 'flex: 1 1 0'. Src: https://www.w3.org/TR/css-flexbox-1/#flex-property – LGSon

Verwandte Themen