text-decorationでマーカーを引く方法

投稿日:

更新日:

従来の実装方法

linear-gradientでマーカーを引いた表示
linear-gradientでマーカーを引いた表示
HTML
<span class="marker">マーカー</span>
CSS
.marker {
  line-height: 1.6; /* 無くても良い */
  background-image:
    linear-gradient(transparent 60%, #ff6 0%);
}

メリット

以下のように左右に余白を持たせることができます。

左右に余白を設けたマーカーの表示
左右に余白を設けたマーカーの表示

デメリット

後述の最新の実装方法を見ると記述が簡単に見えますが、マーカーの位置を調整しようとすると以下のように記述が長くなる上に単位が%のため、線の幅を固定することが出来ません。
結果的に感覚での調整になってしまいがちです。

CSS
.marker {
  background-image:
    linear-gradient(transparent 61%, #ff6 61%, #ff6 85%, transparent 85%);
}

最新の実装方法

HTML
<mark class="marker">マーカー</mark>
CSS
.marker {
  text-decoration-line: underline;
  text-decoration-color: #ff6;
  text-decoration-thickness: 14px;
  text-decoration-skip-ink: none;
  text-underline-offset: -4px;
  background-color: unset; /* デフォルトの背景を削除 */
}

メリット

<mark>タグに共通で上記のCSSを適用しておけば、カスタムプロパティで位置や色の変更が容易に出来ます。

デメリット

従来のように左右の余白の調整が出来ないです。テキスト位置のみにラインを引くのであればあまり気にすることではないかと思います。

text-decoration-skip-inkのサポートがSafari 15.4からサポートされているので、少し前のブラウザでは正しく表示されません。
text-decoration: underline #ff6 14px;とショートハンドで記述するとSafari 16.1で下線が表示されない現象が確認できたので、ショートハンドの使用は現時点では避けたほうが良さそうです。

この記事をシェアする