css ломать слова только если пробелов нет

У меня есть этот код:

.mydiv {
  display: table;
  table-layout: fixed;
  width: auto;
  max-width: 448px;
  height: 56px;
}

.mydiv span {
  display: table-cell;
  vertical-align: middle; 
  overflow: hidden;
}
<div class="mydiv">
  <span></span>
</div>

В большинстве случаев это работает нормально, так как по умолчанию, если текст длиннее строки, строка разрывается в ближайшем пространстве, а слова никогда не разделяются на полслово. Хорошо.

Но в единственном случае, когда в предложении нет пробелов (это никогда не должно происходить, но люди - это люди), интерфейс будет нарушен, и длинное слово останется в одной строке.

Есть ли способ расставить приоритеты css так, чтобы, если есть пробелы, предложение обрезалось без обрезания слов (word-wrap: break-word;), но если слово больше строки, обрыв строки, обрезание слова (word-break: break-all;), чтобы избежать визуальной катастрофы. В этой последовательности.

До сих пор, если я использую "word-wrap: break-word;", одно длинное слово останется в одной строке независимо от его длины, и если я использую "word-break: break-all;" слова будут разбиты, даже если до этого есть свободные места. Ни одно из этих стандартных решений не помогает.

Любая помощь будет оценена.

Я бы хотел решение CSS, желательно, но если это невозможно, то решение JS/jQuery тоже подойдет.

PS: мне нужно, чтобы div имел автоматическую ширину с max-width, и мне нужно, чтобы span оставался ячейкой таблицы.

1 ответ

Решение

Вы можете сделать это с word-wrap: break-word но вы должны установить значение width собственность на 100% включить отзывчивость:

.mydiv {
  display: table;
  table-layout: fixed;
  width: 100%; /* responsiveness */
  max-width: 448px;
  height: 56px;
  border: 1px solid; /* just for demo */
}

.mydiv span {
  display: table-cell;
  vertical-align: middle; 
  overflow: hidden;
  word-wrap: break-word; /* added */
}
<div class="mydiv">
  <span>looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong word</span>
</div>
<br>
<div class="mydiv">
  <span>short word ... short word ... short word ... short word ... short word ... short word ... short word ... short word ...</span>
</div>

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