ホバー
CSSだけで作るホバーで点灯するネオンボタン
2026/01/30
2026/1/27
ネオンが一瞬チラつきながら点灯する。
そんなアナログ感のある演出は、UIに取り入れると強い印象を残します。
このデモでは JavaScript を一切使わず、CSS のみでネオン管の点灯表現と、床に映り込む反射光を実装しました。
ホバーした瞬間にただ光るのではなく、一度不安定に明滅してから点灯することで、無機質になりがちなボタンに「質感」と「温度」を与えています。
Preview プレビュー
Code コード
<div class="kumonosu-grid-background"></div>
<div class="kumonosu-btn-box">
<button class="kumonosu-btn"> Button </button>
</div>
body {
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #000;
overflow: hidden;
}
/* グリッド背景(動画の雰囲気を出すため) */
.kumonosu-grid-background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image:
linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
background-size: 50px 50px;
z-index: -1;
}
.kumonosu-btn-box {
position: relative;
display: inline-block;
}
/* ボタン本体 */
.kumonosu-btn {
position: relative;
color: rgba(255, 255, 255, 0.4);
/* 消灯時は暗め */
font-size: 24px;
width: 176px;
height: 65px;
line-height: 65px;
font-weight: 400;
text-align: center;
text-decoration: none;
letter-spacing: 0.15rem;
display: block;
border-radius: 8px;
border: 2px solid rgba(255, 255, 255, 0.2);
background: transparent;
transition: all 0.2s ease;
z-index: 10;
outline: none;
cursor: pointer;
}
/* 蛍光灯の点滅アニメーション */
@keyframes neon-flicker {
0%, 18%, 22%, 25%, 53%, 57%, 100% {
color: #fff;
border-color: #fff;
box-shadow:
0 0 10px #fff,
inset 0 0 10px #fff,
0 0 20px rgba(255, 255, 255, 0.2);
text-shadow: 0 0 10px #fff, 0 0 20px rgba(255, 255, 255, 0.5);
}
20%, 24%, 55% {
color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.1);
box-shadow: none;
text-shadow: none;
}
}
/* 床の反射光の点滅アニメーション */
@keyframes reflection-flicker {
0%, 18%, 22%, 25%, 53%, 57%, 100% {
opacity: 0.7;
}
20%, 24%, 55% {
opacity: 0;
}
}
.kumonosu-btn:hover {
animation: neon-flicker 1.5s infinite alternate;
}
/* 床の反射光(ボタンの下に配置) */
.kumonosu-btn-box::before {
content: "";
position: absolute;
background: #fff;
top: 100%;
left: -20%;
/* ボタンより横に広げる */
width: 140%;
height: 120px;
/* 提示されたコードのテクニック:パースをつけて手前に倒す */
transform: perspective(1.5em) rotateX(40deg) scale(1, 0.35);
filter: blur(1.5em);
opacity: 0;
transition: all 0.3s ease;
pointer-events: none;
z-index: 1;
}
.kumonosu-btn-box:hover::before {
opacity: 0.7;
animation: reflection-flicker 1.5s infinite alternate;
}
Explanation 詳しい説明
仕様
本実装は HTML と CSS のみで構成されています。
ボタン本体に対して、テキスト・枠線・シャドウを連動させたアニメーションを適用し、
ネオン管が点灯するような表現を再現しています。
ホバー時には @keyframes による点滅アニメーションが発火し、
一瞬の消灯を挟みながら不規則に発光します。
これにより、単調なオンオフではなく、リアルなネオンらしさを演出しています。
反射光の表現
ボタン下部の反射光は、擬似要素 ::before を使用して実装しています。
要素を手前に倒すように perspective と rotateX を組み合わせることで、
床面に光が映り込んでいるような立体感を持たせています。
反射光もボタン本体と同期して点滅するため、
全体として一体感のあるネオン表現になります。
カスタマイズ
主に以下のポイントを変更することで、見た目を調整できます。
- 文字サイズ・ボタンサイズ
font-size、width、heightを変更することで簡単に調整できます。 - ネオンの色
color、border-color、box-shadow、text-shadowを同じ色味に揃えることで、
任意のネオンカラーに変更できます。 - 点滅の雰囲気
@keyframes neon-flicker内のパーセンテージや明暗の差を調整すると、
点灯までのチラつき具合を変えられます。 - 反射光の強さ
擬似要素のopacityやblurを変更することで、床への映り込みを調整できます。
注意点
CSS アニメーションとシャドウを多用しているため、
環境によっては描画コストが高くなる場合があります。
タッチデバイスでは hover が発火しないため、
使用する場合は focus や active 状態への対応を検討すると安心です。
また、暗い背景を前提としたデザインのため、
明るい背景ではネオンの効果が弱く見える点に注意が必要です。
まとめ
JavaScript を使わなくても、CSS のアニメーションとシャドウ表現を組み合わせることで、
質感のあるインタラクティブなボタン演出が可能です。
UI のアクセントや、世界観を重視したページのワンポイントとして、
印象に残るネオン表現を取り入れたい場合に向いています。