Just a moment...
結論から言うとつぎのようにやります
HTML
<h1 class="strokeBlack" style="--word:'テキストデコレーション!';"> テキストデコレーション! </h1> <h2 class="strokeRed" style="--word:'長い文章でも対応できるか?';"> 長い文章でも対応できるか? </h2> <p class="strokeBlue" style="--word:'ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト';"> ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト </p>
CSS
.strokeRed{
-webkit-text-stroke-width: 4px;
-webkit-text-stroke-color: red;
}
.strokeBlack{
-webkit-text-stroke-width: 8px;
-webkit-text-stroke-color: black;
}
.strokeBlue{
-webkit-text-stroke-width: 2px;
-webkit-text-stroke-color: blue;
}
[style^=--word]{
position:relative;
}
[style^=--word]::before{
content:var(--word);
position:absolute;
top:0;
left:0;
z-index:1;
-webkit-text-stroke-width: 0;
color:#fff;
}
こうすると次のようになります。

解説
-webkit-text-strokeだけだと、あんまり綺麗な表示にならないのは周知のとおり。
かといって、text-shadowもぼやけた表示になってしまいます。
それを改善したのがこちらのコードです。
HTMLのstyle属性でCSS変数を設定することにより、before要素の中身を書き換える、と言うことをしています。
個人的にはすごい発見をしてしまった・・・と思いました。
まあChatGPTを触ってて、そのコードの中でこれやってて「そんなことできるんかいな!」となっただけなんですが。
SVGで枠線をつけるなどのハックはありますが、テキストとしてのCSS装飾ができないなどの難点がありました。
その点これであればいろいろと応用がききます。
テキストの線に関しては、場所によってやりたいことが変わると思いますので、CSSでクラス指定しています。
ぜひともこちらのコード活用してください。
動作デモ
Just a moment...
改善案
このコードだと、変数は自分で書き込まなければいけません。
「.textStroke」というクラスがあったらstyle属性の値を付与する、というJavaScriptがあればさらに便利だと思います。
また、after要素を組み合わせれば2重の装飾をかけることも可能です。


