零宽度空格这个名字有点反直觉,但它并非 没有用途。 在文本中,您可能想在斜杠周围使用它,因为您希望确保单词被单独处理,但斜杠周围没有物理空格。

不过这很理论——我从未需要这样做。 它可能在长单词中很有用,暗示可以在那里断开……但这也很少见,因为我们有软连字符 (­
),它专门用于此,并在断开处留下一个通常合适的连字符。
我需要做的是完全相反:欺骗系统认为一个词是两个词。 比如在 Twitter 上,如果我在推文正文中 @username 或 #hashtag,它们将分别被链接起来。 但我不总是想要这样。 在 CSS Twitter 上,我可能想参考 @media 查询或显示 #id-selector。 在符号和文本之间添加一个零宽度空格,我就可以搞定了。
将零宽度空格复制到您的剪贴板
这里是我很久以前创建的一个 Pen,可以帮助您做到这一点
还有一种从浏览器控制台执行此操作的快速技巧
copy('u{200B}')
通过
对于可能吸引您的另一种方式,书签!
复制粘贴问题
零宽度空格的危险在于,您看不见它。 例如,如果有人使用零宽度空格技巧从推文中复制您的 @media
查询,它将无法在他们的代码编辑器中使用(因为它将使规则无效),并且可能非常令人困惑。 因此,最好避免在可能被复制为代码示例的任何内容中使用它,但在明确尝试不自动链接某些内容时可以使用它。
有趣的是,ctrl+F 在所有主要浏览器(至少在 Mac 上)中都忽略了零宽度空格。
使用零宽度空格的一些技巧
禁用短代码(为了演示目的或作为使用示例,将短代码标记原样显示)→ 缺点,结果不方便复制粘贴。
禁用字体连字。 例如,防止 Roboto 字体中的字母
f
和i
连接。这与
有什么不同?那是一个空格……带……宽度
是一个不可分割的空格。 好吧,看起来像一个空格,但不能在它上面换行。 例如,假设您需要遵循 一些指南,这些指南不允许在文章和名词之间换行,那么您可以使用它。 实际上,我在本段中每个文章和名词之间都放了一个。另一方面,零宽度空格不像空格,但被认为是一个空格。 除了文章中的示例之外,我经常用它来格式化 Markdown:您不能对 half of a world 应用格式,因为它需要在 Commonmark 中靠近空格开始或结束,但您可以使用 零-宽度空格来解决这个问题。
是可见的,它是不可分割的空格。 通常,如果您连续写 3 个空格,浏览器只会显示一个空格。 除非您使用 $nbsp;,否则它会渲染所有三个空格。
nbsp 代表不可分割空格,它是一个有宽度的真实空格,但它会阻止两个词被分割(例如,在行尾)。
如所示,零宽度空格看起来像一个不可见字符
这不是零宽度空格,而是一个实际的空格。 上面的示例是针对不占用字符空间的空格。
NBSP 如果是常规空格,则具有大小,并且会阻止 NBSP 两侧的换行。
ZWS 或 ZWSP 的宽度为零(完全不可见),并且允许与常规空格类似的换行。
然后存在 ZWJ 或零宽度连接符,它也具有零宽度,但会阻止两侧的换行。 从理论上讲,您根本不需要 NBSP,因为 ZWJ + 空格 + ZWJ 是相同的东西。 但是,由于历史原因,我们拥有的代码点多于逻辑上需要的代码点。
更具体地说,这是一个有宽度的空格,两侧的文本永远不会断开(换行)。 这对于防止印刷孤儿(标题或段落末尾的单个单词在新的一行上)很有用。 令人讨厌的是,它也是 WYSIWYG 编辑器出于某种原因使用双空格的方式。
仍然渲染一个空格(它被标记为不可分割)。另一方面,零宽度空格在技术上是一个空格,但渲染时没有宽度。 您将无法看到它。 如果您将它放在两个字符之间,它们会“粘”在一起,就像您根本没有输入空格一样。
是一个不可分割的空格——无论如何它都会添加一个空格。 如果您连续放置十个,您将创建一个很大的空格。这恰恰相反,完全没有空格。 十个空格将不会创建任何空格,0px 间隙。
Shift + Option + 空格应该生成一个 ZWS。 Tim Apple,让它成为现实。
我一直使用 KCharSelect 来处理这类事情。 它使所有字符都可通过名称、代码(s)进行搜索,并且在 Windows 上运行得和在 Linux 上一样好。
它在阿拉伯语或波斯语等将字符连接在一起的语言中很实用,即 zwnj,零宽度非连接符。
带空格: دانه ها
带半空格: دانهها
نسیم 和 نسیم
它们有几个很好的用途。 当您需要显示一个长 URL 时,它们非常方便——如果需要,ZWS 可以让您将其合理地分成多行。
它还可以在 HTML 邮件中实现一个方便的技巧,让您更好地控制收件箱中的预览文本(或前置标题文本)——主题行下面的那一部分文本。 Litmus 有一篇关于它的好文章,尽管代码格式有点令人不满意。
好文章。 我发现自己遇到了完全相同的用例。 如果 Twitter 提供一种“取消链接”链接的方法就好了,但我猜想这会为依赖某些格式(如 @handle 和 #buzzword 自动解释为链接)的 Twitter API 添加额外的复杂性。
我过去常常使用零宽度空格来实现这些用途,但发现很多时候,零宽度空格会在新行处断开,从而打断了我的推文中的文本流。
我评估了一些替代方案,包括零宽度不间断空格,但发现实际上,在所有情况下都能更好地工作的方案是“零宽度连接符”字符,浏览器几乎将其解释为两个字符串的合并,但 Twitter 会尊重它并忽略它,使其不会被链接机制识别。
我曾经在一个我参与开发的应用程序中遇到过一个问题。
它是一个类似 CMS 的系统。
作者遇到一个问题,一个神秘的换行符一直出现在单词中间。
他们坚持要求必须修复它。
我不确定是运气还是坚持,但我们发现一个零宽度空格已经进入了副本。
我唯一能证明它的方法是使用 `curl`,然后将结果通过管道传递到 `cat`,并使用一些显示不可见字符的晦涩的标志。
我们得出的唯一结论是,作者从 Word 中复制了文本。
有趣的时刻。
这必须是我有史以来最难解的错误。
如何在您的文章中嵌入 CodePen 面板?
请告诉我。我也想在我的文章中(在 Blogger.com 中)展示这样的 CodePen 示例。
当您查看 CodePen 上的任何公共 Pen 时,请点击页脚中的“嵌入”按钮,然后获取嵌入代码。
https://codepen.io/features/embeds
我一直使用 `&# 8288;`(添加了空格以便您能看到它),最常用于脚注和 em 破折号。让脚注在没有伴随文本的情况下在移动设备上换行,可读性较差,视觉效果也不佳。使用零宽度空格也比使用将文本包装在 `a` 中并将其设置为 `white-space: nowrap` 的 CSS 替代方案要容易得多。