Teks dalam wadah fleksibel tidak terbungkus dalam IE11

176

Pertimbangkan cuplikan berikut:

.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>

Di Chrome, teksnya sedang membungkus seperti yang diharapkan:

masukkan deskripsi gambar di sini

Tapi, di IE11, teks tidak membungkus :

masukkan deskripsi gambar di sini

Apakah ini bug yang dikenal di IE? (jika ya, sebuah pointer akan dihargai)

Apakah ada solusi yang diketahui?


Pertanyaan serupa ini tidak memiliki jawaban yang pasti dan petunjuk resmi.

Misha Moroshko
sumber
1
Kemungkinan duplikat flexbox IE11 mencegah pembungkusan teks?
Simen S
1
Masalahnya hilang ketika saya menghapus align-items: centerdari elemen induk. Tampaknya itulah yang menyebabkannya
Nathan Perrier

Jawaban:

280

Tambahkan ini ke kode Anda:

.child { width: 100%; }

Kita tahu bahwa anak tingkat blok seharusnya menempati lebar penuh orang tua.

Chrome mengerti ini.

IE11, untuk alasan apa pun, menginginkan permintaan eksplisit.

Menggunakan flex-basis: 100%atau flex: 1juga bekerja.

Catatan: Kadang-kadang perlu untuk memilah-milah berbagai tingkat struktur HTML untuk menentukan wadah mana yang mendapatkan width: 100%. Teks bungkus CSS tidak berfungsi di IE

Michael Benjamin
sumber
13
Saya harus menambahkan lebar: 100%; ke orang tua. Bug ini tampaknya memiliki berbagai perbaikan tergantung pada konteksnya. Huh IE!
Dennis Johnsen
8
Alih-alih menggunakan "max-width: 100%" pada .child.
Tyler
2
Saya membuat tabel menggunakan flex (setiap baris adalah flex, dengan anak-anak memiliki:. flex: 1 1 50%; display: flex; align-items: center;Tidak mengherankan, IE gagal saat kata-membungkus teks panjang dalam sel. Pengaturan width:100%berfungsi, tetapi pengaturan min-width: 100%tidak! Seharusnya, tetapi tidak t (seperti semua hal IE), jadi saya mencoba max-width: 99%, dan mengejutkan, itu tidak bekerja saya pikir menggunakan. width:100%mungkin lebih baik?
kumarharsh
1
Saya harus menghapus flex-direction: columnorang tua agar ini berfungsi.
dman
1
Masalah ini tampaknya eksklusif untuk melenturkan kolom. Tidak terjadi dengan baris fleksibel.
Drazen Bjelovuk
40

Saya memiliki masalah yang sama dan intinya adalah bahwa elemen tersebut tidak menyesuaikan lebarnya dengan wadah.

Alih-alih menggunakan width:100%, konsistenlah (jangan mencampur model mengambang dan model fleksibel) dan gunakan fleksibel dengan menambahkan ini:

.child { align-self: stretch; }

Atau:

.parent { align-items: stretch; }

Ini berhasil untuk saya.

Andry
sumber
2
Ya, jawaban ini masuk akal juga (dan mungkin lebih benar daripada yang lebar). Dalam salah satu desain saya, mengatur lebar: 100% tidak mungkin, dan solusi ini berfungsi dengan baik.
kumarharsh
11

Seperti yang disarankan Tyler dalam salah satu komentar di sini, gunakan

max-width: 100%;

pada anak dapat bekerja (bekerja untuk saya). Menggunakan align-self: stretchhanya berfungsi jika Anda tidak menggunakan align-items: center(yang saya lakukan). width: 100%hanya berfungsi jika Anda tidak memiliki banyak anak di dalam flexbox yang ingin Anda tunjukkan berdampingan.

kawan
sumber
max-width bekerja untuk saya ketika diterapkan pada wadah yang sama yang menyejajarkan item: flex-start ditempatkan.
Herms
7

Hai bagi saya, saya harus menerapkan lebar 100% ke elemen kakek-neneknya. Bukan elemen anaknya.

.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;
}
Angus Grant
sumber
Saya memiliki "width: auto;" pada kakek-nenek. Beralih ke 100% memperbaiki ini untuk saya.
jensanity5000
2

Entah bagaimana semua solusi ini tidak berhasil untuk saya. Jelas ada bug IE di flex-direction:column.

Saya hanya membuatnya berfungsi setelah menghapus flex-direction:

flex-wrap: wrap;
align-items: center;
align-content: center;
Fabian von Ellerts
sumber
0

Solusi yang diajukan tidak membantu saya dengan ".child {width: 100%;}", karena saya memiliki markup yang lebih rumit. Namun, saya menemukan solusi - hapus "align-items: center;", dan itu berfungsi untuk kasus ini juga.

.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>

Petr Varyagin
sumber
Anda tidak perlu menghapus align-items: center. Lihat stackoverflow.com/a/39365207/630170
kumarharsh
0

Satu-satunya cara saya 100% secara konsisten dapat menghindari bug kolom arah-fleksibel ini adalah dengan menggunakan kueri media min-width untuk menetapkan lebar-max ke elemen child pada layar berukuran 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
    }
}

Anda perlu menyetel elemen anak inline secara alami (mis. <span>Atau <a>) ke sesuatu selain inline (terutama tampilan: blokir atau tampilan: blok-inline) agar perbaikan berfungsi.

Daniel Tonon
sumber
0

Saya tidak menemukan solusi saya di sini, mungkin seseorang akan berguna:

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

Semoga berhasil!

Robert Freund
sumber
0
.grandparent{
   display: table;
}

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

Ini berhasil untuk saya.

Shruti Agrawal
sumber
0

Saya juga mengalami masalah ini.

Satu-satunya alternatif adalah menentukan lebar (atau maks-lebar) dalam elemen anak. IE 11 agak bodoh, dan saya, saya hanya menghabiskan 20 menit untuk mewujudkan solusi ini.

.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>
Thomas Aumaitre
sumber
-1

Saya memiliki masalah serupa dengan gambar yang meluap di pembungkus fleksibel.

Menambahkan salah satu flex-basis: 100%;atau flex: 1;ke anak yang kelebihan tetap diperbaiki bekerja untuk saya.

Saša Nikolič
sumber
Solusi ini sudah diberikan, bertahun-tahun yang lalu, dan kami hanya membutuhkannya, jadi hindari memposting jawaban duplikat.
Ason
-4

Mengapa menggunakan solusi yang rumit jika yang sederhana juga berfungsi?

.child {
  white-space: normal;
}
Sergey Aldoukhov
sumber