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

时间:2016-04-06 16:03:40

标签: html css kerning

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

以下是一个例子:

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

在第一段中,&lt; mark&gt;标签在两个“1”数字之间结束。第二段具有相同的文本,没有&lt; mark&gt;。调整字体大小,边距和行间距以使段落更加接近,以使差异更加明显。

1与&lt; mark&gt;之间的空间更大比没有。由于这在应用程序中以交互方式发生,因此当用户将鼠标拖过1s时,后续文本在它们位于1之间时向右移动,然后当它们越过下一个字符时向后移动。文本的“摇晃”可能很烦人。

有没有办法告诉浏览器将标记标记视为字距边界?也许是字体功能设置?

3 个答案:

答案 0 :(得分:2)

嗯,你可以完全关闭字距调整...我认为你最接近的是没有看到效果,因为字距调整边界将始终位于标签边界。 / p>

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我一直在寻找&#34;清理&#34;修复了它,但我只用margin属性找到了一种方法。

Check this out

mark { margin: 0 -1pt; }

希望有所帮助