【CSS】文字色を2色に分割!グラデーションで文字を彩るテクニック
こんにちは。ひらくです。
今回はCSSを使って、文字の色を2等分(ツートンカラー)にする方法をご紹介します。
画面上で文字の上半分と下半分で色が違うデザインや、綺麗なグラデーション文字を見かけることがあると思います。
難しそうに見えますが、実はちょっとしたテクニックを使えばCSSだけで簡単に実装できます。
ぜひ一緒に手を動かしてやってみましょう。
動画で確認したい方はこちら↓ 事前準備:HTMLとベースのCSS
まずはフォルダを作り、index.html と style.css を用意します。
今回は例として、「ひらくのプログラミング教室」という文字を表示させます。
HTML (index.html)
<body>
<p>ひらくのプログラミング教室 </p>
</body>
CSS (style.css)
見やすくするために、文字のサイズや太さを調整し、余白(リセットCSSの代わり)を調整しておきます。
p {
margin: 0;
padding: 0;
font-size: 48px; /* 大きめに見やすく */
font-weight: bold; /* 太字にする */
}
これでブラウザに大きな黒文字が表示されれば準備完了です。
文字を2色に染める手順
ここからが本題です。文字色を変えるのではなく、「背景色を作って、文字の形に切り抜く」というアプローチをとります。
ステップ①:背景をグラデーションで2色にする
まずは color ではなく background プロパティを使います。
linear-gradient を使い、途中で色がくっきりと分かれるように指定します。
p {
margin: 0; padding: 0;
font-size: 48px;
font-weight: bold;
/* 180度(上から下へ)、50%の位置で色を切り替える */
background: linear-gradient(180deg, #aaccff 50%, #ffccaa 50%);
}- ポイント: 50% までを青色、50% からを赤色(例)と指定することで、グラデーションではなく「くっきりとした分割」になります。
この時点では、文字の背景が四角く2色になっている状態です。

ステップ②:背景を文字の形に切り抜く
次に、この背景を「文字の形」に合わせて切り抜きます。ここで使うのが background-clip です。
(Chromeなどのブラウザ対応のため、-webkit- プレフィックスを付けるのが推奨されています。)
p {
margin: 0; padding: 0;
font-size: 48px;
font-weight: bold;
background: linear-gradient(180deg, #aaccff 50%, #ffccaa 50%)
/* 背景を文字で切り抜く */
background-clip: text;
-webkit-background-clip: text; /* Chrome/Safari用ベンダープレフィックス */
} しかし、これだけでは文字自体が黒色のままなので、切り抜いた背景が見えません。

ステップ③:文字色を透明にする
最後に、文字の色を透明にして、背景が見えるようにします。
p {
margin: 0; padding: 0;
font-size: 48px;
font-weight: bold;
background: linear-gradient(180deg, #aaccff 50%, #ffccaa 50%);
background-clip: text;
-webkit-background-clip: text;
/* 文字を透明にする */
color: transparent;
-webkit-text-fill-color: transparent;
} これで、
文字が2色に分かれた状態が完成しました!

注意点:背景の範囲とブロック要素
ここで一つ注意点があります。
<p> タグはブロック要素であるため、検証ツールで確認するとわかるように、横幅(width)が画面いっぱいに広がっています。

例えばグラデーションの角度を 90deg(縦割り)にした場合、画面全体の真ん中で色が切り替わってしまうため、文字のある位置と色の変わり目がズレてしまうことがあります。

解決策:要素の幅を文字に合わせる
文字の中央できれいに色を変えたい場合は、以下のどちらかの方法で調整します。
p {
margin: 0; padding: 0;
font-size: 48px;
font-weight: bold;
background: linear-gradient(180deg, #aaccff 50%, #ffccaa 50%);
background-clip: text;
-webkit-background-clip: text;
color: transparent;
-webkit-text-fill-color: transparent;
display: inline-block; /* 文字幅に合わせて背景を適用 */
}応用:滑らかなグラデーションにする
今回は「くっきり2分割」にしましたが、linear-gradient の % 指定を外せば、滑らかなグラデーション文字も作れます。
p {
margin: 0; padding: 0;
font-size: 48px;
font-weight: bold;
/* 滑らかなグラデーション */
background: linear-gradient(180deg, #aaccff, #ffccaa);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
} 
こちらの方が利用シーンが多いかもしれませんね。
まとめ
今回のテクニックのおさらいです。
- background: linear-gradient(…) で背景を作る。
- -webkit-background-clip: text で背景を文字の形に切り抜く。
- -webkit-text-fill-color: transparent で文字を透明にして背景を見せる。
- 必要に応じて display: inline-block で要素の幅を調整する。
簡単なコードで表現の幅が広がるので、ぜひWebサイトのタイトルなどで使ってみてください。