CSSだけで作るホバーで点灯するネオンボタン

ホバー

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 を使用して実装しています。
要素を手前に倒すように perspectiverotateX を組み合わせることで、
床面に光が映り込んでいるような立体感を持たせています。

反射光もボタン本体と同期して点滅するため、
全体として一体感のあるネオン表現になります。

カスタマイズ

主に以下のポイントを変更することで、見た目を調整できます。

  • 文字サイズ・ボタンサイズ
    font-sizewidthheight を変更することで簡単に調整できます。
  • ネオンの色
    colorborder-colorbox-shadowtext-shadow を同じ色味に揃えることで、
    任意のネオンカラーに変更できます。
  • 点滅の雰囲気
    @keyframes neon-flicker 内のパーセンテージや明暗の差を調整すると、
    点灯までのチラつき具合を変えられます。
  • 反射光の強さ
    擬似要素の opacityblur を変更することで、床への映り込みを調整できます。

注意点

CSS アニメーションとシャドウを多用しているため、
環境によっては描画コストが高くなる場合があります。

タッチデバイスでは hover が発火しないため、
使用する場合は focusactive 状態への対応を検討すると安心です。

また、暗い背景を前提としたデザインのため、
明るい背景ではネオンの効果が弱く見える点に注意が必要です。

まとめ

JavaScript を使わなくても、CSS のアニメーションとシャドウ表現を組み合わせることで、
質感のあるインタラクティブなボタン演出が可能です。

UI のアクセントや、世界観を重視したページのワンポイントとして、
印象に残るネオン表現を取り入れたい場合に向いています。