使用 word-wrap 驯服长单词

这篇文章来自 Les Orchard,他在 Mozilla 的 Web 开发团队工作。

Web 浏览器之间长期以来共享着各种功能。word-wrap CSS 属性是 最初来自微软的功能,并且包含在 CSS3 中。

现在可在 Firefox 3.5 中使用,此 CSS 属性允许浏览器任意地将长单词或字符字符串拆分以适应给定元素。

这有什么用呢?好吧,您是否曾经需要在一个页面上显示一个极长的 URL 或数据块?当然,URL 短网址服务有所帮助,但基本布局问题仍然存在。

考虑一下使用 data 方案 的以下 URL

<textarea> 中呈现时,这个巨大的 URL 表现得足够好,至少不会破坏此页面的布局。但是,除此之外,它并没有得到很好的处理。大多数浏览器都不太清楚如何处理滚动条,样式设置很麻烦,并且在可编辑字段中呈现 URL 并不是这里的目的。

或者,您可以将 URL 放入 <div> 中,并为其添加 overflow: hidden 样式,如下所示

同样,页面布局没有被破坏,但现在 URL 被截断了。那么,为什么不尝试使用 overflow: auto 样式呢?

这至少会为您提供一个滚动条

data:text/html;charset=utf-8;base64,Q29uZ3JhdHVsYXRpb25zISBZb3UndmUgZm91bmQgdGhlIGhpZGRlbiBtZXNzYWdlIQ0KDQpUbyBjbGFpbSB5b3VyIHByaXplLCB2aXNpdCBodHRwOi8vZ2V0ZmlyZWZveC5jb20gdG9kYXkhDQoNCkZyZWUgYnJvd3NlciBpbiBldmVyeSBib3ghDQo%3D

但是现在,访问您网页的访客必须滚动才能看到全部
内容,并且突出显示文本以进行复制和粘贴可能会
很麻烦。

因此,最后,这是 word-wrap: break-word 的效果

data:text/html;charset=utf-8;base64,Q29uZ3JhdHVsYXRpb25zISBZb3UndmUgZm91bmQgdGhlIGhpZGRlbiBtZXNzYWdlIQ0KDQpUbyBjbGFpbSB5b3VyIHByaXplLCB2aXNpdCBodHRwOi8vZ2V0ZmlyZWZveC5jb20gdG9kYXkhDQoNCkZyZWUgYnJvd3NlciBpbiBldmVyeSBib3ghDQo%3D
word-wrap
normal
break-word

亲眼看看区别:使用上面的单选按钮在 normal(默认值)和 break-word 值之间切换。normal 值会导致 URL 超出包含的 <div>,可能会破坏此页面的布局。

另一方面,使用 word-wrap: break-word 将允许浏览器将文本强制到 <div> 的范围内,从而保留您的页面布局,并可能保留您的理智。


10 条评论

  1. Andy

    不错。:) 现在我们需要实现它的兄弟功能 - “text-overflow: ellipsis”

    https://bugzilla.mozilla.org/show_bug.cgi?id=312156

    …适用于 Firefox 3.6?

    2009 年 6 月 29 日 17:17

  2. Smooth Criminal

    如果这是一个单词,双击它时是否应该表现为一个单词?

    2009 年 6 月 29 日 21:25

  3. Sebastian

    当然它应该表现为一个单词(而且它确实如此,对吧?)。

    @Andy
    我同意。即使 IE 也支持 text-overflow: ellipsis!这可能是我使用的大多数浏览器(除了 Firefox)都支持的唯一 CSS hack。:(

    2009 年 6 月 29 日 23:34

  4. Gerv

    “在 中呈现时,这个巨大的 URL 表现得足够好,至少不会破坏此页面的布局。但是,除此之外,它并没有得到很好的处理。”

    http://www.gerv.net/temp/layout-broken.png

    2009 年 6 月 30 日 01:54

  5. Gerv

    嗯。此评论系统在处理标签方面表现出一些意想不到且不可用的行为。如果评论表单旁边没有其他说明,人们会期望它们被转义而不是被静默删除。让我再试一次

    “在 <textarea> 中呈现时,这个巨大的 URL 表现得足够好,至少不会破坏此页面的布局。但是,除此之外,它并没有得到很好的处理。”

    <咳嗽>
    http://www.gerv.net/temp/layout-broken.png

    (Firefox 3.5 几乎最终版本,Linux Ubuntu 9.04)

    2009 年 6 月 30 日 01:56

  6. Mark

    您可能需要注意,大多数示例不会在 Planet Mozilla 等 Feed 中正确显示。

    2009 年 6 月 30 日 03:13

  7. Febri

    我正在使用 Opera 10.10 版,但是它无法正常工作。无论我点击 normal 还是 break-word,结果都相同。
    这件事发生了什么?
    Opera 10.10 版与此功能不兼容吗?

    2009 年 12 月 8 日 20:46

  8. DunxD

    上面的评论垃圾邮件表明您已在您的网站设计中实现了示例 :-)

    2010 年 7 月 17 日 04:45

  9. PJ Brunet

    我正在 Firefox 7 中尝试此操作,但它不起作用。对 FF 用户来说太糟糕了,我不能再浪费时间了。

    2011 年 10 月 24 日 20:46

  10. PJ Brunet

    此标签会打断一条非常长的行(例如示例),但它不会尝试打断一个有足够空间在上一行打断的长单词。换句话说,它不会抓住一切机会打断。

    试试这个例子:http://tomakefast.com/wrap-test.html

    在 Chrome 中,数字会像您预期的那样换行。在 FF 中,您会得到两列数字。换行不够积极。即使您删除 text-align:justify,您仍然会得到两列数字而不是换行。

    我的解决方案是使用 PHP 插入“shy”标签。但是,如果在小于 8 个字符的单词上使用“shy”标签,Firefox 似乎会变得疯狂!

    Firefox 是新的 IE ;-)

    2011 年 10 月 24 日 21:40

本文的评论已关闭。