К сожалению, я не думаю, что есть способ сделать все, что вы хотите, с чистым CSS.
ОБНОВЛЕНИЕ: удалены пробелы перед точками в решении JS.
Если вы можете использоватьJavaScript вы можете обработать содержимое тега code
, чтобы отключить перенос слов с дефисами, и вы можете обернуть каждый блок, начиная с точки в inline-block
.
Следующий код разбивает содержимое каждого code
тег в список блоков, которые начинаются с пробела или точки.Каждый блок переносится с интервалом, который предотвращает перенос, а блоки, начинающиеся с точки, дополнительно помечаются как display: inline-block;
.Это должно обеспечить поведение, которое вы ищете, и дополнительно сохранить весь контент при копировании текста.
CSS:
.no-wrap-hyphen {
white-space: nowrap;
}
.wrap-period {
display: inline-block;
}
JavaScript (запустите эту функцию при загрузке окна и изменении размера):
function wrapPeriodsNotHyphens() { // run on window load or resize
var codes = document.getElementsByTagName( "code" );
for ( var i = 0; i < codes.length; i++ ) {
currentCode = codes[ i ].innerHTML.split(/(?=[ .])/); // split by spaces and periods
for ( var c = 0; c < currentCode.length; c++ ) {
// surround each item with nowrap span
currentCode[ c ] = '<span class="no-wrap-hyphen">' + currentCode[ c ] + '</span>';
if ( currentCode[ c ].indexOf( '.' ) > -1 ) {
// add a zero size space at the start for periods
currentCode[ c ] = '<span class="wrap-period">' + currentCode[ c ] + '</span>';
}
}
codes[ i ].innerHTML = currentCode.join('');
}
}