Текст у контейнері flex не вкладається в IE11


176

Розглянемо наступний фрагмент:

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

У Chrome текст текст завершується як очікується:

введіть тут опис зображення

Але в IE11 текст не завершується :

введіть тут опис зображення

Це відома помилка в IE? (якщо так, вказівник буде оцінено)

Чи є відомий спосіб вирішення?


На подібне запитання немає однозначної відповіді та офіційного вказівника.



1
Проблема зникає, коли я видаляю align-items: centerз батьківського елемента. Це, здається, є причиною цього
Натан Пер'є

Відповіді:


280

Додайте це до коду:

.child { width: 100%; }

Ми знаємо, що дитина на рівні блоку повинна зайняти всю батьківську ширину.

Chrome це розуміє.

IE11 з будь-якої причини хоче явного запиту.

Використання flex-basis: 100%або flex: 1також працює.

Примітка: Іноді потрібно буде сортувати різні рівні структури HTML, щоб визначити, який контейнер отримує width: 100%. Текст обгортання CSS не працює в IE


13
Мені довелося додати ширину: 100%; до батьків. Здається, ця помилка має різні виправлення залежно від контексту. Зітхніть IE!
Денніс Джонсен

8
Скоріше використовуйте "max-width: 100%" на .child.
Тайлер

2
Я створюю таблицю за допомогою флексу (кожен рядок - це флекс, у нього діти:. flex: 1 1 50%; display: flex; align-items: center;Не дивно, що IE виходить з ладу під час перенесення текстів у клітинки довгих текстів. Налаштування width:100%працює, але налаштування min-width: 100%не потрібно! Це повинно, але це не так ' т (як і всі IE), так що я спробував max-width: 99%, і дивно, що він робить роботу , я думаю , що з допомогою. width:100%може бути краще?
kumarharsh

1
Мені довелося зняти flex-direction: columnз батьків, щоб це працювало.
дман

1
Це питання видається ексклюзивним для згинання стовпців. Не буває з гнучкими рядами.
Дражен Беловук

40

У мене була така ж проблема, і справа в тому, що елемент не адаптував свою ширину до контейнера.

Замість того , щоб використовувати width:100%, бути послідовним (не змішувати з плаваючою моделі і гнучку модель) і використовувати прогинається, додавши наступне:

.child { align-self: stretch; }

Або:

.parent { align-items: stretch; }

Це працювало для мене.


2
Так, ця відповідь теж має сенс (і, ймовірно, більш правильна, ніж ширина). В одній з моїх конструкцій встановити ширину: 100% неможливо, і це рішення працює добре.
кумархарш

11

Як запропонував Тайлер в одному з коментарів тут, використовуючи

max-width: 100%;

на дитину може працювати (працював на мене). Використання align-self: stretchпрацює лише у тому випадку, якщо ви не використовуєте align-items: center(що я зробив). width: 100%працює лише в тому випадку, якщо у вашому флексі не є кілька дітей, які ви хочете показати поруч.


Максимальна ширина працювала для мене, коли застосовувався до того ж контейнера, на який було розміщено вирівнювання елементів: flex-start.
Гермс

7

Привіт для мене, я повинен був застосувати 100% ширину до його бабусі та дідуся. Не його дочірні елементи.

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

У мене був "ширина: авто;" на бабусь і дідусь. Перехід на 100% зафіксував це для мене.
jensanity5000

2

Якось усі ці рішення для мене не спрацювали. Явно є помилка в IE flex-direction:column.

Я працював лише після видалення flex-direction:

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

0

Запропоновані рішення не допомогли мені ".child {width: 100%;}", оскільки у мене була більш складна розмітка. Однак я знайшов рішення - видаліть "align-items: center;", і він працює і в цьому випадку.

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


Видаляти не потрібно align-items: center. Див stackoverflow.com/a/39365207/630170
kumarharsh

0

Єдиний спосіб, коли я на 100% послідовно змогла уникнути помилки стовпців у напрямку згинання - використовувати медіа-запит мінімальної ширини для призначення максимальної ширини дочірньому елементу на екранах розміру робочого столу.

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

Вам потрібно буде встановити природні вбудовані дочірні елементи (наприклад, <span>або <a>) на щось інше, ніж вбудоване (в основному дисплей: блок або дисплей: вбудований блок), щоб виправлення працювало.


0

Я не знайшов тут свого рішення, можливо, хтось стане у нагоді:

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

Удачі!



0

Я теж зіткнувся з цим питанням.

Єдина альтернатива - визначити ширину (або максимальну ширину) в дочірніх елементах. IE 11 трохи дурний, і мені я просто витратив 20 хвилин, щоб реалізувати це рішення.

.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

У мене була подібна проблема із переповненням зображень у гнучкому обгортці.

Додавання flex-basis: 100%;або flex: 1;до переповненого фіксованого дитини працювало на мене.


Це рішення дано вже роки тому, і нам потрібен лише один, тому уникайте публікацій повторюваних відповідей.
Асон

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.