text-shadow lets you add a soft shadow or glow around text, so it’s easier to read on busy backgrounds and you can give it a nice 3D or neon look.
text-shadow は、文字のまわりに影や光のにじみを足して、背景がごちゃついていても文字を読みやすくしたり、立体感やネオンっぽい雰囲気を作ったりできる指定です。
text-shadow は「文字そのもの」に影(シャドウ)を描いて、読みやすさを上げたり、立体感・ネオンっぽさなどの演出を足したりできるCSSです。影は“箱”ではなく“文字の形(グリフ)”に沿って付きます。さらに、影はカンマ区切りで何個でも重ねられます。
CSS
.selector {
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.35);
}
1つの影は、基本的に次の順で指定します。
offset-x(横方向のずれ)offset-y(縦方向のずれ)blur-radius(ぼかし:省略可)color(色:省略可)影は「2つまたは3つの長さ + 任意の色」で指定できます。
offset-x がプラス → 右へoffset-y がプラス → 下へつまり、
CSS
text-shadow: 6px 6px 0 #000;
は「右下に、くっきりした影」です(ぼかしが0なので輪郭が硬い)。
逆に、
CSS
text-shadow: -3px 0 0 #000;
は「左に影」です。
0 だとカクッとした影注意として、text-shadow は box-shadow と違って spread(広がり量)や inset はありません。ぼかしだけです。
色は最後に置くのが読みやすいです。
CSS
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);
また、text-shadow は影を文字と一緒に塗るので、背景が写真やグラデーションでも文字を浮かせやすいのが強みです。
カンマで区切ると影を重ねられます。
しかも 最初に書いた影が一番上(手前) になります。
CSS
.title {
text-shadow:
0 1px 0 rgba(255, 255, 255, 0.55),
0 10px 20px rgba(0, 0, 0, 0.25);
}
CSS
.heroText {
color: #fff;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.55);
}
コツ:
rgbaで調整HTML
<div class="hero">
<img src="photo.jpg" alt="">
<div class="heroText">
Yugien
</div>
</div>
<img> は普通の写真CSS
.hero {
position: relative;
}
.hero img {
display: block;
max-width: 100%;
}
.heroText {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: #ffffff;
font-size: 48px;
font-weight: 700;
letter-spacing: 0.05em;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.55);
}
CSS
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.55);
これには理由があります。
横方向はずらさない(0)
下に 2px
ぼかしは 10px と広め
色は rgba の黒
#000 だと影が強すぎて文字が汚れる空・雪・白い壁など、影1つでは負ける場合があります。
そのときは「くっきり影+広い影」の2段構えにします。
CSS
.heroText {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: #ffffff;
font-size: 48px;
font-weight: 700;
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.45),
0 6px 16px rgba(0, 0, 0, 0.45);
}
写真背景では、この形が最強クラスに安定します。
小さい文字に同じ影を使うと、少し重く見えます。
CSS
@media (max-width: 600px) {
.heroText {
font-size: 32px;
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.45);
}
}
フォントサイズが下がったら、影も「少し弱める」のがコツです。
linear-gradient() を敷くtext-shadow だけ に集中)blur-radiusrgba の透明度offset-yこの順で触ると迷いません。
text-stroke が使えない・使いたくない場面でも、影の多重で縁取りっぽくできます。
CSS
.textOutline {
color: #fff;
text-shadow:
1px 0 0 #000,
-1px 0 0 #000,
0 1px 0 #000,
0 -1px 0 #000;
}
縁取りは「影を上下左右に1pxずつ置く」ことで作れます。
太くしたい場合は、2px や斜め方向の影を追加しますが、文字が小さいときは太りすぎに注意します。
白背景に近い写真や、空・室内写真向けです。
アウトライン+薄いぼかし影 を併用します。
CSS
.textOutlineStrong {
color: #ffffff;
text-shadow:
1px 0 0 #000,
-1px 0 0 #000,
0 1px 0 #000,
0 -1px 0 #000,
0 4px 10px rgba(0, 0, 0, 0.35);
}
ポイント
CSS
.neon {
color: #eaffff;
text-shadow:
0 0 6px rgba(120, 255, 255, 0.80),
0 0 18px rgba(120, 255, 255, 0.55),
0 0 42px rgba(120, 255, 255, 0.35);
}
コツ:
offset を 0 0 にして“発光”に寄せるCSS
.textNeon {
color: #eaf6ff;
text-shadow:
0 0 4px rgba(56, 189, 248, 0.8),
0 0 10px rgba(56, 189, 248, 0.6),
0 0 20px rgba(56, 189, 248, 0.4);
}
ポイントは次の3つだけです。
offset を 0 0「夜の写真」「暗い背景」で使うなら、外側にもう一段だけ光を足す のが安全です。
CSS
.textNeonStrong {
color: #f0fbff;
text-shadow:
0 0 3px rgba(56, 189, 248, 0.9),
0 0 8px rgba(56, 189, 248, 0.7),
0 0 18px rgba(56, 189, 248, 0.5),
0 0 36px rgba(56, 189, 248, 0.35);
}
これが「ネオンっぽく見える」最大のコツです。
CSS
/* NG例 */
text-shadow: 2px 2px 10px cyan;
→ 影に見えてしまい、ネオン感が消えます。
ネオンは 必ず 0 0
CSS
/* NG例 */
text-shadow:
0 0 10px red,
0 0 20px blue;
→ チカチカして練習向きではありません
1色を透明度違いで重ねる
CSS
/* NG例 */
text-shadow: 0 0 2px cyan;
→ ただの縁ボケ文字になります
ネオンは 10px 以上を必ず含める
文字を“凹ませたように”見せるのも多重影の得意技です。
CSS
.emboss {
color: #666;
text-shadow:
0 1px 0 rgba(255, 255, 255, 0.65),
0 -1px 0 rgba(0, 0, 0, 0.25);
}
上方向に暗い影、下方向に明るい影…などを入れ替えると印象が変わります。
エンボス/押し込みは、text-shadow を 「明るい影」と「暗い影」 で上下(または斜め)に置いて、光源があるように見せるのが基本です。
(※ text-shadow 自体に inset は無いので、“それっぽく見せる”やり方です)
白背景に載せても“汚れ”に見えにくい、練習向けの基本形です。
HTML
<p class="embossText">Yugien</p>
CSS
.embossText {
color: #1a1a1a;
font-size: 48px;
font-weight: 700;
letter-spacing: 0.05em;
/* 上にハイライト、下に影 → 盛り上がって見える */
text-shadow:
0 -1px 0 rgba(255, 255, 255, 0.85),
0 2px 0 rgba(0, 0, 0, 0.18);
}
Yugien
見え方のコツ
“へこんだ刻印”っぽい見た目です。
白背景でも成立させるために、暗い影を上に・明るい影を下に入れ替えます。
HTML
<p class="insetText">Yugien</p>
CSS
.insetText {
color: #2a2a2a;
font-size: 48px;
font-weight: 700;
letter-spacing: 0.05em;
/* 上に暗い影、下に明るいハイライト → 押し込みっぽい */
text-shadow:
0 1px 0 rgba(0, 0, 0, 0.22),
0 -1px 0 rgba(255, 255, 255, 0.75);
}
Yugien
写真の上だとエンボス/押し込みは背景次第で弱く見えます。
そのため、薄い“読みやすさ用の影”を最後に1つ足すのが実務で安定します。
CSS
.heroTextEmboss {
color: #f7fbff;
font-size: 48px;
font-weight: 700;
letter-spacing: 0.06em;
text-shadow:
0 -1px 0 rgba(255, 255, 255, 0.55),
0 2px 0 rgba(0, 0, 80, 0.28),
0 6px 14px rgba(0, 0, 0, 0.35);
}
暗背景では「白ハイライト」が強すぎたり、影が沈んだりするので、値を少し調整します。
CSS
@media (prefers-color-scheme: dark) {
.embossText,
.heroTextEmboss {
color: #f3f6ff;
text-shadow:
0 -1px 0 rgba(255, 255, 255, 0.18),
0 2px 0 rgba(0, 0, 0, 0.55),
0 8px 18px rgba(0, 0, 0, 0.45);
}
.insetText {
color: #e9eeff;
text-shadow:
0 1px 0 rgba(0, 0, 0, 0.65),
0 -1px 0 rgba(255, 255, 255, 0.12);
}
}
text-shadow は 文字 に影をつけます「下線にも影がついて、思ったよりモコモコする」みたいなことが起きたら、ここが理由です。
親要素などに overflow: hidden(または clip 系)があると、要素の外側が表示されないので、影も一緒に切れます。
対策例:
overflow を見直すpadding を増やす多重影は、特に小さいフォントサイズで“太り”やすいです。
対策:
blur-radius を少し上げる(くっきり影より馴染む)影は“補助”なので、やりすぎると逆効果です。
安全ライン(迷ったらここ):
0 1px 6px rgba(0,0,0,.35)CSS
.safeShadow {
text-shadow:
0 1px 1px rgba(0, 0, 0, 0.35),
0 6px 14px rgba(0, 0, 0, 0.25);
}
CSS
:root {
--ts-soft: 0 2px 10px rgba(0, 0, 0, 0.35);
--ts-hard: 2px 2px 0 rgba(0, 0, 0, 0.45);
}
.cardTitle {
text-shadow: var(--ts-soft);
}
モバイルの小さな文字に強い影を入れると、読みにくくなりがちです。
CSS
.heading {
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.45);
}
@media (max-width: 600px) {
.heading {
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.35);
}
}
影の変化は見た目が派手なわりに、端末によっては重く感じることがあります。
box-shadowfilter: drop-shadow(...)text-shadowoverflow: hidden があると、要素の外側が表示されないため影も切れます。
overflow を見直すか、影が収まるように padding を増やしてみてください。
text-shadow: none; で上書きされていないか、対象が本当にテキストか(画像や背景ではないか)を確認します。
offset-x offset-y blur color」です。まずは色を最後に置く書き方にすると混乱しにくいです。
overflow: hidden が原因になりやすいです。overflow の見直しや padding 追加で対処します。
blur-radius を上げる、影色を rgba で薄くする、の順で調整すると戻しやすいです。