这个问题与字体的呈现方式有关。某些字体(例如您要嵌入的字体)的衬线超出了字母本身的“框”。在典型的排版中,这是通过允许渲染区域超出框本身来处理的——因为大多数应用程序不会在每个字母周围制作一个框。
我认为您遇到的问题源于每个字母实际上是 a 的事实<span>
,这意味着它确实有一个盒子。然后,您的 JS 会弄乱opacity
,overflow
和定位,这会导致 CSS 渲染在渲染每个个体<span>
时将其框住。
我的建议是避免使用您应用于跨度的显式宽度/溢出,而是让它们自动调整大小并控制绝对定位。
如果每个跨度具有相同的 z-index,并且它们的间距正确,那么这应该会为您提供所需的内容,而不会导致剪辑。
更新:
问题是字体以与字母重叠的方式呈现(就像许多脚本风格的字体一样)。因此,您 - 必须 - 以超出其框边界的方式渲染此字体。
但是,当插件中的 CSS 将单个字母变为部分透明时,透明项目不能超出其框的外部......因此会发生剪切。
解决方案是充分增加框的大小以不发生剪裁,并允许框重叠。
换句话说,诀窍是给字体字母提供padding-right
足够padding-left
的空间来充分表达,然后用负数调整margin-left
,将字母移回一起。
对于这种字体,在这种大小下,使它起作用的样式是:
.lslide_wrap a span span.sl-w1 {
...
/* Add the following 2 lines: */
padding: 0 100px 0 22px;
margin-left: -22px;
}
可以在此处找到原始 jsFiddle 的更新版本。