У меня есть блок текста, в котором я хочу сгруппировать слова по парам, чтобы два слова не разбивались. Существует непреднамеренное последствие, когда у вас есть два тега <span></span> подряд, вся строка превращается в раппорт.
Пример: <div><span style = "white-space: nowrap;">...</span><span style = "white-space: nowrap;">...</span></div>
Код ниже является базовым: результат будет перенесен на любой " "(пробел) или "-", который есть в контейнере.
(ПРИМЕЧАНИЕ: Этот пример предназначен для адаптивной веб-страницы.)
<div class = "block-of-text" style = "max-width: 550px">
One-two Buckle-my-shoe, Three-four Shut-the-door,
Five-six Pick-up-sticks, Seven-eight Lay-them-straight,
Nine-ten Do-it-again.
</div>
Результат базовой строки будет выглядеть примерно так.
|--------------- My Web Page ---------------| (550px)
| |
| One-two Buckle-my-shoe, Three-four Shut- |
| the-door, Five-six Pick-up-sticks, Seven-|
| eight Lay-them-straight, Nine-ten Do-it- |
| again. |
| |
|-------------------------------------------|
Я хочу убедиться, что любое слово через дефис, окруженное <span class = "nowrap">...</span>, остается на одной строке.
Ниже моя попытка. (ПРИМЕЧАНИЕ: у меня есть One-two, которые я специально не обрамляю nowrap, чтобы показать, как они не будут включены в результат.)
<style>
.nowrap {
white-space: nowrap;
}
</style>
<div class = "block-of-text" style = "max-width: 550px">
One-two <span class = "nowrap">Buckle-my-shoe, </span>
<span class = "nowrap">Three-four </span><span class = "nowrap">Shut-the-door, </span>
<span class = "nowrap">Five-six </span><span class = "nowrap">Pick-up-sticks, </span>
<span class = "nowrap">Seven-eight </span><span class = "nowrap">Lay-them-straight, </span>
<span class = "nowrap">Nine-ten </span><span class = "nowrap">Do-it-again.</span>
</div>
Мой непреднамеренный результат выглядит примерно так и НЕ является тем, что я хочу. Теги <span> действуют как один гигант nowrap.
|--------------- My Web Page ---------------| (550px)
| |
| One-two |
| Buckle-my-shoe, Three-four Shut-the-door, Five-six Pick-up-sticks, Seven-eight Lay-them-straight, Nine-ten Do-it-again.
| |
|-------------------------------------------|
Что я хочу, чтобы произошло:
|--------------- My Web Page ---------------| (550px)
| |
| One-two Buckle-my-shoe, Three-four |
| Shut-the-door, Five-six Pick-up-sticks, |
| Seven-eight Lay-them-straight, Nine-ten |
| Do-it-again. |
| |
|-------------------------------------------|
Спасибо всем и особенно @Кравимир за помощь в поиске решения:
Это работает при добавлении стиля display: inline-block;, когда все интервалы находятся в одной строке, и добавлении интервала с помощью внутри интервала.
<style>
.nowrap {
white-space: nowrap;
display: inline-block;
}
</style>
<div class = "block-of-text" style = "max-width: 550px; border: solid 1px red">
One-two <span class = "nowrap">Buckle-my-shoe, </span><span class = "nowrap">Three-four </span><span class = "nowrap">Shut-the-door, </span><span class = "nowrap">Five-six </span><span class = "nowrap">Pick-up-sticks, </span><span class = "nowrap">Seven-eight </span><span class = "nowrap">Lay-them-straight, </span><span class = "nowrap">Nine-ten </span><span class = "nowrap">Do-it-again.</span>
</div>
Дополнительная информация о решении: Если вы поместите " "(пробел) или за пределы промежутка, он не будет работать должным образом или вы получите 2 пробела между промежутками. Также пробел в конце строки не наблюдается, когда тег <span> находится на новой строке.
TLDR; Решение было отредактировано выше.
Спасибо @DebabrataPatra Они все еще связываются, если <span> находится в той же строке, что и вторая <span> Кажется, это работает, если вы поместите все на свою строку, а затем снова запустите скрипку.
Он по-прежнему не работает должным образом, и мой НАСТОЯЩИЙ настоящий веб-сайт использует Angular 7 с начальной загрузкой, и я обслуживаю его в обычном режиме и использую Chrome и Firefox, чтобы увидеть компиляцию. Я вижу, что все пролеты имеют правильный css, закрыты, и с вкладки «вычислено» им ничего не мешает. Я в тупике, хотя скрипт JS может работать так, как задумано, когда «только разделяющие строки»
Как отвечает @isherwood ниже, вам действительно нужно убрать пробелы из промежутков. Еще одна альтернатива - забыть о промежутках и использовать неразрывные дефисы.
Как добавляются пролеты? Если вы делаете это вручную, вы можете просто поместить пробелы между в промежутки, а не внутри них. Если они автоматически добавляются (каким-то образом по волшебству), вы должны иметь возможность настроить это, чтобы, опять же, поместить пространство между, а не внутри промежутков. Если ваша цель состоит в том, чтобы «убедиться, что любое слово, написанное через дефис...», а пробелы — это ваша попытка, можете ли вы просто ввести его по-другому? Почему бы нет? Я думаю, что эти соображения важны для решения вашей проблемы.






Вы не закрываете span так что
.nowrap {
white-space: nowrap;
}<div class = "block-of-text" style = "max-width: 550px">
One-two <span class = "nowrap">Buckle-my-shoe, </span>
<span class = "nowrap">Three-four </span><span class = "nowrap">Shut-the-door, </span>
<span class = "nowrap">Five-six </span><span class = "nowrap">Pick-up-sticks, </span>
<span class = "nowrap">Seven-eight </span><span class = "nowrap">Lay-them-straight, </span>
<span class = "nowrap">Nine-ten </span><span class = "nowrap">Do-it-again.</span>
</div>Спасибо, что указали на </span>, он должен был быть близок к моему вопросу, но не решает мою проблему... Я отредактировал его в своем вопросе, но все еще сталкиваюсь с той же проблемой, и мой НАСТОЯЩИЙ настоящий веб-сайт код по-прежнему показывает ту же проблему даже после четырехкратной проверки, закрыты ли все диапазоны.
@JamesEssex проверьте один раз пробел: nowrap; css не переопределяет другие css на вашем ДЕЙСТВИТЕЛЬНОМ реальном веб-сайте
Он по-прежнему не работает должным образом, и мой НАСТОЯЩИЙ настоящий веб-сайт использует Angular 7 с начальной загрузкой, и я обслуживаю его в обычном режиме и использую Chrome и Firefox, чтобы увидеть компиляцию. Я вижу, что все пролеты имеют правильный css, закрыты, и с вкладки «вычислено» им ничего не мешает. Я в тупике, хотя скрипт JS может работать так, как задумано, когда «только разделяющие строки»
Используйте display: inline-block.
span.nowrap {
white-space: nowrap;
display: inline-block;
}<div class = "block-of-text" style = "max-width: 550px">
One-two <span class = "nowrap">Buckle-my-shoe,</span>
<span class = "nowrap">Three-four</span> <span class = "nowrap">Shut-the-door,</span>
<span class = "nowrap">Five-six</span> <span class = "nowrap">Pick-up-sticks,</span>
<span class = "nowrap">Seven-eight</span> <span class = "nowrap">Lay-them-straight,</span>
<span class = "nowrap">Nine-ten</span> <span class = "nowrap">Do-it-again.</span>
</div>Интересное примечание: делая это, вы получите (в зависимости от ширины) некоторые места, где слова будут визуально сливаться вместе, например «Пять-шесть-палочек-пикапов», даже если копировать вставить будет включать пробел.
Да, я не менял HTML. Этого не происходит, когда между всеми элементами <span> есть пробел. (Сейчас я отредактирую его, чтобы скорректировать это.) Кроме того, к каждому можно добавить небольшое правое поле.
ТАК, что это 100% работает, ЕСЛИ вы поместите каждый диапазон в одну строку, а также добавите после каждого текста и удалите пробелы между каждым диапазоном. Angular также понимает это и правильно работает на своем сервере.
Это происходит потому, что без пробелов между интервалами они действуют как символы в одном слове. Вам нужно ставить пробелы между пролетами, а не внутри них.
.nowrap {
white-space: nowrap;
}<div class = "block-of-text" style = "max-width: 550px; border: 1px solid red">
One-two <span class = "nowrap">Buckle-my-shoe,</span> <span class = "nowrap">Three-four</span> <span class = "nowrap">Shut-the-door,</span> <span class = "nowrap">Five-six</span> <span class = "nowrap">Pick-up-sticks,</span> <span class = "nowrap">Seven-eight</span> <span class = "nowrap">Lay-them-straight,</span> <span class = "nowrap">Nine-ten</span> <span class = "nowrap">Do-it-again.</span>
</div>