Переполнение текста в CSS: многоточие; не работает?

265

Я не знаю, почему этот простой CSS не работает...

.app a {
  height: 18px;
  width: 140px;
  padding: 0;
  overflow: hidden;
  position: relative;
  margin: 0 5px 0 5px;
  font: bold 15px/18px Arial;
  text-align: center;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #FFF;
}
<div class="app">
  <img src=""></img>
  <h1></h1>
  <a href=""></a>
</div>
Показать ещё 3 комментария
Теги:
ellipsis
overflow

12 ответов

722
Лучший ответ

text-overflow:ellipsis; работает только в следующих случаях:

  • Ширина элемента должна быть ограничена в px (пикселей). Ширина в % (в процентах) не будет работать.
  • Элемент должен иметь overflow:hidden и white-space:nowrap.

Причина, по которой у вас возникают проблемы, состоит в том, что элемент width вашего элемента a не ограничен. У вас есть параметр width, но поскольку для элемента установлено значение display:inline (т.е. Значение по умолчанию), оно игнорирует его, и ничто другое не ограничивает его ширину.

Вы можете исправить это, выполнив одно из следующих действий:

  • Установите элемент display:inline-block или display:block (возможно, первый, но зависит от ваших потребностей макета).
  • Установите один из его элементов контейнера в display:block и дайте этому элементу фиксированный width или max-width.
  • Задайте элемент float:left или float:right (возможно, первый, но опять же, либо должен иметь тот же эффект, что и многоточие).

Я предлагаю display:inline-block, так как это будет иметь минимальное влияние на ваш макет; он очень похож на display:inline, который он использует в настоящее время в отношении макета, но не стесняйтесь экспериментировать с другими точками; Я попытался дать как можно больше информации, чтобы помочь вам понять, как эти вещи соединяются вместе; большая часть понимания CSS - это понимание того, как различные стили работают вместе.

Надеюсь, что это поможет.

Здесь jsfiddle с вашим кодом с добавлением display:inline-block, чтобы показать, насколько вы были близки.

Полезные ссылки:

  • 3
    Спасибо за подробное объяснение. Я пробовал разные варианты отображения, но я думаю, что это было, когда у меня не было пробела: nowrap; задавать
  • 0
    Не работает для меня: jsfiddle.net/ofrj55j4/18
Показать ещё 19 комментариев
6

Также убедитесь, что word-wrap установлен в нормальное состояние для IE10 и ниже.

Стандарты, указанные ниже, определяют это поведение свойства как зависящее от настройки свойства "text-wrap". Тем не менее, параметры wordWrap всегда эффективны в Windows Internet Explorer, потому что Internet Explorer не поддерживает свойство "text-wrap".

Следовательно, в моем случае word-wrap был установлен на break-word (унаследованный или по умолчанию?), заставляя text-overflow работать в FF и Chrome, но не в IE.

ms информация об атрибуте word-wrap

4

anchor, span... теги встроенные элементы по умолчанию. В случае встроенных элементов свойство width не работает. Таким образом, вы должны преобразовать свой элемент в элементы inline-block или block level

  • 0
    Это полезное техническое объяснение
3

Включите четыре строки, написанные после того, как информация для эллипсиса будет работать

.app a {
        height: 18px;
        width: 140px;
        padding: 0;
        position: relative;
        margin: 0 5px 0 5px;
        font: bold 15px/18px Arial;
        text-align: center;
        text-decoration: none;
        color: #FFF;

        /* 
           **Note:**The Below 4 Lines are necessary 
           for ellipsis to work
        */
        display: block; // change it as per your requirement
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;

    }
2

Принятый ответ потрясающий. Тем не менее, вы все равно можете использовать % width и достигнуть text-overflow: ellipsis. Решение прост:

display: inline-block; /* for em, a, span, etc (inline by default) */
text-overflow: ellipsis;
width: calc (80% - 0px); /* killer line hahaha */

Он выглядит всякий раз, когда вы используете calc, конечное значение отображается в абсолютных пикселях, что, следовательно, преобразует 80% - 0px в нечто вроде 800px для 1000px -width. Поэтому вместо использования width: [YOUR PERCENT]%, используйте width: calc([YOUR PERCENT]% - 0px).

  • 3
    кажется, даже calc(80%) работает
2

Добавьте display: block; или display: inline-block; в #User_Apps_Content .DLD_App a

демо

  • 0
    Я только что проверил, и он обрезает: /
1

В bootstrap 4 вы можете добавить класс .text-truncate для усечения текста с помощью многоточия.

<script src="/jquery.min.js"></script>
<link href="/bootstrap.min.css" rel="stylesheet" />
<script src="/bootstrap.min.js"></script>

<!-- Inline level -->
<span class="d-inline-block text-truncate" style="max-width: 250px;">
  The quick brown fox jumps over the lazy dog.
</span>
1

Вы просто добавляете одну строку css:

.app a {
   display: inline-block;
}
0

Поэтому, если вы дойдете до этого вопроса из-за проблем с попыткой заставить многоточие работать в контейнере display: flex, попробуйте добавить min-width: 0 к внешнему контейнеру, который переполняет его родителя, даже если вы уже установили overflow: hidden для это и посмотрим, как это работает для вас.

Более подробная информация и рабочий пример этого кодекса от aj-foster. Полностью добился цели в моем случае.

  • 1
    Отличное решение - это также единственное опубликованное здесь, которое работает для position: sticky элемент на display: flex контейнер.
  • 0
    Я рад узнать, что помог кто-то еще! Спасибо
0

Я должен был сделать несколько длинных описаний эллипса (возьмите только одну полосу), будучи отзывчивыми, поэтому мое решение состояло в том, чтобы разрешить перенос текста (вместо white-space: nowrap), а вместо фиксированной ширины я добавил фиксированную высоту:

span {
  display: inline-block;
  line-height: 1rem;
  height: 1rem;
  overflow: hidden;
  // OPTIONAL LINES
  width: 75%;
  background: green;
  //  white-space: normal; default
}
<span>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Commodi quia quod reprehenderit saepe sit. Animi deleniti distinctio dolorum iste molestias reiciendis saepe. Ea eius ex, ipsam iusto laudantium natus obcaecati quas rem repellat temporibus! A alias at, atque deserunt dignissimos dolor earum, eligendi eveniet exercitationem natus non, odit sint sit tempore voluptate. Commodi culpa ex facere id minima nihil nulla omnis praesentium quasi quia quibusdam recusandae repellat sequi ullam, voluptates. Aliquam commodi debitis delectus magnam nulla, omnis sequi sint unde voluptas voluptatum. Adipisci aliquam deserunt dolor enim facilis libero, maxime molestias, nemo neque non nostrum placeat reprehenderit, rerum ullam vel? A atque autem consectetur cum, doloremque doloribus fugiat hic id iste nemo nesciunt officia quaerat quibusdam quidem quisquam similique sit tempora vel. Accusamus aspernatur at au
</span>
0

Вы также можете добавить float: left; внутри этого класса #User_Apps_Content.DLD_App a

-2

Напишите их в своем правиле css.

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
  • 0
    Вы также можете просмотреть это, jsfiddle.net/ManiAnand/5v6pfy9w
  • 0
    Если ширина может быть указана, мой ответ не будет ошибочным. Все, что вы только что добавили в мой ответ блок отображения, я написал фрагмент, а не все коды, так что можно добавить другие вещи, но это не имеет никакого отношения к проблеме !! Можете ли вы указать, как мой ответ не является правильным?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню