Как предотвратить разрыв строки при дефисах во всех браузерах
У нас есть 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; }