继续在标签边界进行字距调整

Continue kerning at tag boundaries

我有一个应用程序使用 <mark> 标记以交互方式突出显示文本。当用户拖动鼠标时,它会环绕和展开文档中的文本节点以向用户显示选择。当所选范围在单词的中间结束时,标记仅包围单词的一部分。如果边界位于紧缩对之间,则紧缩被禁用。

这是一个例子:

p { font-size: 30pt; margin: 0; line-height: 26pt; }
<p>There <mark>are 1</mark>1 entries.</p>
<p>There are 11 entries.</p>

在第一段中, 标记在两个“1”数字之间结束。第二段具有相同的文本,但没有 。调整了字体大小、边距和行间距,使段落靠得更近,使差异更明显。

的 1 之间的 space 比没有 的多。由于这在应用程序中以交互方式发生,当用户将鼠标拖到 1 上时,后续文本在 1 之间时向右移动,然后在经过下一个字符时返回。文字的"jiggling"会很烦人。

有什么方法可以告诉浏览器将标记标签视为字距调整边界?也许是字体功能设置?

我一直在一遍又一遍地寻找 "cleans" 修复程序,但我只找到了一种方法 margin 属性。

Check this out

mark { margin: 0 -1pt; }

希望对您有所帮助

好吧,您可以完全关闭字距调整...我认为这是最接近看不到效果的情况,因为字距调整边界始终位于标记边界处。

p { font-size: 30pt; margin: 0; line-height: 26pt; font-kerning: none; }
mark { margin: 0; font-kerning: none; }
<p>There <mark>are 1</mark>1 entries.</p>
<p>There are 11 entries.</p>

考虑使用 ::selection 伪元素来控制所选文本的突出显示。

如果您想随后插入 mark 标签,您可以在选择过程完成后执行此操作。那时您将失去标记边界处的字距调整,但至少您不会看到用户选择时的抖动。

::selection {
  background-color: yellow;
}
There are 11 entries.<br/>
There are 11 entries.