Il testo in un contenitore flessibile non si avvolge in IE11


176

Considera il seguente frammento:

.parent {
  display: flex;
  flex-direction: column;
  width: 400px;
  border: 1px solid red;
  align-items: center;
}
.child {
  border: 1px solid blue;
}
<div class="parent">
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
</div>

In Chrome, il testo viene spostato come previsto:

inserisci qui la descrizione dell'immagine

Ma, in IE11, il testo non è a capo :

inserisci qui la descrizione dell'immagine

È un bug noto in IE? (se sì, sarà apprezzato un puntatore)

Esiste una soluzione alternativa nota?


Questa domanda simile non ha una risposta definitiva e un puntatore ufficiale.



1
Il problema scompare quando rimuovo align-items: centerdall'elemento genitore. Questo sembra essere ciò che lo sta causando
Nathan Perrier,

Risposte:


280

Aggiungi questo al tuo codice:

.child { width: 100%; }

Sappiamo che un bambino a livello di blocco dovrebbe occupare l'intera larghezza del genitore.

Chrome lo capisce.

IE11, per qualsiasi motivo, desidera una richiesta esplicita.

Utilizzando flex-basis: 100%o flex: 1funziona anche.

Nota: a volte sarà necessario ordinare i vari livelli della struttura HTML per individuare quale contenitore ottiene width: 100%. Il testo a capo CSS non funziona in IE


13
Ho dovuto aggiungere larghezza: 100%; al genitore. Questo bug sembra avere varie correzioni a seconda del contesto. Sigh IE!
Dennis Johnsen,

8
Piuttosto usa "max-width: 100%" sul .child.
Tyler,

2
Sto creando una tabella usando flex (ogni riga è flessibile, con i suoi figli che hanno:. flex: 1 1 50%; display: flex; align-items: center;Non sorprende, IE fallisce mentre avvolge i testi lunghi nelle celle. L'impostazione width:100%funziona, ma l'impostazione non funziona min-width: 100%! Dovrebbe, ma non lo fa ' t (come tutte le cose IE), così ho provato max-width: 99%, e sorprendentemente, si fa il lavoro penso di utilizzare. width:100%potrebbe essere migliore?
kumarharsh

1
Ho dovuto rimuovere flex-direction: columnil genitore perché questo funzionasse.
dman

1
Questo problema sembra esclusivo delle colonne flessibili. Non succede con le file flex.
Drazen Bjelovuk,

40

Ho avuto lo stesso problema e il punto è che l'elemento non stava adattando la sua larghezza al contenitore.

Invece di usare width:100%, sii coerente (non mescolare il modello flottante e il modello flessibile) e usa la flessibilità aggiungendo questo:

.child { align-self: stretch; }

O:

.parent { align-items: stretch; }

Questo ha funzionato per me.


2
Sì, anche questa risposta ha senso (ed è probabilmente più corretta di quella di larghezza). In uno dei miei progetti, l'impostazione della larghezza: 100% non è possibile e questa soluzione funziona bene.
Kumarharsh,

11

Come ha suggerito Tyler in uno dei commenti qui, usando

max-width: 100%;

sul bambino può funzionare (ha funzionato per me). Usare align-self: stretchfunziona solo se non lo stai usando align-items: center(cosa che ho fatto). width: 100%Funziona solo se non hai più figli all'interno del tuo flexbox che vuoi mostrare fianco a fianco.


max-width ha funzionato per me quando è stato applicato allo stesso contenitore con cui allineare gli elementi: è stato inserito flex-start.
Herms,

7

Ciao per me ho dovuto applicare la larghezza del 100% al suo elemento nonno. Non i suoi elementi figlio.

.grandparent {
    float:left;
    clear: both;
    width:100%; //fix for IE11 text overflow
}

.parent {
    display: flex;
    border: 1px solid red;
    align-items: center;
}

.child {
    border: 1px solid blue;
}

Ho avuto "larghezza: auto;" sul nonno. Il passaggio al 100% ha risolto questo problema per me.
jensanity5000,

2

In qualche modo tutte queste soluzioni non hanno funzionato per me. È chiaramente presente un bug IE flex-direction:column.

Ho funzionato solo dopo aver rimosso flex-direction:

flex-wrap: wrap;
align-items: center;
align-content: center;

0

Le soluzioni proposte non mi hanno aiutato con ".child {larghezza: 100%;}", dato che avevo un markup più complicato. Tuttavia, ho trovato una soluzione: rimuovere "align-items: center;", e funziona anche in questo caso.

.parent {
  display: flex;
  flex-direction: column;
  width: 400px;
  border: 1px solid red;
  /*align-items: center;*/
}
.child {
  border: 1px solid blue;
}
<div class="parent">
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
</div>


Non è necessario rimuovere align-items: center. Vedere stackoverflow.com/a/39365207/630170
kumarharsh

0

L'unico modo in cui sono stato costantemente in grado di evitare questo bug di colonna a direzione flessibile al 100% è utilizzare una query multimediale di larghezza minima per assegnare una larghezza massima all'elemento figlio su schermi di dimensioni desktop.

.parent {
    display: flex;
    flex-direction: column;
}

//a media query targeting desktop sort of sized screens
@media screen and (min-width: 980px) {
    .child {
        display: block;
        max-width: 500px;//maximimum width of the element on a desktop sized screen
    }
}

Sarà necessario impostare elementi figlio naturalmente incorporati (ad es. <span>O <a>) su qualcosa di diverso da inline (principalmente display: block o display: inline-block) affinché la correzione funzioni.


0

Non ho trovato la mia soluzione qui, forse qualcuno sarà utile:

.child-with-overflowed-text{
  word-wrap: break-all;
}

In bocca al lupo!


0
.grandparent{
   display: table;
}

.parent{
  display: table-cell
  vertical-align: middle
}

Questo ha funzionato per me.


0

Anch'io ho riscontrato questo problema.

L'unica alternativa è definire una larghezza (o larghezza massima) negli elementi figlio. IE 11 è un po 'stupido e io ho appena trascorso 20 minuti per realizzare questa soluzione.

.parent {
  display: flex;
  flex-direction: column;
  width: 800px;
  border: 1px solid red;
  align-items: center;
}
.child {
  border: 1px solid blue;
  max-width: 800px;
  @media (max-width:960px){ // <--- Here we go. The text won't wrap ? we will make it break !
    max-width: 600px;
  }
  @media (max-width:600px){
    max-width: 400px;
  }
  @media (max-width:400px){
    max-width: 150px;
  }
}

<div class="parent">
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
  <div class="child">
    Lorem Ipsum is simply dummy text of the printing and typesetting industry
  </div>
</div>

-1

Ho avuto un problema simile con immagini straripanti in un involucro flessibile.

L'aggiunta di uno flex-basis: 100%;o flex: 1;al figlio straripante ha funzionato per me.


Questa soluzione è già stata fornita, anni fa, e ne abbiamo solo bisogno, quindi evita di pubblicare risposte duplicate.
Ason

-4

Perché usare una soluzione complicata se funziona anche una semplice?

.child {
  white-space: normal;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.