Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent line break at hyphens in all browsers

Tags:

html

css

People also ask

How do you not break a line with a hyphen?

The answer to this dilemma is to use non-breaking hyphens instead of regular dashes when you don't want Word to break a line at the hyphen. To do this, hold down the Ctrl and Shift keys as you type the dash (this is the same as typing Ctrl and an underscore). Word will then not break the line at that point.

How do I stop breaking words in CSS?

use white-space: nowrap; . If you have set width on the element on which you are setting this it should work. It's white-space: nowrap actually.

Which property is used to prevent the default line break in a text?

You can prevent line breaks and text wrapping for specific elements using the CSS white-space property.


You can use which is a Unicode NON-BREAKING HYPHEN (U+2011).

HTML: ‑ or ‑

Also see: http://en.wikipedia.org/wiki/Hyphen#In_computing


One solution could be to use an extra span tag and the white-space CSS property. Just define a class like this:

.nowrap {
    white-space: nowrap;
}

And then add a span with that class around your hyphenated text.

<p>This is the <span class="nowrap">anti-inflammable</span> model</p>

This approach should work just fine in all browsers - the buggy implementations listed here are for other values of the white-space property: http://reference.sitepoint.com/css/white-space#compatibilitysection


I’m afraid there’s no simpler way to do it reliably than splitting the text to “words” (sequences of non-whitespace characters separated by whitespace) and wrapping each “word” that contains a hyphen inside nobr markup. So input data like bla bla foo-bar bla bla would be turned to bla bla <nobr>foo-bar</nobr> bla bla.

You might even consider inserting nobr markup whenever the “word” contains anything but letters and digits. The reason is that some browsers may even break strings like “2/3” or “f(0)” (see my page on oddities of line breaking in browsers).


Use the word joiner character (&#8288;) around the hyphen. It works in Internet Explorer as well.

Fix specific hyphens...

function fixicecream(text) {
    return text.replace(/ice-cream/g, 'ice&#8288;-&#8288;cream'));
}

Or everything...

function fixhyphens(text) {
    return text.replace(/(\S+)-(\S+)/g, '$1&#8288;-&#8288;$2'));
}

You are unable to do it without editing every HTML instance. Consequently, I wrote some JavaScript code to replace them:

jQuery:

// Replace hyphens with non-breaking ones
$txt = $("#block-views-video-block h2");
$txt.text( $txt.text().replace(/-/g, '‑') );

Vanilla JavaScript:

function nonBrHypens(id) {
    var str = document.getElementById(id).innerHTML;
    var txt = str.replace(/-/g, '‑');
    document.getElementById(id).innerHTML = txt;
}