Open Bug 178671 Opened 22 years ago Updated 2 years ago

<wbr> should be implemented as a CSS rule or maybe XBL

Categories

(Core :: Layout: Text and Fonts, enhancement, P4)

enhancement

Tracking

()

Future

People

(Reporter: jesup, Unassigned)

References

Details

(Keywords: compat)

Attachments

(1 file)

<wbr> is only partly supported an in a somewhat on-useful way; it works only outside <nobr>. It could be implemented as a ZWSP character (zero-width space). This MAY be a small problem on (some?) X11 machines, since my machine/font has a square with ZWSP inside of it (though it does cause a break properly). roc suggested either a CSS rule: wbr:before { content:"&#8203"; white-space:normal; } Or implementing it in XBL if we want people to be able to style wbr:before. BTW, chatzilla uses <wbr> See also http://www.htmlcodetutorial.com/linepar/_WBR.html and http://www.cs.tut.fi/~jkorpela/html/nobr.html#wbr
Changing component s/on-useful/un-useful/
Component: Layout: HTML Frames → Layout: Fonts and Text
Keywords: 4xp
Keywords: compat
Attached patch CSS Patch v0.1 (deleted) — Splinter Review
This patch removes the layout code and adds the CSS rule. The CSS rule does not work. I tried content: "\200B" as well, which is the zero-width space, but if *normal* space does not break then zero-width space sure as hell isn't. In other words, this patch does output the content (you can verify by putting normal text in the content:) but does *not* break the line.
How come you used " " instead of "&#8203" (ZWSP)?
Yeah, sorry John, the CSS doesn't work. It's probably because the 'white-space' property only applies to block elements, according to spec. (I can't see where that is enforced in our code, though.) I suggested this because timeless had tried it and said it worked, but I guess he was mistaken. Actually our current implementation of <wbr> is exactly equivalent to a ZWSP --- it doesn't allow breaking inside a nowrap block, which it should. So we could either replace our <wbr> code with an XBL binding introducing a ZWSP, or we could fix <wbr> to really work. In the latter case the easiest way might be to make the 'white-space' property applicable to inline elements, then our CSS rule would work.
I would prefer that we be able to specify as many elements as possible using CSS alone, yes ... it is really the point of having a CSS engine. But since this requires actual new content, perhaps XBL is more *appropriate*. Kinda sucks that white-space doesn't work on an inline element, but it doesn't sound easy :) CC'ing kin anyway.
Giving it away to default owner. Not gonna get to it myself anytime in the near or far future, I suspect.
Assignee: jkeiser → font
QA Contact: amar → ian
'white-space' should apply to all elements. That was an error in CSS2, fixed in the CSS2.1 draft.
Priority: -- → P4
Target Milestone: --- → Future
Copying HTML containing a <wbr> to Notepad does not copy the <wbr>. Copying HTML containing a &#8203; does copy the zero-width space. So implementing <wbr> using :before would change content in an invisible way (once bug 12460 is fixed). Changing content in an invisible way is usually nasty.
Depends on: 191699
If this is going to be implemented using CSS, it should be like: # wbr:before { content:"\200B"; white-space:normal; } ... I guess. (You can't use SGML character references inside CSS.)
Severity: normal → enhancement
Hardware: PC → All
Assignee: layout.fonts-and-text → nobody
QA Contact: ian → layout.fonts-and-text
The HTML standard now defines the <wbr> and <nobr> elements in terms of CSS. The definition in the spec does not address the issue raised here in comment 8. I'm open to changing the spec on this further based on feedback regarding whether this is a problem or not.
Blocks: 729047

Going through old bugs... Any thoughts on this? What's the current state?

Flags: needinfo?(dholbert)

Looks like we have https://searchfox.org/mozilla-central/source/layout/generic/WBRFrame.cpp , added in bug 584141 in 2019 (pretty recently).

It's linked up to the tag via SIMPLE_TAG_CREATE here:
https://searchfox.org/mozilla-central/rev/5e15e00fa247cba5b765727496619bf9010ed162/layout/base/nsCSSFrameConstructor.cpp#3415

I haven't paged in the history/spec/details on wbr (it's not a tag I frequently encounter), but given the relatively-recent work in bug 584141 , I'd be surprised if we need to do a lot of rethinking/reimplementing at this point?

Flags: needinfo?(dholbert)

In particular, it looks like:

  • WBRFrame.cpp's (relatively-recent) implementation is quite minimal/trivial, which is great.
  • If we wanted to define the element in "pure CSS", we'd probably still need a dedicated frame class like this, for its CSS to cause us to generate under the hood (to produce the right behavior/semantics).

So, I'm not sure there's anything in particular to be done here. If there are any issues with the current impl, it might be best to file new bugs for them at this point?

FWIW, according to HTML it needs to be implemented in terms of display-outside (using the break-opportunity value). Edit: turns out this is a mess standards-wise: https://github.com/whatwg/html/issues/2291.

So it sounds like the title of this bug should change (re the whatwg thread, and XBL being dead), but it's still relevant

Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: