Есть ли хороший способ усечения текста с помощью простого HTML и CSS, чтобы динамический контент мог поместиться в макет с фиксированной шириной и высотой?
Я обрезал серверную сторону по логической ширине (то есть по угаданному количеству символов), но, поскольку «w» шире, чем «i», это имеет тенденцию быть неоптимальным, а также требует от меня переоценки ( и продолжайте настраивать) количество символов для каждой фиксированной ширины. В идеале усечение должно происходить в браузере, который знает физическую ширину отображаемого текста.
Я обнаружил, что в IE есть text-overflow: ellipsis
свойство, которое делает именно то, что я хочу, но мне нужно, чтобы оно было кросс-браузерным. Это свойство кажется (несколько?) Стандартным, но не поддерживается Firefox. Я нашел различные обходные пути, основанные на них overflow: hidden
, но они либо не отображают многоточие (я хочу, чтобы пользователь знал, что контент был усечен), либо отображают его все время (даже если контент не был усечен).
У кого-нибудь есть хороший способ размещения динамического текста в фиксированном макете или усечение на стороне сервера по логической ширине так же хорошо, как я собираюсь сейчас получить?
Ответы:
Обновление:
text-overflow: ellipsis
теперь поддерживается в Firefox 7 (выпущено 27 сентября 2011 года). Ура! Мой оригинальный ответ следует как историческая запись.Джастин Максвелл имеет кросс-браузерное CSS-решение. Однако он имеет недостаток, заключающийся в невозможности выделения текста в Firefox. Проверьте его гостевой пост в блоге Мэтта Снайдера для полной информации о том, как это работает.
Обратите внимание, что этот метод также предотвращает обновление содержимого узла в JavaScript с помощью
innerHTML
свойства в Firefox. Смотрите в конце этого поста для обхода.CSS
ellipsis.xml
содержимое файлаОбновление содержимого узла
Чтобы обновить содержимое узла таким образом, чтобы он работал в Firefox, используйте следующее:
Посмотрите пост Мэтта Снайдера для объяснения того, как это работает .
источник
text-overflow
не указывает на поддержкуoption
элементов (см. Раздел « Применяется к » на msdn.microsoft.com/en-us/library/ms531174(VS.85).aspx ).Март 2014 года: усечение длинных строк с помощью CSS: новый ответ с акцентом на поддержку браузера
Демо на http://jsbin.com/leyukama/1/ (я использую jsbin, потому что он поддерживает старую версию IE).
Свойство CSS -ms-text-overflow необязательно: оно является синонимом свойства CSS text-overflow, но версии IE от 6 до 11 уже поддерживают свойство CSS text-overflow.
Успешно протестировано (на Browserstack.com) в ОС Windows для веб-браузеров:
Firefox: как отметил Саймон Лишке (в другом ответе), Firefox поддерживает свойство CSS для переполнения текста только в Firefox 7 и более поздних версиях (выпущено 27 сентября 2011 г.).
Я дважды проверил это поведение в Firefox 3.0 и Firefox 6.0 (переполнение текста не поддерживается).
Потребуется дальнейшее тестирование в веб-браузерах Mac OS.
Примечание: вы можете захотеть показать всплывающую подсказку при наведении курсора мыши, когда применяется многоточие, это можно сделать с помощью javascript, см. Следующие вопросы: Обнаружение многоточия при переполнении текста в HTML и HTML - как показать подсказку ТОЛЬКО при активированном многоточии
Ресурсы:
источник
Если у вас все в порядке с решением JavaScript, есть плагин jQuery для этого в кросс-браузерном режиме - см. Http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for -Firefox-через-JQuery /
источник
ОК, Firefox 7 реализован
text-overflow: ellipsis
так же, как иtext-overflow: "string"
. Окончательный выпуск запланирован на 2011-09-27.источник
Другим решением проблемы может быть следующий набор правил CSS:
Единственный недостаток вышеупомянутого CSS заключается в том, что он добавляет «...» независимо от того, переполняет ли текст контейнер или нет. Тем не менее, если у вас есть случай, когда у вас есть куча элементов и вы уверены, что контент будет переполнен, это будет более простой набор правил.
Мои два цента. Снимаю шляпу перед оригинальной техникой Джастина Максвелла
источник
position: absolute; right: 0;
(и не забудьтеposition: relative
о реальном элементе, чтобы он работал). Он будет перекрываться с текстом, поэтому вы можете также добавить цвет фона.