Определение разрывов слов не выполняется одинаково в разных браузерах или в разных спецификациях. Я считаю, что Firefox - это единственный последний релиз, который отформатирует так, как вы ожидаете. В некоторых ситуациях Chrome также вырвется из родительского окна.
Таким образом, для получения согласованного вывода в HTML должны быть предусмотрены подсказки вручную.
В конкретном примере один из способов обойти это - использовать символ Юникод для Zero Width Space. Это разобьет ваш код без дополнительного пространства.
<span class="nowrap">foo bar</span>​
<span class="nowrap">moo bahh</span>
Если по какой-то причине вы не можете использовать код Unicode, вы можете попробовать html-сущность  
, которая является тонким пробелом. Это, однако, добавит дополнительное пространство в ваш вывод html.
Хотя это кажется проблемой, когда между браузерами должна быть согласованность, http://www.cs.tut.fi/~jkorpela/html/nobr.html цитирует несколько технических документов и их различия в том, как следует разбивать слова, в дополнение к различным интерпретациям браузером этих документов. Я предполагаю, что общая стратегия каждого браузера играет роль в этом конкретном примере.
За исключением предварительно отформатированных элементов -, каждый элемент структурирования блока рассматривается как абзац, беря символы данных в его содержимом и содержимое его дочерних элементов, объединяя их и разделяя результат на слова, разделенные пробелом, табуляция или запишите конечные символы (и, возможно, дефисные символы). Последовательность слов набирается как абзац, разбивая его на строки.
Источник: HTML 2.0 , раздел Символы, слова и абзацы
В HTML есть два типа дефисов: простой дефис и мягкий дефис. Простой дефис должен интерпретироваться пользовательским агентом как просто другой символ. Мягкий дефис сообщает агенту пользователя, где может произойти разрыв строки.
Источник: HTML 4.0 , раздел Перенос слов
см. Технический отчет Unicode # 14 : Свойства разрыва строки (предупреждение о техническом состоянии!), Которые, кажется, допускают «прямой разрыв» между буквенно-цифровым символом и открывающей скобкой, например. Хотя это вряд ли хорошая идея в целом. Это даже допустило бы очень нечестные (и) рэб-брейки!