リンクの下線をもっと見栄え良くする:text-underline-offset
2016年頃、ハイパーリンクの下に下線を引きたい場合、通常はCSSに text-decoration: underline というプロパティを追加していた。
デフォルトの状態だと下線と文字がかなり近接していて、このスタイルを好まないデザイナーもいるし、僕自身もあまり綺麗ではないと思っていた。当時の underline は位置や太さを調整できなかったため、こういったケースでは通常 background-image を使って対処していた。
linear-gradient を利用すれば、underline に似た直線を擬似的に再現できる。background-image である以上、background-position で位置を直接調整できるし、background-size で太さを調整することも可能だ。
下線の位置を調整できない問題はこれで解決できたものの、実際に使うとなるとどうしても少し面倒に感じられたし、background-image 本来の用途からやや逸脱しているような感覚もあった。もちろん使うこと自体には何の問題もないが、直感的とは言えなかった。
text-underline-offset
このCSSプロパティはかなり前に提案されていたものの、当時は対応しているブラウザが非常に少なかったため、みんな依然として background-image を使って下線の位置を調整していた。
今では主要ブラウザがすべてこのプロパティをサポートしており、使い方も非常に直感的だ:
a {
text-decoration: underline;
text-underline-offset: 4px;
}
下線のスタイルをもっと細かくコントロールしたい場合は、text-decoration-thickness と組み合わせて太さを調整することもできる:
a {
text-decoration: underline;
text-decoration-color: #3b82f6;
text-decoration-thickness: 2px;
text-underline-offset: 3px;
}
かつて background-image を使っていた方法と比べると、この書き方のほうがセマンティクス的にも明確で、メンテナンスもしやすい。
もともとは単なるドラフト段階だった多くの標準仕様が、各ブラウザに次々と実装されていくのを見ると、本当に時代が進歩している実感が湧くな。
関連記事
- Three.js で僕の部屋を表現する 僕が React Three Fiber を使って実際の自分の部屋をブラウザ上に再現し、実世界のオブジェクトを目録に見立て、空間の記憶を通してここ数年の生活と仕事について語った話。
- フロントエンドで画像を扱う際に注意すべきこと Jake Archibaldの記事を起点に、現代のレスポンシブ画像の書き方を整理する。なぜwidth/heightを付ける必要があるのか、CSSのaspect-ratioはいつ使うべきか、AVIFとWebPの選び方、そしてpicture/source/srcsetを使ったモバイル向け画像の切り替えについて。
- CSS field-sizing — たった1行のCSSでフォーム要素を自動リサイズする かつてtextareaの自動高さ調整は、JavaScriptでscrollHeightを監視するしかなかった。しかしCSSのfield-sizing: contentなら、わずか1行で代替でき、textarea、input、selectに対応している。本記事では従来のやり方のペインポイントと、field-sizingの使い方をまとめる。
- なぜウェブで Pixel Perfect を追求すべきではないのか Pixel Perfect はそれが本当に重要な場合にのみ意識すべきであり、そうでなければ往々にしてお互い損をする結果に陥ってしまう。