Wie erstelle ich mein Flex-Element ( article
in diesem Beispiel), das das Flex-Element / den Flex-Container ( ) flex-grow: 1;
nicht überlaufen muss main
?
In diesem Beispiel article
handelt es sich nur um Text, obwohl er möglicherweise andere Elemente ( table
s usw.) enthält.
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>
min-width: 0;
, das Flex-Element zu ergänzen .Antworten:
Ihre Flex-Artikel haben
flex: 0 0 200px; /* <aside> */ flex: 1 0 auto; /* <article> */
Das bedeutet:
Das
<aside>
wird um beginnen200px
weitem beginnen.Dann wächst und schrumpft es nicht.
Das
<article>
beginnt bei der durch den Inhalt angegebenen Breite.Wenn dann Platz verfügbar ist, wächst dieser, um ihn abzudecken.
Sonst schrumpft es nicht.
Um einen horizontalen Überlauf zu verhindern, können Sie:
flex-basis: 0
und lassen Sie sie dann mit einem positiven wachsenflex-grow
.flex-shrink
, damit sie schrumpfen, wenn nicht genügend Platz vorhanden ist.Um einen vertikalen Überlauf zu verhindern, können Sie
min-height
stattheight
, damit die Flex-Elemente bei Bedarf stärker wachsenoverflow
andere als die auf den Flex-Elementen sichtbaren Elementeoverflow
andere als auf dem Flexbehälter sichtbarZum 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>
quelle
<table>
innerhalb der<article>
sogar die Tabelle wickeln mitdiv
undoverflow: auto;
flex: 1 1 0; min-width: 0;
auf<article>
- hatte das gleiche Problem mit<table>
und es half; siehe dev.to/martyhimmel/…Eine einfache Lösung besteht darin
overflow
, andere Werte zu verwenden , alsvisible
die Breite der Textflexbasis wie erwartet zurückzusetzen.Hier mit Wert wird
auto
der Text wie erwartet umbrochen und der Artikelinhalt läuft nicht über den Hauptcontainer.Außerdem muss der Artikelwert
flex
entweder eineauto
Basis haben UND in der Lage sein, zu schrumpfen, ODER nur zu wachsen UND eine explizite0
Basis zu habenmain, aside, article { margin: 10px; border: solid 1px #000; border-bottom: 0; height: 50px; overflow: auto; /* 1. overflow not `visible` */ } main { display: flex; } aside { flex: 0 0 200px; } article { flex: 1 1 auto; /* 2. Allow auto width content to shrink */ /* flex: 1 0 0; /* Or, explicit 0 width basis that grows */ }
<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>
quelle
white-space: nowrap
. DankeAnstatt
flex: 1 0 auto
nur zu benutzenflex: 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>
quelle
flex: 1
ist wieflex: 1 1 0
.flex-shrink
damals ist, da ich denke, ich möchte, dass es schrumpft. Auch @Oriol denke ichflex: 1
istflex: 1 1 auto
.flex: 1 1 0
. Src: w3.org/TR/css-flexbox-1/#flex-propertyauto
als Anfangswert für den 3. param?flex: 1
Ich weiß, dass dies sehr spät ist, aber für mich stellte ich fest, dass das Anwenden
flex-basis: 0;
auf das Element ein Überlaufen des Elements verhinderte.quelle
Wenn der Überlauf verpackt werden soll:
flex-flow: row wrap
quelle
Es ist nicht für jede Situation geeignet, da nicht alle Elemente ein nicht proportionales Maximum haben
max-width
können.quelle
max-width
funktioniert bei mir.aside { flex: 0 1 200px; max-width: 200px; }
Durch Variablen von CSS-Vorprozessoren kann eine Hardcodierung vermieden werden.
aside { $WIDTH: 200px; flex: 0 1 $WIDTH; max-width: $WIDTH; }
overflow: hidden
funktioniert auch, aber ich versuche es in letzter Zeit nicht zu verwenden, da es die Elemente als Popups und Dropdowns verbirgt.quelle