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.



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


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.


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.


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;
}

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;

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>


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.


0

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

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

Semoga berhasil!


0
.grandparent{
   display: table;
}

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

Ini berhasil untuk saya.


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>

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


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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.