Why is the <nobr> deprecated?

Html

Html Problem Overview


I understand that this tag could easily be replaced with <span class="nowrap"> and a little bit of CSS, but in real life markup I often find that <nobr> tag is more appropriate. It's not about style, it's about content. <nobr>V. V. Putin</nobr> for example (in russian typography last name and first name shouldn't be line breaked, I think similar rules apply to other languages).

I guess that deprecation means there's something better but I don't see how styling is better than separate tag. Of course there are places where CSS should be used. Do I miss something?

Html Solutions


Solution 1 - Html

It isn't deprecated because it was never standard in the first place.

HTML is (in theory) a semantic markup language. It describes the structure and semantics of a document along with relationships to other resources.

HTML is not supposed to describe presentation. A bunch of presentational features were added during the browser wars. Some of these became standardised. Most of them were subsequently deprecated when CSS came along.

CSS is a language for describing presentation. When you have a chunk of text that shouldn't have a line break in it, that is usually a matter of presentation so CSS is the right place to do it.

The exceptions are usually handled by non-breaking spaces (&nbsp;).

Solution 2 - Html

You may use the obsolete/non-standard <nobr> HTML tag — if you define it in CSS.

It's virtually guaranteed that this element name will never be repurposed for any task other than its original behavior, and this name is descriptive of the action you'll define in CSS, making it intuitive for people reviewing your HTML.

⚠Warning: Custom/obsolete elements will make your code fail to validate as HTML.

Your CSS will need to look like this:

nobr  {  white-space: nowrap;  hyphens: none;  }

You may or may not want (or need) the hyphens: none; part, but I have added it for completeness since it appears some implementations of <nobr> (used to?) also suppress hyphenation while white-space: nowrap; does not do that.

This defines the white-space as nowrap, which suppresses line breaks within white space and the hyphens as none, which prevents breaking within words (including ignoring characters within words that "suggest line break points").

Solution 3 - Html

Foolishness. That's the only reason.

<nobr> is universally supported, because it is needed, to convey the fact that the enclosed content is semantically a single unit, so it should not be split across multiple lines.

Solution 4 - Html

I found this interesting and very explaining comment on a w3c mailing list:

> <NOBR> cannot be deprecated as it has never been part of even transitional W3C HTML versions; it is purely proprietory.

Yep. So it never was and never will be part of the spec. Just something 'missing' added using CSS.

Solution 5 - Html

The proper way to achieve what you want is to declare that "V. V. Putin" is a proper noun, and define in CSS that such a proper noun should not be line breaked.

<span class="propernoun">V. V. Putin</span>

and in CSS you would define

.propernoun {
  white-space: nowrap;
}

Since... HTML is not about style, it is about content. Basically, this is the same as what the OP suggested, but the nowrap in class="nowrap" describes a presentational property in html which should be in the stylesheet.

Solution 6 - Html

That's because a proper tag should be semantically useful, when <nobr> doesn't have any semantics apart from its style. I guess that's the same reason why <center> and similar styling tags were deprecated.

Solution 7 - Html

As said, names shall not be breaked, due Russian typography: Thus there is some semantics. So as You said Yourself, instead of marking the name by <nobr>..</nobr> formatting tags, let's use meaningful <person>..</person> tags. And voilà, you can style the name as needed, i.e. by white-space: nowrap; rule for all pages, or for just the Russian localization.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvbezhenarView Question on Stackoverflow
Solution 1 - HtmlQuentinView Answer on Stackoverflow
Solution 2 - HtmlAdam KatzView Answer on Stackoverflow
Solution 3 - HtmlDave BurtonView Answer on Stackoverflow
Solution 4 - HtmlPatrick HofmanView Answer on Stackoverflow
Solution 5 - HtmlvortexView Answer on Stackoverflow
Solution 6 - HtmlgvlasovView Answer on Stackoverflow
Solution 7 - HtmlFrantaView Answer on Stackoverflow