背景画像上のテキストを「読みやすく」する:text-shadowの正攻法と最適解
フロントエンドエンジニアとして数年現場にいると、デザイナーから「この素敵な背景画像の上に、白文字を載せてくれ」というオーダーを受ける機会が必ずありますよね。その瞬間、あなたは心の中で「可読性が死ぬぞ…」と呟くはずです。
オーバーレイを真っ黒に塗りつぶせば解決しますが、それでは画像の情緒が消えてしまう。そんな時、僕らが頼るべきは `text-shadow` です。今回は、単に「影をつける」だけでなく、ブラウザの描画負荷を考慮した「実務で使える」テクニックを深掘りします。
—
なぜ text-shadow が「最適解」なのか
背景画像が複雑な場合、テキストの周囲に「淡い影」を落とすのが最も軽量かつエレガントな解決策です。
なぜ `text-shadow` なのか。それは、`filter: drop-shadow()` や親要素への `box-shadow` に比べて、DOM構造を汚さず、描画コストが極めて低いからです。特にスマホのようなリソースが限られた環境では、この選択がユーザーのスクロール体験に直結します。
ブラウザが裏側でやっていること
ブラウザのレンダリングエンジン(BlinkやWebKit)は、`text-shadow` を適用すると、文字のグリフ(形状)を複製し、指定されたオフセット量だけずらしてぼかし処理(ガウスぼかし)をかけます。
この時、影の範囲(blur radius)が大きすぎると、ブラウザはGPUメモリを大量に消費し、アニメーション中にカクつきが発生します。つまり、「影は広げすぎず、不透明度を調整する」のが、パフォーマンスを守るための鉄則なんです。
—
実践的テクニック:現場で使える「美しく溶け込む影」
ただ黒い影を置くだけでは「いかにも付け足した感」が出てしまいます。プロとして目指すべきは、影があることに気づかれないほど自然に、しかし確実に文字を浮かび上がらせる手法です。
以下のコードは、背景が多少ノイジーであってもテキストを浮き立たせつつ、計算された影で洗練された印象を与えるためのテンプレートです。
.hero-text {
/ 白文字をベースに、微細な影で視認性を確保 /
color: #ffffff;
/
1. わずかにオフセット(1px, 1px)させることで、文字のエッジを際立たせる
2. ぼかし(2px)は最小限に留め、滲みを防ぐ
3. 影の色は真っ黒(#000)ではなく、背景に馴染む濃いグレー(#000/0.5)を推奨
/
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
/
補足:もし背景が特に明るい/暗いが入り混じる場所なら、
複数レイヤーの影で「ハロー(後光)」を作るのも手です
/
/ text-shadow:
0 0 2px rgba(0, 0, 0, 0.6),
0 0 4px rgba(0, 0, 0, 0.4);
/
}
なぜ `rgba(0, 0, 0, 0.5)` なのか
真っ黒(`#000`)の影は、背景色が明るい場合に「浮き」を生み出し、逆に背景が暗いと文字が汚れて見えます。半透明の黒を重ねることで、背景画像の色味をわずかに透過させ、「画像から文字が少しだけ浮き上がっているような自然な立体感」を演出できるからです。
—
パフォーマンスとアクセシビリティの注意点
最後に、シニアとして伝えておきたい「罠」を2つ共有します。
1. 過度な「ぼかし」は避ける
`text-shadow: 0 0 20px black;` のように大きなぼかし半径を指定すると、GPUの塗りつぶしコストが急増します。特にスクロールに合わせてテキストが動くようなレイアウトでは、ブラウザの描画ループ(Paint)に悪影響を与える可能性があるため、ぼかし半径は「1px〜4px」程度に抑えるのが無難です。
2. コントラスト比の確保
`text-shadow` はあくまで補助輪です。WCAG(Webコンテンツ・アクセシビリティ・ガイドライン)の基準を満たすには、やはりベースのテキスト色と背景色のコントラスト比(最低でも4.5:1)を考慮すべきです。
「影があるから大丈夫」と過信せず、まずはCSSカスタムプロパティで背景色を変えてみて、影がなくても読めるかチェックする習慣をつけてください。
—
現場のエンジニアへ
Web制作において「細かい調整」は、全体の完成度を決定づける最後のピースです。`text-shadow` を単なる装飾ツールとしてではなく、「ユーザーにストレスを与えないための視認性エンジニアリング」として使いこなせれば、あなたの作るインターフェースは一段上のレベルに到達します。
明日からの実装で、ぜひこの「0 1px 2px」の黄金比を試してみてください。きっと、デザイナーからの信頼も厚くなるはずですよ。

コメント