立体ボタンは「影・光・奥行き」で“触れる質感”を作る UI テクニック
平面的なボタンより、立体ボタンは 「押せそう」「触れそう」 という感覚を強く伝えます。 そのために必要なのは、 影(box-shadow)・光(グラデーション)・奥行き(transform) の3つ。
初心者でも迷わないように、 CSS と Tailwind CSS の両方で、例題を交えて丁寧に解説します。
立体ボタンの基本構造
影で“浮き上がり”、光で“丸み”、押し込みで“立体感”を作る
立体ボタンは次の3ステップで作れます。
- 下方向に影を落とす → 浮いて見える
- 上方向に光を入れる → 丸みが出る
- ホバーで少し持ち上げる → 触れる質感が出る
この3つを組み合わせるだけで、 「立体ボタンらしさ」が一気に完成します。
例1:最も基本的な立体ボタン(影+光)
CSS 版
.btn-3d {
background: linear-gradient(#3b82f6, #1e40af); /* 上が明るく下が暗い → 立体感 */
color: #fff;
padding: 0.7rem 1.6rem;
border-radius: 999px;
font-weight: 600;
box-shadow: 0 6px 0 #1e3a8a; /* 下に濃い影を落とす */
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.btn-3d:active {
transform: translateY(4px); /* 押し込まれる */
box-shadow: 0 2px 0 #1e3a8a;
}
CSS<button class="btn-3d">立体ボタン</button>
HTMLTailwind 版
<button
class="px-6 py-3 rounded-full font-semibold text-white
bg-[linear-gradient(#3b82f6,#1e40af)]
shadow-[0_6px_0_#1e3a8a]
active:translate-y-[4px]
active:shadow-[0_2px_0_#1e3a8a]
transition">
立体ボタン
</button>
HTML深掘りポイント
影を「真下」に落とすことで、 ボタンが“浮いている”ように見えます。 押したときに影を薄くすることで、 「押し込まれた」感覚が自然に伝わります。
例2:ふんわり浮く“柔らかい立体ボタン”
CSS 版
.btn-soft {
background: #3b82f6;
color: #fff;
padding: 0.7rem 1.6rem;
border-radius: 999px;
font-weight: 600;
box-shadow:
0 4px 12px rgba(0,0,0,0.25),
inset 0 2px 4px rgba(255,255,255,0.4); /* 内側の光で丸みを出す */
transition: transform 0.2s ease;
}
.btn-soft:hover {
transform: translateY(-2px);
}
CSSTailwind 版
<button
class="px-6 py-3 rounded-full font-semibold text-white bg-blue-500
shadow-[0_4px_12px_rgba(0,0,0,0.25),inset_0_2px_4px_rgba(255,255,255,0.4)]
hover:-translate-y-[2px]
transition">
ソフト立体ボタン
</button>
HTML深掘りポイント
内側の光(inset shadow)を入れると、 ボタンの表面が丸く見えます。 これは「柔らかい立体感」を作るときの定番テクニックです。
例3:押し込まれる“ネオモーフィズム風”立体ボタン
CSS 版
.btn-neo {
background: #e5e7eb;
color: #111827;
padding: 0.7rem 1.6rem;
border-radius: 16px;
font-weight: 600;
box-shadow:
6px 6px 12px #d1d5db,
-6px -6px 12px #ffffff; /* 凹凸の影で立体感 */
transition: box-shadow 0.2s ease;
}
.btn-neo:active {
box-shadow:
inset 6px 6px 12px #d1d5db,
inset -6px -6px 12px #ffffff; /* 押し込まれた影 */
}
CSSTailwind 版
<button
class="px-6 py-3 rounded-xl font-semibold text-slate-900 bg-slate-200
shadow-[6px_6px_12px_#d1d5db,-6px_-6px_12px_#ffffff]
active:shadow-[inset_6px_6px_12px_#d1d5db,inset_-6px_-6px_12px_#ffffff]
transition">
ネオモーフィズム
</button>
HTML深掘りポイント
影を「両方向」に落とすことで、 ボタンが“浮き出ている”ように見えます。 押したときに inset に切り替えると、 「へこむ」立体感が自然に表現できます。
例4:グラデーション+光沢の“高級感ボタン”
CSS 版
.btn-glossy {
background: linear-gradient(#f97316, #ea580c);
color: #fff;
padding: 0.7rem 1.6rem;
border-radius: 999px;
font-weight: 600;
position: relative;
overflow: hidden;
}
.btn-glossy::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
rgba(255,255,255,0.6),
rgba(255,255,255,0)
);
opacity: 0.4;
transform: translateY(-50%);
}
CSSTailwind 版
<button
class="relative overflow-hidden px-6 py-3 rounded-full font-semibold text-white
bg-[linear-gradient(#f97316,#ea580c)]">
<span class="absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.6),rgba(255,255,255,0))] opacity-40 -translate-y-1/2"></span>
<span class="relative">光沢ボタン</span>
</button>
HTML深掘りポイント
上部に白いグラデーションを重ねることで、 「光沢のある立体ボタン」が作れます。 LP のメイン CTA に向いています。
例5:影が伸びる“浮き上がりホバー”
CSS 版
.btn-float {
background: #2563eb;
color: #fff;
padding: 0.7rem 1.6rem;
border-radius: 999px;
font-weight: 600;
box-shadow: 0 4px 12px rgba(0,0,0,0.25);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.btn-float:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0,0,0,0.35);
}
CSSTailwind 版
<button
class="px-6 py-3 rounded-full font-semibold text-white bg-sky-600
shadow-[0_4px_12px_rgba(0,0,0,0.25)]
hover:-translate-y-[4px]
hover:shadow-[0_12px_24px_rgba(0,0,0,0.35)]
transition">
浮き上がりボタン
</button>
HTML深掘りポイント
影を大きくして、ボタンを少し持ち上げると 「ふわっと浮く」立体感が出ます。 ホバーアニメとして非常に人気のあるパターンです。
立体ボタン設計の重要ポイント
影は「方向」「濃さ」「距離」で印象が決まる
下に濃い影 → 浮いて見える 内側の影 → 丸みが出る 両方向の影 → ネオモーフィズム
影の設計が立体ボタンの本質です。
グラデーションは「上を明るく、下を暗く」
光は上から当たるので、 上が明るく下が暗いグラデーションが自然な立体感を作ります。
押し込みは「translateY と inset shadow」
押したときに translateY(◯px) box-shadow: inset ... を使うと、リアルな押し込み表現になります。
そのまま使える「万能立体ボタン」テンプレート(Tailwind)
<button
class="px-6 py-3 rounded-full font-semibold text-white text-sm
bg-[linear-gradient(#3b82f6,#1e40af)]
shadow-[0_6px_0_#1e3a8a]
active:translate-y-[4px]
active:shadow-[0_2px_0_#1e3a8a]
hover:-translate-y-[2px]
transition">
立体ボタン
</button>
HTMLこのテンプレートは 「影・光・押し込み・浮き上がり」 すべて揃っているので、どんな UI にも使えます。
さいごに
立体ボタンは、 影・光・奥行きの3つをどう組み合わせるか がすべてです。
ほんの少しの影や動きで、 「押せそう」「触れそう」という感覚が生まれ、 UI の質感が一段上がります。
もしあなたが作っているボタン(LPのCTA、フォーム送信ボタンなど)があれば、 そのボタンをベースに“最適な立体感”を一緒に設計できます。


