Skip to content

tznthou/holo-card

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Holo-Card Studio

License Vanilla JS Tailwind CSS

← 回到 Muripo HQ | English

視覺化 3D 卡片編輯器,透過簡單的滑桿與色彩選擇,創造出類似 Apple Credit Card 或雷射箔面遊戲王卡的高級質感卡片,並一鍵匯出可用的 HTML + CSS 代碼。


功能特色

  • 即時 3D 預覽:滑鼠移動即可體驗真實的 3D 傾斜效果
  • 雷射箔面 (Holographic):動態彩虹漸層,跟隨滑鼠角度變化
  • 磨砂玻璃 (Frosted Glass):backdrop-blur 營造高級透明感
  • 景深效果 (Depth):卡片元素有不同的 Z 軸位移,創造立體層次
  • 3 種視覺主題:大地 / 夢境 / 賽博,各有獨特風格
  • 16 種主題色:對應 Tailwind 色系,一鍵切換光暈顏色
  • 社群連結:支援 6 種平台,輸入網址後自動顯示對應圖示
  • 完整匯出:Copy HTML 包含完整樣式與互動腳本
  • 圖片下載:將卡片截圖存為 PNG,可直接分享社群

系統架構

flowchart TB
    subgraph UI["使用者介面"]
        Preview["預覽區<br/>3D 卡片"]
        Panel["控制面板<br/>Bento Grid 佈局"]
        ThemeSwitch["主題切換<br/>Earth / Dream / Cyber"]
    end

    subgraph JS["JavaScript 模組"]
        App["app.js<br/>主入口"]
        State["state.js<br/>響應式狀態"]
        Card["card.js<br/>3D 引擎"]
        Controls["controls.js<br/>輸入綁定"]
        Export["export.js<br/>匯出功能"]
        Theme["theme.js<br/>主題管理"]
    end

    subgraph CSS["CSS 模組"]
        Variables["variables.css<br/>設計 Tokens"]
        Base["base.css<br/>Reset + 基礎"]
        Layout["layout.css<br/>Bento Grid"]
        CardCSS["card.css<br/>3D 特效"]
        ControlsCSS["controls.css<br/>控制元件"]
        Themes["themes/<br/>earth / dream / cyber"]
    end

    subgraph Effects["視覺特效層"]
        Foil["雷射箔面<br/>conic-gradient"]
        Glare["反光層<br/>linear-gradient"]
        Glass["磨砂玻璃<br/>backdrop-blur"]
        Noise["噪點紋理<br/>SVG feTurbulence"]
    end

    subgraph Export["匯出引擎"]
        HTML["HTML Generator<br/>獨立組件"]
        Screenshot["html2canvas-pro<br/>PNG 截圖"]
    end

    UI --> JS
    JS --> CSS
    Card --> Effects
    Theme --> Themes
    Export --> Screenshot
    Preview --> Export
Loading

技術棧

技術 用途 備註
Vanilla JavaScript 狀態管理與 DOM 操作 ES Modules 模組化
CSS Variables 動態樣式綁定 --mouse-x, --mouse-y, --card-hue
CSS Transform 3D 3D 傾斜效果 preserve-3d, translateZ, rotateX/Y
Tailwind CSS (CDN) 快速樣式開發 僅開發用,匯出不依賴
html2canvas-pro 卡片截圖功能 MIT License,見下方說明

關於 html2canvas-pro

本專案使用 html2canvas-pro 而非原版 html2canvas。

原因:原版 html2canvas 無法正確處理 SVG filter(如 feTurbulence 噪點紋理),會導致 InvalidStateError: Failed to execute 'createPattern' 錯誤。

html2canvas-pro 資訊

項目 內容
來源 yorickshan/html2canvas-pro
授權 MIT License ✅ 可自由商用
性質 原版 html2canvas 的 fork,持續修復 bug
使用者 Metabase (40k+ stars)、Open WebUI (50k+ stars)

主題系統

flowchart LR
    subgraph Themes["三種視覺主題"]
        Earth["🌍 Earth<br/>大地風格"]
        Dream["🌙 Dream<br/>夢境風格"]
        Cyber["⚡ Cyber<br/>賽博風格"]
    end

    subgraph EarthStyle["Earth 特色"]
        E1["Wabi-sabi 侘寂美學"]
        E2["SVG 噪點紋理背景"]
        E3["溫暖大地色調"]
        E4["襯線字體標題"]
    end

    subgraph DreamStyle["Dream 特色"]
        D1["Aurora 極光漸層"]
        D2["Claymorphism 軟 3D"]
        D3["冰藍 + 薰衣草色"]
        D4["動態背景動畫"]
    end

    subgraph CyberStyle["Cyber 特色"]
        C1["CRT 掃描線效果"]
        C2["霓虹綠發光"]
        C3["Monospace 終端字體"]
        C4["故障藝術按鈕"]
    end

    Earth --> EarthStyle
    Dream --> DreamStyle
    Cyber --> CyberStyle
Loading

快速開始

直接開啟

# 直接用瀏覽器開啟
open index.html

# 或使用本地伺服器(推薦,避免 CORS 問題)
npx serve .

操作方式

  1. 預覽區:移動滑鼠體驗 3D 效果
  2. 控制面板
    • 頭像:點擊上傳圖片
    • 身份:輸入名稱與職稱
    • 簡介:輸入個人描述
    • 社群:輸入網址,自動顯示圖示
    • 材質:調整傾斜強度 / 反光強度
    • 主題色:16 種 Tailwind 色系
  3. 匯出
    • Copy HTML:複製完整 HTML(含互動腳本)
    • Download Image:下載 PNG 圖片

支援的社群平台

平台 輸入格式範例
GitHub github.com/username
X (Twitter) x.com/username
Facebook facebook.com/username
Instagram instagram.com/username
Threads threads.net/@username
LinkedIn linkedin.com/in/username

社群連結預設隱藏,輸入網址後才會顯示。匯出的 HTML 也只包含已填寫的連結。


3D 效果原理

CSS Variables 驅動

:root {
  --mouse-x: 0.5;  /* 0~1,滑鼠 X 軸位置 */
  --mouse-y: 0.5;  /* 0~1,滑鼠 Y 軸位置 */
  --tilt-intensity: 15;  /* 傾斜強度 */
  --glare-opacity: 0.4;  /* 反光強度 */
  --card-hue: 200;  /* 主題色相 */
}

.holo-card {
  --rotateX: calc((var(--mouse-y) - 0.5) * var(--tilt-intensity) * -1deg);
  --rotateY: calc((var(--mouse-x) - 0.5) * var(--tilt-intensity) * 1deg);
  transform: rotateX(var(--rotateX)) rotateY(var(--rotateY));
}

雷射箔面效果

.rainbow-glare {
  background: conic-gradient(
    from calc(var(--mouse-x) * 360deg)
    at calc(var(--mouse-x) * 100%) calc(var(--mouse-y) * 100%),
    rgba(255,0,128,0.3),
    rgba(255,128,0,0.3),
    rgba(255,255,0,0.3),
    rgba(0,255,128,0.3),
    rgba(0,128,255,0.3),
    rgba(128,0,255,0.3),
    rgba(255,0,128,0.3)
  );
  mix-blend-mode: color-dodge;
}

專案結構

day-15-holo-card/
├── index.html              # 主頁面
├── .gitignore              # 版本控制忽略清單
├── css/
│   ├── variables.css       # 設計 Tokens
│   ├── base.css            # Reset + 基礎樣式
│   ├── layout.css          # Bento Grid 佈局
│   ├── card.css            # 3D 卡片特效
│   ├── controls.css        # 控制元件樣式
│   └── themes/
│       ├── earth.css       # 大地主題
│       ├── dream.css       # 夢境主題
│       └── cyber.css       # 賽博主題
├── js/
│   ├── app.js              # 主入口
│   ├── state.js            # 響應式狀態管理
│   ├── card.js             # 3D 引擎
│   ├── controls.js         # 輸入綁定
│   ├── export.js           # 匯出功能
│   ├── social.js           # 社群連結處理
│   ├── theme.js            # 主題切換
│   └── utils/
│       └── dom.js          # DOM 工具與安全 localStorage
├── README.md               # 說明文件(中文)
└── README_EN.md            # 說明文件(英文)

匯出範例

匯出的 HTML 是完整可用的組件,包含:

  • 所有 CSS 樣式(無需 Tailwind)
  • 互動腳本(滑鼠追蹤)
  • 當前設定值(傾斜/反光/主題色)
  • 已設定的社群連結

直接貼到任何網頁即可使用。


隨想

創作動機

前幾天我嘗試了各種專案方向:有純視覺的、有涉及音樂與聲音的,還有畫面與媒體的結合。今天特別想挑戰「視覺化名片產生器」的概念:一張可嵌入網站的社交名片,讓每個人都能創造出屬於自己的獨特卡片。

名片的隱喻

名片彷彿代表了我們的身份,因此我想呈現一張華麗的名片

但這也是一種暗喻:我們每個人都有多樣的社交面向。華麗的卡片背後連結著各種社群媒體:GitHub、X、Instagram、LinkedIn⋯⋯然而,那些連結未必全然等同於我本人

社群帳號是我們選擇呈現的切面,是精心策展的櫥窗。真正的我們,遠比任何一張名片更加複雜、更加立體。

這張全息卡片的炫目光澤,或許正是對這種現象的視覺化詮釋。


更新日誌

2025-12-14 - 安全性與效能修復

經過完整的 Code Review,修復了以下問題:

優先級 問題 修復內容
High XSS 風險 colorPicker 改用 DOM API 避免 innerHTML 注入
Medium URL 注入 社群連結加入協議驗證,阻擋 javascript: 注入
Medium 檔案上傳 新增類型(圖片格式)與大小(5MB)驗證
Medium CSP 加入 Content Security Policy meta tag
Medium 錯誤處理 html2canvas-pro 細緻化錯誤訊息
Medium 效能 文字輸入加入 150ms debounce
Medium 程式碼品質 新增 js/utils/dom.js 工具模組
Medium 死程式碼 移除未使用的 batchUpdateState
Low 無障礙 Toast 加入 ARIA 屬性
Low 無障礙 顏色選擇器加入鍵盤導航(方向鍵、Enter、Home/End)
Low 記憶體管理 新增 destroyCard() 事件監聯器清理函式
Low 程式碼品質 移除生產環境 debug console.log

新增檔案

  • .gitignore - 版本控制忽略清單
  • js/utils/dom.js - 統一 DOM 工具與安全 localStorage

授權

本專案採用 Apache License 2.0 授權。

第三方依賴:

About

視覺化 3D 卡片編輯器 | Visual 3D Card Editor with holographic effects

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •