【コピペ可】テキストにCSSで蛍光ペンのようなマーカーを引く方法

ABOUTこの記事をかいた人

フロントエンドエンジニア。

はい、今回はテキストにこんな感じでマーカーを引く方法を紹介していきます。

オレンジの線で区分けしていますが、画像のようにテキスト部分のみと行全体の場合の両方を紹介します。

テキスト部分のみ

コード

解説

マーカー自体はbackgroundプロパティとlinear-gradient関数を用いますが、文字部分のみに背景を設定するにはdisplay: inline;にする必要があります。

linear-gradientの中を見てみると、linear-gradient(方向, 領域指定, 領域指定)といった指定になっていますが「複数の位置の色経由点があるグラデーション(MDN)」を表現できる書き方になっています。

要はグラデーションというより縞模様を描く指定です。

以下の例のように各領域の色、始点、終点を書くことで縞模様を表現します。(両端の0%, 100%は省略できます)

これを使って、縦方向の縞模様を作っています。transparentは色ではなく背景透過になるので、下半分をマーカーで塗ったような見た目になります。

行全体

コード

解説(Sassのmixin付き)

linear-grandientを使うという発想は近いですが、この場合は「repeating-linear-gradient」という繰り返しを表現する関数を用います。

行全体にマーカーを引くにはdisplay: blockである必要があり、その場合はあくまで行ではなく要素全体の背景として認識されます。文字部分のみの時と同じ指定をすると以下のようになってしまいます。

そこで余白→色→余白→・・・という形の繰り返しで背景をつけることになります。

さて、その幅をどうするのかを考えていきます。

line-heightの仕様をみると、これは文字の上下に余白を作ります。今回のようにfont-size: 24px; line-height: 2;の場合は以下のようになります。

全体の高さは24px * 2 = 48pxで、上下に12pxずつ余白がつきます。よって、これに沿って背景をつければ良さそうですね。

上から0~12px分は透過、12〜36px分は色、36〜48px分は透過、という背景を繰り返します。

これではまだ行を縦方向に覆ってしまいます。

文字の上半分、つまり12〜24px目も透明にしましょう。

これでOKです。

mixin(Sass)

上記の計算を毎回、それも違うfont-size、line-heightに対して行うのは大変なのでmixinを作りました。

引数の$ratioは行の何割をマーカーで塗るかを表しており、1が全体で0に近づくにつれてマーカーが細くなります。

まとめ

というわけでテキストにマーカーを引く方法でした。文字だけなのか、行全体なのか使い分けることは結構出くわすと思うのでどちらも使えるようにしておきましょう。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください