Многоточие CSS для переполнения текста не работает в Grid / Flex

Я не могу заставить многоточие text-overflow работать в сетке CSS. Текст усечен, но точки с многоточием не отображаются. Вот мой CSS:

.grid {
  display: grid;
  margin: auto;
  width: 90%;
  grid-template-columns: 2fr 15fr
}

.gridItem {
  border: 1px solid red;
  display: flex;
  height: calc(50px + 2vw);
  align-items: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div class = "grid">
  <div class = "gridItem">Why no ellipsis on this div?</div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
</div>

дисплей: гибкий; не смешивается с многоточием, предполагается, что теги будут содержать не обычный текст. Может быть причиной того, что многоточие не срабатывает. flex также является сеточной системой :(

G-Cyrillus 15.07.2018 20:53
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
7
1
3 966
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема, похоже, в том, что на .gridItem есть стиль display: flex;, если его снять, он работает. Если вам нужно иметь display: flex; на элементах вашей сетки, то эта статья может быть полезной: https://css-tricks.com/flexbox-truncated-text/

Ответ принят как подходящий

Чтобы заставить работать многоточие, вам нужно нацелить текст, а не контейнер.

В вашем коде вы устанавливаете многоточие на гибком контейнере (элементе сетки):

.gridItem {
    display: flex;
    align-items: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    height: calc(50px + 2vw);
    border:1px solid red;
}

Дочерним элементом контейнера является текст. За исключением того, что вы не можете применить какой-либо CSS непосредственно к тексту, потому что это анонимный гибкий элемент (т.е. гибкий элемент без определенных тегов вокруг него). Поэтому вам нужно обернуть текст в элемент, а затем применить код с многоточием.

Из этого:

<div class = "gridItem">Why no ellipsis on this div?</div>

К этому:

<div class = "gridItem"><span>Why no ellipsis on this div?</span></div>

Тогда вам придется бороться с алгоритм минимального размера гибких элементов. Это правило, установленное по умолчанию, гласит, что гибкий элемент не может быть меньше его содержимого по главной оси. Решение этой проблемы - установить для гибкого элемента значение min-width: 0, которое переопределяет значение по умолчанию min-width: auto.

.grid {
  display: grid;
  margin: auto;
  width: 90%;
  grid-template-columns: 2fr 15fr;
}

.gridItem {
  display: flex;
  align-items: center;
  height: calc(50px + 2vw);
  border: 1px solid red;
  min-width: 0;
}

.gridItem > span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div class = "grid">
  <div class = "gridItem"><span>Why no ellipsis on this div?</span></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
  <div class = "gridItem"></div>
</div>

пересмотренный код

Эти сообщения содержат более подробные объяснения:

Другие вопросы по теме