Community画像github.com

atwalabs/cube-icons

依存関係のないCube Iconsエンジン(2Dキャンバス、WebGL不要)を使って、3Dキューブから構築されたアニメーションピクセルアイコンをWebページに追加します。キューブが飛来してアイコンを形成し、静止し、また飛び散ります。61種類の既成アイコン、11種類のルック(フラット、ソフト、クレイ、キャンディ、ペーパー、アウトライン、ピクセル、ガラス、ネオン、ワイヤー、ホロ)、スクロール駆動の構築、爆発、マグネット、モーフ効果、ピクセルテキストフォントを備えています。

cube-icons とは?

Cube Iconsは、ピクセルアートを3Dキューブで表現する軽量なアニメーションアイコンライブラリです。依存関係がなく、2D Canvas上で動作するため、WebGLを必要とせず、パフォーマンスが高いのが特徴です。61種類の既成アイコンに加え、カスタムアイコンを簡単に描画でき、11種類のビジュアルスタイル(ソフト、クレイ、ガラスなど)を適用できます。アイコンはマウスホバーやスクロールに連動してキューブが飛来・構築・爆発・モーフするなど、多彩なアニメーションをサポートします。Vanilla JS、React、Next.js、Vue、Svelte、Framer、Webflow、WordPressなど、幅広い環境で利用可能で、メニューやローダー、空の状態、ヒーローセクションなど、ユーザーの注目を集めるインタラクティブなビジュアル要素として最適です。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/atwalabs/cube-icons/tree/HEAD/skill/cube-icons

Installed? Explore more 画像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Cube Icons

Cube Iconsは、小さなピクセル描画を3Dキューブとして<canvas>上にレンダリングします。色のついた各ピクセルは、短いキューブの積み重ねになります。エンジンはassets/cubes.js(約9KB、gzip圧縮時、依存関係なし)、アイコンライブラリはassets/icons.jsです。すべてブラウザ上で動作します。

ワークフロー

  1. 配置する。 アイコンの動作を決めます:ホバーで構築(メニュー、ボタン、カード)、スクロールで構築(セクション、ヒーロー)、一度だけ表示(空の状態、ローダー)、またはポインターに追従(マグネット)。実際のテキストはキャンバスの隣にHTMLで保持します。
  2. インストールする。 assets/cubes.jsとassets/icons.jsをプロジェクトの静的フォルダにコピーし、2つの<script>タグで読み込みます。icons.jsを先に読み込んでください。またはCDNから読み込むこともできます:https://cdn.jsdelivr.net/gh/atwalabs/[email protected]/icons.js と .../cubes.js。フレームワークでは、ブラウザ上でのみ読み込んでください(references/recipes.mdの「Frameworks」を参照)。
  3. アイコンを選ぶか描く。 適切な組み込みアイコンがある場合はその名前を使用します(下記リスト)。それ以外の場合は、以下の「アイコンを描く」に従って、パレットキーの行として描画します。
  4. コードを書く。 サイズ指定されたキャンバス上にステージを作成し、show、scroll、build、sequence、explodeのいずれかを呼び出します。references/recipes.mdの該当するレシピから始めてください。
  5. 仕上げる。 キャンバスにCSSの幅と高さを設定し、role="img"とaria-label(装飾的な場合はaria-hidden="true")を追加し、ホバーエフェクトはキーボードフォーカス時にも動作させ、コンポーネントがアンマウントされたらstage.destroy()を呼び出します。

最小構成

<canvas id="hero-icon" style="width:360px;height:280px" role="img" aria-label="A rocket"></canvas>
<script src="icons.js"></script>
<script src="cubes.js"></script>
<script>
  const stage = CubeIcons.stage(document.getElementById("hero-icon"), { look: "soft" });
  stage.show("rocket");
</script>

組み込みアイコン

close, bolt, sword, briefcase, person, phone, browser, envelope, chart, terminal, heart, star, rocket, bulb, camera, gamepad, music, globe, lock, folder, coffee, chat, clock, check, search, download, cursor, home, bell, gear, calendar, pin, wifi, battery, play, arrow, trash, pencil, code, key, bag, cart, gift, trophy, diamond, crown, book, headphones, umbrella, flag, sun, moon, cloud, tree, leaf, fire, planet, sparkle, smile, ghost, robot.

アイコンを描く

アイコンは等しい長さの文字列の配列で、画像のように上から下に読みます。各文字はパレットキーであり、.は空を表します。

キー色キー色
BコバルトブルーGグリーン
WペーパーホワイトPライラック
KグレーCシアン
LライトグレーMピンク
DニアブラックNブラウン
RレッドOオレンジ
Yイエロー

アイコンを読みやすくするルール:

  • 幅8~16列、高さ6~14行。 各行は同じ長さ。大きくすると塊感が失われます。ステージはデフォルトで900キューブ(セル数×奥行き)を保持します。
  • まずシルエット。 1色で輪郭が認識できるようにしてから詳細を追加。行をざっと読んで確認します。
  • 輪郭と塗りつぶし: 塗りつぶし色の周りに暗いまたは対照的な輪郭(K、D)、次に1つのアクセント詳細(金色の留め金、赤い旗、青い窓)。
  • 対称性: 対称なオブジェクト(トロフィー、ベル、顔)では、各行を鏡像にします。
  • 孤立したセルは避ける: 目やキラキラなど意図的な詳細を除いて、孤立したセルは避けます。
  • 名前で配置するには、ライブラリに追加します:Object.assign(window.CUBE_ICONS, { badge: [...] })。または、行を直接stage.show(rows)に渡します。
  • 独自の色: アイコンは追加のパレットキーを{ colors: { a: "#eb234f", b: "#79a93e" }, rows: ["..aa..", "bbbbbb"] }として持つことができます。それらには小文字を使用します。要件に正確な色が必要でない限り、組み込みパレットを優先します。

例(コーヒーカップ):

coffee: [
  "..W..W.....",
  "...W..W....",
  "...........",
  "KKKKKKKKK..",
  "KWWWWWWWKKK",
  "KWWWWWWWK.K",
  "KWWWWWWWKKK",
  "KWWWWWWWK..",
  ".KKKKKKK...",
],

文字列の場合は、CubeIcons.text("Hello", { color: "B" })を使用します:A~Z、0~9、そして. , : ! ? - + ' & /を含む5行のピクセルフォントです。

最も重要なオプション

CubeIcons.stage(canvas, {
  look: "soft",      // flat(デフォルト) · soft · clay · candy · paper · outline · pixel · glass · neon · wire · holo
  view: "front",     // front(デフォルト) · iso
  depth: 2,          // キューブの奥行き、1~5
  gap: 0.06,         // キューブ間のスペース、0~0.4
  tint: null,        // 単一ブランドインク、例: "#2f3cff": すべての色をその色合いで再描画
  ease: "expo",      // expo(デフォルト、ソフトランディング) · cubic · back · elastic · linear
  duration: 700,     // キューブ1つあたりの飛行時間(ms)
  stagger: 260,      // キューブごとのランダム遅延(ms)
  spin: 0.25,        // 飛行中の回転数
  from: "auto",      // auto · below · above · left · right · center
  magnet: 0,         // ポインター付近のキューブが手前に飛び出す(1.5を試す)
  glow: 0,           // キューブ周りのぼかし、0~1(暗いページでtintと相性が良い)
  float: 0,          // アイドル時の動き、0~1:アイコンが揺れたり浮いたり、ゆるんだキューブが漂う
  tilt: true,        // マウスに合わせて奥行きが傾く
});

ルックをページに合わせる:soft、clay、candy、paper、outlineは明るいページに適しています。glass、neon、holoは暗いページに適しています。wireを明るいtintと組み合わせると、暗いまたは色付きのセクションに適しています。pixelはどこでもフラットなレトロピクセルアートです。完全なオプションとAPIテーブルはreferences/api.mdにあります。

メソッド

  • stage.show(icon):アイコンを構築します(名前または行)。別のアイコンを表示すると、モーフィングして変化します。
  • stage.clear():飛び散ってフェードアウトします。
  • stage.build(icon, progress):部分的に構築、0~1、下の行から順に。スクロール、アップロード進捗、タイマーから駆動します。
  • stage.explode(clientX?, clientY?):キューブをバラバラにし、元に戻ります。
  • stage.burst():キューブがビューアに向かって急接近しフェードアウトします(メニューやページ遷移)。
  • stage.scatter(count, { icon }):キャンバス上にキューブを散らばらせます。後でshow()を呼ぶとアイコンに集まります。
  • stage.set(options)、stage.destroy()。
  • CubeIcons.scroll(stage, icon, { mode: "scrub" | "trigger" })、CubeIcons.sequence(stage, icons, { every })、CubeIcons.still(canvas, icon, options)(静的サムネイル用)。

よくある間違い

  • キャンバスサイズ未設定。 キャンバスにはCSSの幅と高さが必要です。設定しないと高さ0ピクセルでレンダリングされます。
  • スクリプトの順序。 名前付きアイコンでshow()を呼び出す前にicons.jsを、CubeIconsを呼び出す前にcubes.jsを読み込んでください。
  • サーバーサイドレンダリング。 Next.js、Nuxt、SvelteKitではモジュールのトップレベルでCubeIconsにアクセスしないでください。エフェクトまたはマウントフック内でステージを作成してください。
  • キューブが多すぎる。 奥行き3の20×20アイコンは1,200キューブになります。奥行きを下げるか、小さく描画するか、maxを上げてください。
  • ホバーだけ。 focusでもトリガーして、キーボードユーザーもエフェクトを見られるようにしてください。

リファレンス

  • references/recipes.md:メニュー、ボタン、空の状態、ローダー、モーフシーケンス、爆発、マグネット、テキスト、フィーチャーカード、スクロールセクション、すべてのフレームワーク用のコピー可能なコード。
  • references/api.md:すべてのオプション、メソッド、ヘルパー(デフォルト値付き)。
  • assets/cubes.js、assets/icons.js:プロジェクトにコピーするエンジンとアイコンライブラリ。

関連スキル