最もポータブルで視覚的に楽しいソリューションは、を使用することtext-shadowです。これは、Alexxaliと私の独自の微調整を使用して、Thorgeirの回答の例を修正して示しています。
  li:hover { text-shadow: -0.06ex 0 black, 0.06ex 0 black; }
これによりblack、フォントのレンダリングで適切に拡大縮小される単位を使用して、各文字の両側に小さな「影」が黒で(必要に応じてフォントの色名/コードを使用して)配置されます。
   警告:
 警告: px値は10進値をサポートしますが、フォントサイズが変更された場合(たとえば、ユーザーが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+ -)を変更して、それらがどのように変化するかを確認します。
比較のために他に2つのソリューションを追加しました。@ cgTagの文字間隔トリック(フォント幅の範囲の推測を含むため、うまく機能しません)と、@ workaholic_gangster911 の::描画後のトリックです。隣接するテキスト項目を微調整することなく(どのように移動しないかわかるように、ボールドテキストの後に属性を配置します)。
将来的には、を使用してフォントグレードを変更するなどの機能を持つ可変フォントがさらに増える予定です。  ブラウザーのサポートは増加しています(Chrome 63以降、Firefox 62以降)が、これにはまだ標準フォント以上のものが必要であり、いくつかの既存のフォントがサポートしています。font-variation-settings
可変フォントを埋め込むと、次のような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があります。
