Как я могу сделать так, чтобы последовательные промежутки nowrap были обернуты как отдельные элементы?

У меня есть блок текста, в котором я хочу сгруппировать слова по парам, чтобы два слова не разбивались. Существует непреднамеренное последствие, когда у вас есть два тега <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;, когда все интервалы находятся в одной строке, и добавлении интервала с помощью &nbsp;внутри интервала.

<style>
  .nowrap {
    white-space: nowrap;
    display: inline-block;
  }
</style>

<div class = "block-of-text" style = "max-width: 550px; border: solid 1px red">
  One-two&nbsp;<span class = "nowrap">Buckle-my-shoe,&nbsp;</span><span class = "nowrap">Three-four&nbsp;</span><span class = "nowrap">Shut-the-door,&nbsp;</span><span class = "nowrap">Five-six&nbsp;</span><span class = "nowrap">Pick-up-sticks,&nbsp;</span><span class = "nowrap">Seven-eight&nbsp;</span><span class = "nowrap">Lay-them-straight,&nbsp;</span><span class = "nowrap">Nine-ten&nbsp;</span><span class = "nowrap">Do-it-again.</span>
</div>

Дополнительная информация о решении: Если вы поместите " "(пробел) или &nbsp; за пределы промежутка, он не будет работать должным образом или вы получите 2 пробела между промежутками. Также пробел в конце строки не наблюдается, когда тег <span> находится на новой строке.

TLDR; Решение было отредактировано выше.

jsfiddle.net/debabrata/p5y7dk4v/1. Я создал эту скрипку. Кажется, это работает. Не так ли?
Debabrata Patra 28.05.2019 08:08

Спасибо @DebabrataPatra Они все еще связываются, если <span> находится в той же строке, что и вторая <span> Кажется, это работает, если вы поместите все на свою строку, а затем снова запустите скрипку.

James Essex 28.05.2019 11:50

Он по-прежнему не работает должным образом, и мой НАСТОЯЩИЙ настоящий веб-сайт использует Angular 7 с начальной загрузкой, и я обслуживаю его в обычном режиме и использую Chrome и Firefox, чтобы увидеть компиляцию. Я вижу, что все пролеты имеют правильный css, закрыты, и с вкладки «вычислено» им ничего не мешает. Я в тупике, хотя скрипт JS может работать так, как задумано, когда «только разделяющие строки»

James Essex 28.05.2019 12:01

Как отвечает @isherwood ниже, вам действительно нужно убрать пробелы из промежутков. Еще одна альтернатива - забыть о промежутках и использовать неразрывные дефисы.

Stephen P 28.05.2019 22:34

Как добавляются пролеты? Если вы делаете это вручную, вы можете просто поместить пробелы между в промежутки, а не внутри них. Если они автоматически добавляются (каким-то образом по волшебству), вы должны иметь возможность настроить это, чтобы, опять же, поместить пространство между, а не внутри промежутков. Если ваша цель состоит в том, чтобы «убедиться, что любое слово, написанное через дефис...», а пробелы — это ваша попытка, можете ли вы просто ввести его по-другому? Почему бы нет? Я думаю, что эти соображения важны для решения вашей проблемы.

Stephen P 28.05.2019 22:46
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
5
1 333
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы не закрываете 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>, он должен был быть близок к моему вопросу, но не решает мою проблему... Я отредактировал его в своем вопросе, но все еще сталкиваюсь с той же проблемой, и мой НАСТОЯЩИЙ настоящий веб-сайт код по-прежнему показывает ту же проблему даже после четырехкратной проверки, закрыты ли все диапазоны.

James Essex 28.05.2019 07:59

@JamesEssex проверьте один раз пробел: nowrap; css не переопределяет другие css на вашем ДЕЙСТВИТЕЛЬНОМ реальном веб-сайте

Hiren Vaghasiya 28.05.2019 08:05

Он по-прежнему не работает должным образом, и мой НАСТОЯЩИЙ настоящий веб-сайт использует Angular 7 с начальной загрузкой, и я обслуживаю его в обычном режиме и использую Chrome и Firefox, чтобы увидеть компиляцию. Я вижу, что все пролеты имеют правильный css, закрыты, и с вкладки «вычислено» им ничего не мешает. Я в тупике, хотя скрипт JS может работать так, как задумано, когда «только разделяющие строки»

James Essex 28.05.2019 12:00
Ответ принят как подходящий

Используйте 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>

Интересное примечание: делая это, вы получите (в зависимости от ширины) некоторые места, где слова будут визуально сливаться вместе, например «Пять-шесть-палочек-пикапов», даже если копировать вставить будет включать пробел.

Stephen P 28.05.2019 22:38

Да, я не менял HTML. Этого не происходит, когда между всеми элементами <span> есть пробел. (Сейчас я отредактирую его, чтобы скорректировать это.) Кроме того, к каждому можно добавить небольшое правое поле.

Kravimir 28.05.2019 23:21

ТАК, что это 100% работает, ЕСЛИ вы поместите каждый диапазон в одну строку, а также добавите &nbsp; после каждого текста и удалите пробелы между каждым диапазоном. Angular также понимает это и правильно работает на своем сервере.

James Essex 29.05.2019 01:55

Это происходит потому, что без пробелов между интервалами они действуют как символы в одном слове. Вам нужно ставить пробелы между пролетами, а не внутри них.

.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>

Другие вопросы по теме