[whatwg] Interaction of <wbr> and CSS white-space

Jukka K. Korpela jkorpela at cs.tut.fi
Sat May 14 00:29:33 PDT 2011


14.5.2011 6:49, Boris Zbarsky wrote:

 > "The wbr element is expected to override the 'white-space' property and
 > always provide a line-breaking opportunity."
 >
 > Why is this desirable?

It reflects the original and useful idea of <wbr>, which is supposed to 
introduce a specific rule in line breaking, making an exception to 
normal line breaking rules. This is conceptually simple and means that 
such a rule is included in the data itself.

For example, when mentioning URLs in the text of a document, you 
normally want to prevent line breaks in them by default and only allow 
line breaks at specific points, as in

http://www.whatwg.org/<wbr>specs/<wbr>web-apps/<wbr>current-work/<wbr>multipage/

Oops, my newsreader introduced a line break after a hyphen. And such 
behavior is common in web browsers as well. So it is natural to wrap 
urls in text in <span class="url">...</span> with CSS rule .url { 
white-space: nowrap; }. Or maybe use the nice <nobr>...</nobr>, which is 
declared obsolete (for reasons unknown to me).

Anyway, the idea is to disallow line breaks (that would otherwise be 
allowed by line breaking rules, whatever they might be in each 
situation) _except_ where explicitly allowed by <wbr>. This is needed 
for example in URLs, where browsers might otherwise break after "-" or 
"%" or some other special characters.

How are we expected to deal with such issues if white-space: nowrap 
kills <wbr>? We would need to split strings like urls into segments like 
<span class="nowrap">...</span> with <wbr> tags between them. Rather 
awkward.

 > It seems to contradict what CSS3 Text is trying to define

I think HTML specs need to specify the meaning of HTML markup, and style 
sheets will take it from that. It's up to HTML specs to say whether 
<wbr> specifies a line breaking opportunity. CSS specs may define a 
setting that unconditionally prevents line breaks somewhere, or a 
setting that prevents line breaks except those explicitly allowed in 
markup or by the use of line break control characters, or they may 
define both kinds of settings (obviously, that would be desirable).

 > In terms of compatibility, WebKit seems to do what the spec says right
 > now, while Trident (IE9), Presto (Opera 11), and Gecko (trunk) don't
 > break on <wbr> in "white-space: nowrap".

The <wbr> element had a simple idea and a natural origin, but browser 
developers have confused the issue, e.g. by removing or adding support. See
http://www.cs.tut.fi/~jkorpela/html/nobr.html#wbr
for some notes on the history. I haven't yet added the absurdity that IE 
9 apparently does not support <wbr> _at all_, except in the sense that 
<wbr> is recognized as an element and then you can say
.wbr:after { content: "\00200B"; }

So in the current situation, authors need to be cautious and use special 
tricks to make <wbr> work, but in the long term, <wbr> should be defined 
in a simple and straightforward manner, so that in the future, authors 
can use it as a simple and effective tool.

The HTML specs cannot dictate what CSS specs do, and the meaning of 
white-space (in detail) is unknown - is it to be understood as in the 
CSS 2 specification (which is effectively dead), or in CSS 2.1 (which is 
the de-facto standard but formally only a draft that must not be cited 
except as work in progress), or in CSS 3 (which is very much work in 
progress and may change at any moment)?

So maybe the best way to convey the message is to remove the reference 
to white-space and add a note on the _HTML_ element <nobr> (even if it 
is kept as obsolete - the spec should still specify its meaning):
"The wbr element specifies a line breaking opportunity even when used 
inside a nobr element."

-- 
Yucca, http://www.cs.tut.fi/~jkorpela/



More information about the whatwg mailing list