Web上でメタルを再現!液体金属が流れ続けるリキッドメタルボタン

アニメーション

Web上でメタルを再現!液体金属が流れ続けるリキッドメタルボタン

投稿日2026/01/14

更新日2026/1/22

Web上で「金属らしさ」を表現しようとすると、どうしても静的なグラデーションや影表現に寄りがちです。
このコードでは、液体金属が内部で常に流れ続けているような質感をシェーダーで描画し、ボタンUIとして成立させています。

マウス操作に依存せず、時間経過だけで動き続けるため、「置いておくだけで存在感が出るUI表現」として使えるのが特徴です。

Preview プレビュー

Code コード

<div class="kumonosu-outer-frame">
    <div class="kumonosu-liquid-trench">
        <div id="kumonosu-shader-container"></div>
        <div class="kumonosu-inner-content">
            Liquid Metal
        </div>
    </div>
</div>
:root {
  --bg-color: #d8d8d8;
  --outer-frame: #c0c0c0;
  --inner-button: #ffffff;
}

*, *::before, *::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: var(--bg-color);
  font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
}

/* グレーのベース部分 */
.kumonosu-outer-frame {
  position: relative;
  width: 360px;
  height: 110px;
  background: var(--outer-frame);
  border-radius: 55px;
  display: flex;
  justify-content: center;
  align-items: center;
  box-shadow: 0 20px 40px rgba(0,0,0,0.13), inset 0 1px 2px rgba(255,255,255,0.5);
  cursor: pointer;
  transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

.kumonosu-outer-frame:active {
  transform: scale(0.96);
}

/* 液体金属が流れる溝 */
.kumonosu-liquid-trench {
  position: relative;
  width: calc(100% - 7px);
  height: calc(100% - 7px);
  background: #000;
  border-radius: 50px;
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* シェーダー描画エリア */
#kumonosu-shader-container {
  position: absolute;
  width: 150%;
  height: 150%;
  z-index: 1;
  filter: contrast(1.2) brightness(1.1);
}

/* メインボタン */
.kumonosu-inner-content {
  position: absolute;
  width: calc(100% - 5px);
  height: calc(100% - 5px);
  background: linear-gradient(#f3f3f3, #c4c4ca);
  border-radius: 45px;
  z-index: 2;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 28px;
  color: #000;
  pointer-events: none;
}
import {
  liquidMetalFragmentShader,
  ShaderMount
} from "https://esm.sh/@paper-design/shaders";

const container = document.getElementById("kumonosu-shader-container");

// 画像の設定値を反映したパラメータ
const params = {
  u_repetition: 5.0,    // 繰り返し (Repetition)
  u_softness: 0.46,     // 柔らかさ (Softness)
  u_shiftRed: 0.3,      // 赤ずれ (Red)
  u_shiftBlue: 0.3,     // 青ずれ (Blue)
  u_distortion: 0.2,    // 歪み量 (Distortion)
  u_contour: 0.1,       // 輪郭強度 (Contour)
  u_angle: 44.0,        // 角度 (Angle)
  u_scale: 5.3,         // スケール (Scale)
  u_shape: 1.0,         // 基本となる形状の形(画像にないため維持)
  u_offsetX: 0,         // 横方向の位置(維持)
  u_offsetY: 0.8        // 縦方向の位置(維持)
};

// ShaderMountのインスタンス作成
const shader = new ShaderMount(
  container,
  liquidMetalFragmentShader,
  params,
  undefined,
  0.6
);

const frame = document.querySelector('.kumonosu-outer-frame');

// アニメーション用の変数
let time = 0;
// 画像の「歪み量 0.2」に合わせて初期値を調整
let targetDistortion = 0.2;    
let currentDistortion = 0.2;

function animate() {
  time += 0.0005;

  const radius = 0.8;
  params.u_offsetX = Math.cos(time) * radius;
  params.u_offsetY = Math.sin(time * 0.8) * radius + 0.5;

  // 歪みのアニメーション補間
  currentDistortion += (targetDistortion - currentDistortion) * 0.02;
  params.u_distortion = currentDistortion;

  requestAnimationFrame(animate);
}
animate();

Explanation 詳しい説明

仕様について

このボタンは、CSSだけでは再現が難しいリキッドメタル(液体金属)表現を、WebGLベースのシェーダーによって実装しています。
金属の表面が常に揺らぎ、内部で流動しているような見た目を作ることで、静的なメタリックボタンとは一線を画すUIアニメーションになっています。

マウス操作には依存せず、時間経過のみで動き続ける設計のため、ページを開いた瞬間から視覚的な存在感を発揮します。
また、歪みやオフセットの変化は補間処理されており、急激な動きにならないよう制御されています。

補足として、技術的なポイントは以下の通りです。

  • WebGLシェーダーを使った液体金属風ノイズ表現
  • サイン波・コサイン波による自動アニメーション制御
  • CSSはフレーム構造と押下時のUI演出に限定
  • 視覚表現の主役はシェーダー側に集約

「CSSメタルボタン」や「WebGL UI表現」を探している方にとって、応用のヒントになる仕様です。

Liquid Metal(リキッドメタル)生成ジェネレータがありますので、触ってみてください。

使用シーン

このリキッドメタルボタンは、一般的なフォーム送信ボタンよりも、世界観やコンセプトを伝えるためのUI表現に向いています。
特に、デザイン性を重視したWebサイトや、インタラクティブな演出を求められる場面で効果を発揮します。

金属が流れ続けるような動きは、近未来感・高級感・実験的な印象を与えるため、
「普通のボタンでは物足りない」と感じる場面に適しています。

想定される使用例としては、以下のようなケースがあります。

  • WebデザインギャラリーやUI実験ページ
  • ブランドサイトやプロダクト紹介ページのアクセント
  • WebGL・CSSアニメーションの技術デモ
  • コンセプトページやヒーローエリア内の象徴的UI

Web上でメタル質感を再現したUIとして、視線を集めたい場所に配置すると効果的です。

注意点

この実装は視覚表現を重視しているため、実務で使う際にはいくつか注意点があります。
特に、パフォーマンスやユーザビリティの観点では、用途を選ぶ必要があります。

WebGLシェーダーは端末性能の影響を受けやすく、低スペック端末や古いブラウザでは描画負荷が高くなる可能性があります。
また、常時アニメーションしているため、長時間表示するページでは慎重な設計が求められます。

実装時に意識したいポイントは以下です。

  • モバイル端末でのパフォーマンス確認
  • 動きを抑えた代替UIの用意(アクセシビリティ配慮)
  • 実用ボタンとして使う場合の視認性・操作性チェック
  • 常設ではなく、演出用UIとして限定的に使用

メタリックUIやアニメーションボタンのデモ表現として捉えるのが安全です。

おすすめ環境・対応ブラウザ

このリキッドメタルボタンは、WebGLシェーダーを使用して液体金属の質感や流動アニメーションを再現するUI表現のため、表示環境によって体験の質が大きく変わります。
滑らかな動きやメタリックな反射表現を正しく表示するには、モダンなブラウザと十分な描画性能を持つ環境が推奨されます。

基本的には、デザイン検証・UIデモ・コンセプト表現として、
デスクトップ環境での閲覧を前提に設計すると安心です。

推奨される環境・ブラウザは以下の通りです。

  • デスクトップPC / ノートPC
  • GPU(内蔵GPU含む)を搭載した端末
  • WebGLが有効な環境
  • Google Chrome(最新版推奨)
  • Microsoft Edge(Chromium版)
  • Safari(比較的新しいバージョン)
  • Firefox(WebGL有効時)

一方で、以下のような環境では注意が必要です。

  • 古いブラウザやWebGL非対応環境
  • 低スペックなスマートフォン端末
  • バッテリー制限・省電力モード中のデバイス

これらの環境では、フレームレート低下や描画の乱れが発生する可能性があります。

実サイトへ組み込む場合は、環境差を考慮した設計が重要です。

  • WebGL非対応時は静的なCSSボタンへフォールバック
  • モバイルではアニメーションを停止または軽量化
  • prefers-reduced-motion への対応を検討

WebGLボタン・メタリックUI・アニメーション表現を安全に使うためにも、
対応環境を明示した上での導入をおすすめします。