最便携和视觉上令人愉悦的解决方案是使用text-shadow
。这修改并显示了使用Alexxali和我自己的调整对Thorgeir的回答的示例:
li:hover { text-shadow: -0.06ex 0 black, 0.06ex 0 black; }
这会在black
每个字母的两侧都使用会随字体渲染正确缩放的单位在黑色的黑色阴影(如果需要,请使用字体的颜色名称/代码代替)。
警告: px
值确实支持十进制值,但是当字体大小更改时它们看起来不会太大(例如,用户使用Ctrl+ 缩放视图+)。请使用相对值。
此答案使用ex
单位的分数,因为它们随字体缩放。
在大多数浏览器默认*中,期望1ex
≈ 8px
,因此期望0.025ex
≈ 0.1px
。
你自己看:
li { color: #000; } /* set text color just in case */
.shadow0 { text-shadow: inherit; }
.shadow2 { text-shadow: -0.02ex 0 #000, 0.02ex 0 #000; }
.shadow4 { text-shadow: -0.04ex 0 #000, 0.04ex 0 #000; }
.shadow6 { text-shadow: -0.06ex 0 #000, 0.06ex 0 #000; }
.shadow8 { text-shadow: -0.08ex 0 #000, 0.08ex 0 #000; }
.bold { font-weight: bold; }
.bolder { font-weight: bolder; }
.after span { display:inline-block; font-weight: bold; } /* workaholic… */
.after:hover span { font-weight:normal; }
.after span::after { content: attr(title); font-weight: bold; display:block;
height: 0; overflow: hidden; }
.ltrsp { letter-spacing:0; font-weight:bold; } /* @cgTag */
li.ltrsp:hover { letter-spacing:0.0125ex; }
li:hover { font-weight: normal!important; text-shadow: none!important; }
<li class="shadow0">MmmIii123 This line tests shadow0 (plain)</li>
<li class="shadow2">MmmIii123 This line tests shadow2 (0.02ex)</li>
<li class="shadow4">MmmIii123 This line tests shadow4 (0.04ex)</li>
<li class="shadow6">MmmIii123 This line tests shadow6 (0.06ex)</li>
<li class="shadow8">MmmIii123 This line tests shadow8 (0.08ex)</li>
<li class="after"><span title="MmmIii123 This line tests [title]"
>MmmIii123 This line tests [title]</span> (@workaholic…)</li>
<li class="ltrsp" >MmmIii123 This line tests ltrsp (@cgTag)</li>
<li class="bold" >MmmIii123 This line tests bold</li>
<li class="bolder" >MmmIii123 This line tests bolder</li>
<li class="shadow2 bold">MmmIii123 This line tests shadow2 (0.02ex) + bold</li>
<li class="shadow4 bold">MmmIii123 This line tests shadow4 (0.04ex) + bold</li>
<li class="shadow6 bold">MmmIii123 This line tests shadow6 (0.06ex) + bold</li>
<li class="shadow8 bold">MmmIii123 This line tests shadow8 (0.08ex) + bold</li>
将鼠标悬停在渲染的线条上可以查看它们与标准文本的区别。
更改浏览器的缩放级别(Ctrl+ +和Ctrl+ -)以查看它们如何变化。
我在这里添加了两个其他解决方案进行比较:@cgTag的字母间距技巧,因为涉及猜测字体宽度范围,所以效果不佳;以及@ workaholic_gangster911的:: after绘画技巧,它留下了笨拙的额外空间,因此粗体文本可以扩展而不用拖累邻近的文本项(我将属性放在粗体之后,这样您就可以看到它如何移动)。
将来,我们将提供更多的可变字体,这些字体可以通过更改字体等级font-variation-settings
。 浏览器的支持正在增加(Chrome 63 +,Firefox 62+),但这不仅需要标准字体而且还需要很少的现有字体支持。
如果您嵌入可变字体,则可以使用如下CSS:
/* Grade: Increase the typeface's relative weight/density */
@supports (font-variation-settings: 'GRAD' 150) {
li:hover { font-variation-settings: 'GRAD' 150; }
}
/* Failover for older browsers: tiny shadows at right & left of the text
* (replace both instances of "black" with the font color) */
@supports not (font-variation-settings: 'GRAD' 150) {
li:hover { text-shadow: -0.06ex 0 black, 0.06ex 0 black; }
}
Mozilla可变字体指南中有一个带滑块的实时演示,可以按各种等级播放。Google的网络上可变字体简介中有一个动画GIF,展示了高等级和无等级之间的切换: