#android #html #css #ionic-framework
#Android #HTML #css #ionic-framework
Вопрос:
У меня возникла проблема, когда мне нужно, чтобы div увеличивался в соответствии с текстом, который находится внутри него. Текст взят из пользовательского ввода, поэтому он динамический и может содержать новые строки. Итак, подведем итог:
- В div не должно быть
width:100%
- Текст должен быть обернут в случае очень длинного слова
- Текст может содержать новые строки
Простой white-space: pre-wrap;
и word-break: break-word;
в большинстве случаев справился с задачей, но проблема в том, что с некоторыми шрифтами (я использую ionic, поэтому Android использует «Noto без иврита») последний символ начинает новую строку.
Я смог сузить проблему и создать это перо
Я предполагаю, что это может быть неожиданная ширина некоторых символов, кто-нибудь может придумать исправление или обходной путь?
Комментарии:
1. Divs ведут себя так естественно. Удаление
word-break: break-word;
фактически исправило его в вашем pen. Я не пробовал использовать другие шрифты.2. Да, это исправило бы это, но я должен иметь
word-break: break-word;
, поскольку пользователь может ввести действительно длинное слово, и в этом случае слово не будет видно. Помните, что он запускается в веб-браузере внутри смартфона, поэтому ширина небольшая3. Итак, текст, который находится внутри div, на самом деле является пользовательским вводом? Вы должны добавить это к вопросу. Вам, скорее всего, придется пойти на компромисс между разрешением пользователю прокручивать по горизонтали, разрывая слово и используя width: 100% или элемент, используемый для вывода текста.
Ответ №1:
Для этого конкретного пера, которое вы предоставили, удаление white-space: pre-wrap;
или word-break: break-word;
устраняет проблему, поскольку каждый из них отменяет эффект друг друга. Тем не менее, я рекомендую удалить ваш white-space: pre-wrap
.
Сохранение white-space: pre-wrap
будет таким, как если бы мы говорили «сохранить все как в white-space: normal
, но сохранить пробелы, исходящие из HTML буквально» В соответствии со спецификациями MDN:
Последовательности пробелов сохраняются. Строки прерываются символами новой строки, тегами «br» и, при необходимости, для заполнения полей строк.
Комментарии:
1. Но если текст содержит новую строку, он не будет отображаться
Ответ №2:
Оказывается, это проблема с этими конкретными шрифтами. Каким-то образом ширина символов вычисляется неправильно, и большинство предложений в конечном итоге имеют меньшую ширину, чем им нужно.
Изменение шрифта на OpenSans иврит (который выглядит так же) решил эту проблему для меня