Как предотвратить разрыв строки при дефисах во всех браузерах
У нас есть ckeditor на нашей CMS. Наши конечные пользователи будут вводить некоторые длинные статьи через этот редактор. Нам нужен способ предотвратить разрыв строки в дефисах на этих статьях.
есть ли в любом случае, чтобы предотвратить разрыв строки в дефисах на всех браузерах?
или у ckeditor есть возможность предотвратить это?
5 ответов:
Я боюсь, что нет более простого способа сделать это надежно, чем разбить текст на " слова "(последовательности небелых символов, разделенных пробелами) и обернуть каждое" слово", содержащее дефис внутри
nobr
разметки. Так что входные данные, какbla bla foo-bar bla bla
будет превращен вbla bla <nobr>foo-bar</nobr> bla bla
.вы можете даже рассмотреть возможность вставки
nobr
разметка всякий раз, когда "слово" содержит что-нибудь, кроме букв и цифр. Причина в том, что некоторые браузеры могут даже ломать строки, такие как" 2/3 " или " f (0)" (смотрите мою страницу на странности разрыва строки в браузерах).
можно использовать
‑
который является неразрывным дефисом Unicode (U+2011).HTML:
‑
или‑
одним из решений может быть использование дополнительной
span
тег иwhite-space
свойства CSS. Просто определите класс следующим образом:.nowrap { white-space: nowrap; }
а затем добавьте промежуток с этим классом вокруг вашего дефисного текста.
<p>This is the <span class="nowrap">anti-inflammable</span> model</p>
этот подход должен работать просто отлично во всех браузерах - багги реализации, перечисленные здесь, предназначены для других значений
white-space
свойство:http://reference.sitepoint.com/css/white-space#compatibilitysection
вы не можете сделать это без редактирования каждого экземпляра HTML. Следовательно, я написал некоторые JS, чтобы заменить их:
jQuery:
//replace hypens with no-breaking ones $txt = $("#block-views-video-block h2"); $txt.text( $txt.text().replace(/-/g, '‑') );
Vanilla JS:
function nonBrHypens(id) { var str = document.getElementById(id).innerHTML; var txt = str.replace(/-/g, '‑'); document.getElementById(id).innerHTML = txt; }