Ответ 1
Я боюсь, что это невозможно. Был один раз text-overflow: ellipsis-word
, который будет делать именно это, но он не был реализован в браузерах и был удален из черновиков CSS3.
На моей веб-странице у меня есть div с фиксированной шириной и используя следующий css:
width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
Эллипсис работает, проблема в том, что он сокращает последнее слово, и я хотел, чтобы он поместил многоточие (...) в финале полного слова.
Например, если у меня есть текст: "stackoverflow является лучшим", и если его нужно отрезать ближе к концу, я хочу, чтобы он отображал "stackoverflow is..." вместо "stackoverflow is be be..."
Я боюсь, что это невозможно. Был один раз text-overflow: ellipsis-word
, который будет делать именно это, но он не был реализован в браузерах и был удален из черновиков CSS3.
Конечно, это возможно. (Если вы хотите немного изменить свою разметку.)
https://jsfiddle.net/warphLcr/
<style>
.foo {
/* Make it easy to see where the cutoff point is */
border: 2px solid #999;
padding-right: 18px; /* Always have room for an ellipsis */
width: 120px;
height: 1.1em; /* Only allow one line of text */
overflow: hidden; /* Hide all the text below that line */
background-color: #fff; /* Background color is required */
}
.foo > span {
display: inline-block; /* These have to be inline block to wrap correctly */
position: relative; /* Give the ellipsis an anchor point so it positioned after the word */
background-color: #fff; /* Cover the ellipsis of the previous word with the same background color */
white-space: pre; /* Make sure the only point where wrapping is allowed is after a whole word */
}
.foo > span:after {
position: absolute; /* Take the ellipsis out of the flow, so the next item will cover it */
content: "…"; /* Each span has an ellipsis */
}
.foo > span:last-child:after {
content: ""; /* Except for the last one */
}
</style>
<div class="foo">
<!-- These *must not* have white space between them, or it will collapse to a space before the next word, and the ellipsis will become visible -->
<span>stackoverflow</span><span> is</span><span> the</span><span> best</span>
</div>
Там есть плагин jQuery, который называется dotdotdot.
Он также работает для многострочного текста и адаптивно реагирует, если текст переполняется, например. если размер экрана изменится. Он также включает в себя интеллектуальное усечение путей, например. http://example.com/some/long/.../path.html
Помните о возможности проблем с синхронизацией по ширине в тех случаях, когда ширина изменяется или становится недоступной способами, которые плагин не может ожидать, например, если текст изначально скрыт или он изменяет шрифт (например, загрузка веб-шрифтов на некоторые браузеры). Может потребоваться повторное применение или применение после таких изменений.
Но в 99% случаев плагин кажется быстрым и надежным.