2016-03-26 10 views
13

Come faccio a rendere il mio elemento flessibile (article in questo esempio), che ha flex-grow: 1;non overflow è flex genitore/contenitore (main)?Come evitare che oggetti flessibili si trabocchino dal contenitore?

In questo esempio article è solo testo, anche se potrebbe contiene altri elementi, tabelle, ecc

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>

risposta

13

I vostri articoli flex hanno

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

Ciò significa:

  • La prima avrà inizio alle 200px ampia.

    Quindi non crescerà né si restringerà.

  • Il secondo inizierà dalla larghezza indicata dal contenuto.

    Quindi, se c'è spazio disponibile, crescerà per coprirlo.

    Altrimenti non si restringe.

Per evitare overflow orizzontale, è possibile:

  • Usa flex-basis: 0 e poi farli crescere con una positiva flex-grow.
  • Utilizzare un valore positivo flex-shrink in modo che si riducano se lo spazio non è sufficiente.

per evitare overflow in verticale, è possibile

  • Uso min-height invece di height per consentire gli elementi flessibili crescono più se necessario
  • Usa overflow diverso da quello visibile sugli elementi flessibili
  • Usa overflow diverso da quello visibile sul contenitore flessibile

Per esempio,

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

sembra non funzionare se ho '

' dentro '
'avvolge anche la tabella con' div' e 'overflow: auto;' – vee

+0

Se si ha a che fare con molti oggetti flessibili che straripano di container (invece di testo), si dovrebbe usare [flex-wrap] (https://developer.mozilla.org/en/docs/Web/CSS/flex-wrap) – Veehmot

3

Invece di flex: 1 0 auto basta usare 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

Per chiarire, 'flex: 1' è come' flex: 1 1 0 '. – Oriol

+0

Fantastico, grazie!Penso di aver avuto la modale mentale sbagliata per quello che 'flex-shrink' è allora dato che suppongo che * lo * voglia di ridurlo. Anche @Oriol penso che 'flex: 1' sia' flex: 1 1 auto'. – philfreo

+0

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