У меня есть веб-страница с эластичным макетом, который меняет свою ширину, если размер окна браузера изменяется.
В этом макете есть заголовки ( h2
), которые будут иметь переменную длину (на самом деле это заголовки блогов, которые я не контролирую). В настоящее время - если они шире окна - они разбиты на две строки.
Существует ли элегантное, протестированное (кросс-браузерное) решение - например, с помощью jQuery - которое сокращает innerHTML этого тега заголовка и добавляет «...», если текст будет слишком широким, чтобы поместиться в одну строку на текущем экране / ширина контейнера?
Ответы:
У меня есть решение, работающее в FF3, Safari и IE6 + с одним и многострочным текстом
jquery.ellipsis.js
источник
Следующее CSS-решение для усечения текста в одну строку работает со всеми браузерами, перечисленными на http://www.caniuse.com на момент написания, за исключением Firefox 6.0. Обратите внимание, что JavaScript совершенно не нужен, если вам не требуется поддержка переноса многострочного текста или более ранних версий Firefox.
Если вам нужна поддержка более ранних версий Firefox, проверьте мой ответ на этот другой вопрос .
источник
Я построил этот код, используя ряд других постов, со следующими улучшениями:
display: block
в стиль, поэтому пролет работаетCSS:
jquery.ellipsis.js
источник
Мой ответ поддерживает только однострочный текст. Ознакомьтесь с комментарием gfullam ниже для многострочного форка, он выглядит довольно многообещающе.
Я несколько раз переписывал код из первого ответа, и я думаю, что он должен быть самым быстрым.
Сначала он находит «предполагаемую» длину текста, а затем добавляет или удаляет символ, пока ширина не станет правильной.
Используемая логика показана ниже:
После того, как «приблизительная» длина текста найдена, символы добавляются или удаляются, пока не будет достигнута желаемая ширина.
Я уверен, что это нуждается в некоторой настройке, но вот код:
источник
На всякий случай, если вы окажетесь здесь в 2013 году - вот чистый подход CSS, который я нашел здесь: http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Это работает хорошо.
источник
text-overflow
не работает сtextarea
элементами (по состоянию на 2015). Если вам нужна поддержка,textarea
вы можете добиться ее, изменив принятый ответ или воспользовавшись этим ответвлением .Я сделал действительно крутой плагин jQuery для обработки всех разновидностей многоточия текста, который называется ThreeDots @ http://tpgblog.com/threedots
Он гораздо более гибкий, чем CSS-подходы, и поддерживает гораздо более сложные, настраиваемые способы поведения и взаимодействия.
Наслаждаться.
источник
Более гибкий плагин jQuery, позволяющий вам сохранить элемент после многоточия (например, кнопку «read-more») и обновлять onWindowResize. Он также работает вокруг текста с разметкой:
http://dotdotdot.frebsite.nl
источник
Плагин trunk8 jQuery поддерживает несколько строк и может использовать любой html, а не только символы многоточия, для суффикса усечения: https://github.com/rviscomi/trunk8
Демо здесь: http://jrvis.com/trunk8/
источник
На самом деле в CSS есть довольно простой способ сделать это, используя тот факт, что IE расширяет это нестандартными и поддерживает FF
:after
Вы также можете сделать это в JS, если захотите, проверив scrollWidth цели и сравнив ее с шириной родительской, но imho это менее надежно.
Изменить: это, видимо, более развито, чем я думал. Поддержка CSS3 может вскоре появиться, и вам будут доступны некоторые несовершенные расширения.
Последнее хорошо читать.
источник
Я недавно сделал что-то подобное для клиента. Вот версия того, что я для них сделал (пример протестирован во всех последних версиях браузера на Win Vista). Не идеально все вокруг доски, но может быть легко подправлено.
Демо: http://enobrev.info/ellipsis/
Код:
источник
Ну, одно простое решение, которое не совсем добавляет «...», но предотвращает разбиение <h2> на две строки, заключается в добавлении этого бита css:
Я подумал об этом и придумал это решение: вам нужно обернуть текстовое содержимое вашего тега h2 другим тегом (например, span) (или, альтернативно, обернуть h2s чем-то, имеющим заданную высоту), а затем Вы можете использовать этот вид javascript, чтобы отфильтровать ненужные слова:
источник
Вот еще одно решение JavaScript. Работает очень хорошо и очень быстро.
https://github.com/dobiatowski/jQuery.FastEllipsis
Протестировано на Chrome, FF, IE на Windows и Mac.
источник
Есть решение для многострочного текста с чистым CSS. Он называется
line-clamp
, но работает только в браузерах webkit. Однако есть способ имитировать это во всех современных браузерах (все более новые, чем в IE8). Кроме того, он будет работать только на сплошном фоне, потому что вам нужно фоновое изображение, чтобы скрыть последние слова последней строки. Вот как это происходит:Учитывая этот HTML:
Вот CSS:
ellipsis_bg.png - изображение того же цвета, что и фон, оно будет иметь ширину около 100 пикселей и иметь ту же высоту, что и высота строки.
Это не очень красиво, так как ваш текст может быть вырезан в середине буквы, но в некоторых случаях это может быть полезно.
Ссылка: http://www.css-101.org/articles/line-clamp/line-clamp_for_non_webkit-based_browsers.php
источник
Многострочный многоточечный чистый CSS для текстового контента:
Пожалуйста, проверьте фрагмент для живого примера.
источник
Это похоже на Алекс, но делает это во время регистрации, а не линейно, и принимает параметр maxHeight.
источник
Существует простое решение jQuery от Devon Govett :
https://gist.github.com/digulla/5796047
источник
Я переписал функцию Алекса для использования в библиотеке MooTools. Я изменил его немного на переход слова, вместо того чтобы добавить многоточие в середине слова.
источник
Я не смог найти скрипт, который работал бы точно так, как я хотел, и мой jQuery - довольно много вариантов, которые можно было бы установить с большим количеством :)
https://github.com/rmorse/AutoEllipsis
источник
Я был немного удивлен поведением CSS, хотя.
Если я не предоставил ширину контролю, к которому мне нужно было привязать многоточие, это не помешало моей причине. Является ли ширина обязательным свойством, которое будет добавлено ??? Пожалуйста, оставьте свои мысли.
источник
ДЕЛАЙТЕ ЭЛЛИПСИС, ИСПОЛЬЗУЯ ТОЛЬКО CSS
* Этот код работает в большинстве современных браузеров. Если у вас возникли проблемы с Opera и IE (что, вероятно, не сработает), добавьте их в стиле:
* Эта функция является частью CSS3. Его полный синтаксис:
источник
Вот хорошая библиотека виджетов / плагинов со встроенным многоточием: http://www.codeitbetter.co.uk/widgets/ellipsis/ Все, что вам нужно сделать, это сделать ссылку на библиотеку и вызвать следующее:
источник
Вы можете сделать это намного проще только с помощью css, например: sass mode
и у вас есть многоточие;)
источник
Точно так же, как @acSlater, я не мог найти что-то для того, что мне было нужно, поэтому я сделал свой собственный. Совместное использование в случае, если кто-то еще может использовать:
Метод: Использование: Код и демонстрационная ссылка: https://gist.github.com/cemerson/10368014источник
источник