在标记边界处继续紧排



我有一个应用程序,它使用<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>

在第一段中,<mark>标记在两个"1"数字之间结束。第二段具有相同的文本,没有<标记>。字体大小、边距和行距都经过了调整,使段落更加紧密,使差异更加明显。

带有<标记>而不是没有。由于这种情况在应用程序中以交互方式发生,当用户在1上拖动鼠标时,后续文本在1之间向右移动,然后在经过下一个字符时向后移动。文本的"抖动"可能很烦人。

是否有任何方法可以告诉浏览器不要将标记标记视为紧排边界?也许是字体功能设置?

好吧,你可以完全关闭紧排。。。我认为这是最接近于看不到效果的,因为紧排边界将始终位于标记边界。

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.

我一直在反复搜索有关它的"cleans"修复程序,但我只找到了margin属性的一种方法。

看看这个

mark { margin: 0 -1pt; }

希望它能帮助

最新更新